if の条件式に = を書くと構文エラーになる(比較は == が必要)
if()の条件の中に==の代わりに=を書くと、Rはそれをif自体への名前付き引数の指定と解釈しようとして構文エラーになります。
エラーメッセージの読み方
Error: unexpected '=' in "if (age ="
Error- エラー種別 — 実行前の構文解析で検出されました。行番号は付かず、代わりにどこまで読めたかのソース抜粋が示されます
unexpected '=' in "if (age ="- 内容 — 予期しなかったトークン、またはファイルの終わりに達したこと
このエラーが出る典型パターン
パターン1
1 age <- 20 2 if (age = 18) { ^ 3 print("adult") 4 }
Error: unexpected '=' in "if (age ="
if()の条件の中に=を書くと、Rはそれを比較としても代入としても解釈できず、その場で構文エラーになります。
直し方: = を == にします。
広告
広告スロット(未設定)
パターン2
1 status <- "pending" 2 if (status = "done") { ^ 3 print("finished") 4 }
Error: unexpected '=' in "if (status ="
比較したいだけでも、==を1文字省略して=にすると構文エラーになります。
直し方: = を == にします。
パターン3
1 count <- 0 2 if (count = 5) { ^ 3 print("five") 4 }
Error: unexpected '=' in "if (count ="
Rのif()のカッコの中では=は使えません。比較には必ず==を使う必要があります。
直し方: = を == にします。
パターン4
1 flag <- FALSE 2 if (flag = TRUE) { ^ 3 print("on") 4 }
Error: unexpected '=' in "if (flag ="
論理値同士の比較でも同じで、=では構文エラーになります。
直し方: = を == にします。
パターン5
1 level <- 1 2 if (level = 99) { ^ 3 print("max") 4 }
Error: unexpected '=' in "if (level ="
他の言語では=でも動いてしまう場合がありますが、Rのif()の中では構文として認められません。
直し方: = を == にします。
よくある誤解
「=でも代入として実行され、0以外なら真として通ってしまうはず」という思い込みは誤りです。Rのif()はカッコの中で=を使うと、比較としても代入としても成立せず、その場で構文エラーになります。
実務での勘所
Rの文法では、識別子の直後の丸括弧の中で=を使うと、通常は関数呼び出しの名前付き引数(f(x = 5)のような)を意味します。if(...)も見た目は関数呼び出しに似た構文ですが、実際にはif文専用の特別な文法規則で処理されており、名前付き引数を受け付ける仕組みがありません。この食い違いのため、if(x = 5)と書くと、パーサーは=を名前付き引数の指定として解釈しようとして行き詰まり、構文エラーになります。