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が「関数を呼び出す位置での名前解決」では、関数でないオブジェクトを飛び越えて、呼び出し可能な関数が見つかるまで外側のスコープを探し続ける仕組みを持っているためです。裏を返せば、本当にどこにもその名前の関数が無ければ、この探索は最後まで失敗し、正直に「見つからない」と報告してくれます。