Code Fix

初級

could not find function "x" の原因と直し方

存在しない名前の関数を呼び出したときに出るエラーです。関数名を1文字でも間違えると、Rは似た名前を推測して実行してはくれず、その場でエラーになります。

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

Error in summ(c(1, 2, 3)) : could not find function "summ"
Error
エラー種別 — 実行中に発生しました
summ(c(1, 2, 3))
発生箇所 — エラーの原因になった呼び出し
could not find function "summ"
詳細メッセージ — 何が問題だったか

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

パターン1

 1  result <- summ(c(1, 2, 3))
                ^
 2  print(result)
Error in summ(c(1, 2, 3)) : could not find function "summ"

sumのつもりでsummと打つと、Rはそんな名前の関数を知らないため、その場でエラーになります。

直し方: summ を sum にします。

この問題を解いてみる →

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

パターン2

 1  x <- prnit("hello")
           ^
Error in prnit("hello") : could not find function "prnit"

printのnとiが入れ替わったタイプミスです。関数名は完全に一致していないと別の名前として扱われます。

直し方: prnit を print にします。

この問題を解いてみる →

パターン3

 1  y <- pastee("a", "b")
            ^
 2  print(y)
Error in pastee("a", "b") : could not find function "pastee"

eが1つ多いだけでも、Rにとっては存在しない関数名になります。

直し方: pastee を paste にします。

この問題を解いてみる →

パターン4

 1  z <- maxx(c(1, 5, 3))
           ^
 2  print(z)
Error in maxx(c(1, 5, 3)) : could not find function "maxx"

大文字小文字も含めて、関数名は正確に一致している必要があります。

直し方: maxx を max にします。

この問題を解いてみる →

パターン5

 1  n <- nchaar("hello")
            ^
 2  print(n)
Error in nchaar("hello") : could not find function "nchaar"

エラーメッセージに出る関数名を1文字ずつ確認すれば、タイプミスの箇所を特定できます。

直し方: nchaar を nchar にします。

この問題を解いてみる →

よくある誤解

「大文字小文字くらいなら合わせてくれるはず」という思い込みは誤りです。関数名は完全に一致していないと別の名前として扱われます。

実務での勘所

Rの名前解決には驚くべき性質があります。c <- 10のように組み込み関数c()と同じ名前の変数を作ってしまっても、c(1, 2, 3)という関数呼び出しの形で書けば、Rはこの数値の10を無視して、ちゃんと元のc()関数を探し当てて実行します。これはRが「関数を呼び出す位置での名前解決」では、関数でないオブジェクトを飛び越えて、呼び出し可能な関数が見つかるまで外側のスコープを探し続ける仕組みを持っているためです。裏を返せば、本当にどこにもその名前の関数が無ければ、この探索は最後まで失敗し、正直に「見つからない」と報告してくれます。

演習をはじめる

関連するエラー

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