Code Fix

初級

Error: object 'x' not found の原因と直し方

宣言・代入していない名前を参照したときに出るエラーです。変数名のタイプミスのほか、代入する前に参照してしまったときにも起こります。

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

Error: object 'pricee' not found
Error
エラー種別 — 実行中に発生しました。呼び出し元が特定できない場合はこの形式になります
object 'pricee' not found
詳細メッセージ — 何が問題だったか

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

パターン1

 1  price <- 1000
 2  print(pricee)
             ^
Error: object 'pricee' not found

priceとpriceeは1文字違うだけでも別の名前です。Rは似た名前を推測して補ってはくれません。

直し方: pricee を price にします。

この問題を解いてみる →

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

パターン2

 1  score <- 88
 2  print(scroe)
            ^
Error: object 'scroe' not found

文字の順番が入れ替わったタイプミスも、Rには全く別の変数名として見えます。

直し方: scroe を score にします。

この問題を解いてみる →

パターン3

 1  total <- 250
 2  print(totall)
             ^
Error: object 'totall' not found

1文字多いだけでも一致しない名前として扱われ、一度も代入されていない変数の参照になります。

直し方: totall を total にします。

この問題を解いてみる →

パターン4

 1  username <- "kenji"
 2  print(usrname  )
              ^
Error: object 'usrname' not found

母音が抜けたタイプミスも、Rにとっては全く別の名前として扱われます。

直し方: usrname を username にします。

この問題を解いてみる →

パターン5

 1  temperature <- 25
 2  print(temprature )
               ^
Error: object 'temprature' not found

長い変数名ほどタイプミスに気づきにくくなります。代入した名前と完全に一致しているか確認してください。

直し方: temprature を temperature にします。

この問題を解いてみる →

よくある誤解

「Rは変数を使う前に宣言しなくていいはず」と思っていても、一度も代入されていない名前を参照すればobject not foundになります。宣言不要なのは型だけで、最初の代入自体は必要です。

実務での勘所

Rが名前を探す順序は、今いる環境(environment)から、その関数が定義された場所を辿って外側へ外側へと探していく「レキシカルスコープ」という方式です。これは関数が呼び出された場所ではなく定義された場所を基準にする点が重要で、Rの前身であるS言語が採用していた動的スコープ(呼び出された場所を基準にする方式)とは異なります。Rを設計したRoss IhakaとRobert Gentlemanは、Scheme言語から着想を得てこのレキシカルスコープを採用しており、SとRの数少ない、しかし重要な設計上の違いの1つです。

演習をはじめる

関連するエラー

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