Code Fix

初級

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)と書くと、パーサーは=を名前付き引数の指定として解釈しようとして行き詰まり、構文エラーになります。

演習をはじめる

関連するエラー

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