文字列の閉じクォート忘れによる構文エラー
文字列を囲むクォートの片方を書き忘れると、それ以降のコードすべてが文字列の中身として読み込まれ続け、閉じクォートが見つからないまま構文エラーになります。
エラーメッセージの読み方
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のファイルパスや正規表現パターンのように、引用符やバックスラッシュを大量に含む文字列を書くときに、閉じ忘れやエスケープのミスを避けやすくなります。