Code Fix

初級

文字列の閉じクォート忘れによる構文エラー

文字列を囲むクォートの片方を書き忘れると、それ以降のコードすべてが文字列の中身として読み込まれ続け、閉じクォートが見つからないまま構文エラーになります。

エラーメッセージの読み方

Error: unexpected end of input
Error
エラー種別 — 実行前の構文解析で検出されました。行番号は付かず、代わりにどこまで読めたかのソース抜粋が示されます
unexpected end of input
内容 — 予期しなかったトークン、またはファイルの終わりに達したこと

このエラーが出る典型パターン

パターン1

 1  name <- "Taro  
                  ^
 2  print(name)
Error: unexpected end of input

文字列を開いたクォートを閉じないと、次の行のコードまで文字列の中身として読み込まれ続け、ファイルの終わりで構文エラーになります。

直し方: (空) を " にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  title <- "R Guide  
                      ^
 2  print(nchar(title))
Error: unexpected end of input

閉じクォートが無いと、それ以降の行がすべて文字列に飲み込まれ、ファイルの終わりに達して初めてエラーになります。

直し方: (空) を " にします。

この問題を解いてみる →

パターン3

 1  msg <- "Task complete  
                          ^
 2  print(msg)
Error: unexpected end of input

エラーはファイルの終わりで出ますが、直すべきなのは文字列が始まった行の閉じクォートです。

直し方: (空) を " にします。

この問題を解いてみる →

パターン4

 1  note <- "Meeting notes  
                           ^
 2  print(nchar(note))
Error: unexpected end of input

文字列リテラルは開始と終了のクォートが対応していないと構文として成立しません。

直し方: (空) を " にします。

この問題を解いてみる →

パターン5

 1  label <- "Final version  
                            ^
 2  print(toupper(label))
Error: unexpected end of input

クォートを閉じ忘れると、後続の行がどんどん文字列に取り込まれ、思わぬところでエラーになります。

直し方: (空) を " にします。

この問題を解いてみる →

よくある誤解

エラーが指す位置にクォートを足しても直らないことがあります。本当に直すべきは、文字列が始まった箇所の閉じクォートです。

実務での勘所

R 4.0以降では、r"(...)"という生文字列(raw string)の記法が使えます。この構文の中ではバックスラッシュのエスケープが一切解釈されないため、Windowsのファイルパスや正規表現パターンのように、引用符やバックスラッシュを大量に含む文字列を書くときに、閉じ忘れやエスケープのミスを避けやすくなります。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)