Code Fix

初級

括弧の閉じ忘れによる構文エラーの原因と直し方

関数呼び出しの丸括弧を閉じ忘れると、Rはどこまでが引数なのか判断できず、次の行のコードまで読み込み続けた末に構文エラーになります。

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

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

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

パターン1

 1  total <- sum(c(1, 2, 3) 
                           ^
 2  print(total)
Error: unexpected symbol in: "total <- sum(c(1, 2, 3) print"

sum(c(...))の閉じ括弧が1つ足りません。Rはどこまでが関数呼び出しなのか判断できず、次の行のprintまで読み込んでから構文エラーになります。

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

この問題を解いてみる →

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

パターン2

 1  avg <- mean(c(4, 8, 12) 
                           ^
 2  print(avg)
Error: unexpected symbol in: "avg <- mean(c(4, 8, 12) print"

mean()の呼び出しを開いた括弧の数と、閉じた括弧の数が合っていません。c()の分だけでなくmean()自体の閉じ括弧も必要です。

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

この問題を解いてみる →

パターン3

 1  score <- 85
 2  message <- paste("Score:", score 
                                    ^
 3  print(message)
Error: unexpected symbol in: "message <- paste("Score:", score print"

paste()の引数を並べ終えたあと、呼び出し全体を閉じる括弧を忘れています。

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

この問題を解いてみる →

パターン4

 1  word <- "hello"
 2  len <- nchar(word 
                     ^
 3  print(len)
Error: unexpected symbol in: "len <- nchar(word print"

nchar(word)の閉じ括弧が無いと、次の行のprintまでが1つの式として読み込まれようとし、構文エラーになります。

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

この問題を解いてみる →

パターン5

 1  value <- 7.456
 2  rounded <- round(value, 2 
                             ^
 3  print(rounded)
Error: unexpected symbol in: "rounded <- round(value, 2 print"

round()は引数を2つ渡していても、呼び出し全体を閉じる括弧は別に必要です。

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

この問題を解いてみる →

よくある誤解

エラーが指す行に閉じ括弧を足しても直らないことがあります。本当に足りないのは、括弧が開いた行の閉じ括弧です。

実務での勘所

対話的なRコンソールでこの種のミスを犯すと、Rはすぐにエラーを出さず、+という継続入力のプロンプトを表示して次の行の入力を待ち続けます。これは「まだ式が終わっていない」とRが認識しているサインで、そこで閉じ括弧を1つ入力すれば式を完成させられます。Rscriptでファイルをまとめて実行する場合はこの対話的な救済が無く、ファイル全体を読み終えた時点でいきなり構文エラーとして報告されます。

演習をはじめる

関連するエラー

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