エラー:Rで関数…が見つかりませんでした


177

これはFAQの質問であるため、できるだけ完全なものにしてください。答えはコミュニティの答えです。何か不足していると思われる場合は自由に編集してください。

この質問は議論され、メタで承認されました。

Rを使用して試してみましsome.functionたが、次のエラーメッセージが表示されました。

Error: could not find function "some.function"

この質問は非常に定期的に出てきます。Rでこのタイプのエラーが発生した場合、どのように解決できますか?


5
:あなたは、最初のメタにこのdisussionを読んで、この質問を閉じるために投票する前にmeta.stackexchange.com/questions/101892/...
Andrie

2
他のすべてが失敗した場合は、ベースRとインストールされたパッケージのソースコードをgreppingしてみてください
nullglob

3
@nullglobそれはやや極端に思えます:-)
ギャビン・シンプソン

関連する質問があります:stackoverflow.com/questions/23357551/…。この場合、ANY Rコマンドは失敗しますが、q()!アドバイスをいただければ幸いです!
Aleksandr Blekh 2014

ばかげているかもしれませんが、関数の出力を関数自体と名付けないように注意してください。[経験から学ぶ...]
user3507584 2017

回答:


126

確認する必要があることがいくつかあります。

  1. 関数の名前を正しく書きましたか?名前は大文字と小文字が区別されます。
  2. 関数を含むパッケージをインストールしましたか?install.packages("thePackage")(これは一度だけ行う必要があります)
  3. そのパッケージをワークスペースに添付しましたか? require(thePackage)またはlibrary(thePackage)(これは、新しいRセッションを開始するたびに実行する必要があります)
  4. この機能がまだ存在しない古いRバージョンを使用していますか?

その関数がどのパッケージにあるかわからない場合は、いくつかのことができます。

  1. 適切なパッケージをインストールおよびアタッチ/ロードしたことが確実な場合は、help.search("some.function")または??some.functionを入力して、パッケージが含まれているパッケージを示す情報ボックスを取得します。
  2. findまた、getAnywhere関数の検索にも使用できます。
  3. パッケージについて手掛かりがない場合は、 findFnsosで説明したようにパッケージこの回答
  4. RSiteSearch("some.function")またはrdocumentationで検索またはrseekを使用した検索は、関数を見つける別の方法です。

古いバージョンのRを使用する必要がある場合がありますが、新しいバージョン用に作成されたコードを実行します。新しく追加された関数(R 3.4.0のhasNameなど)は、その時点では見つかりません。古いRバージョンを使用していて、新しい関数を使用したい場合は、パッケージバックポートを使用して、そのような関数を使用可能にすることができます。また、バックポートのgitリポジトリにバックポートする必要がある関数のリストもあります。R3.0.0より古いRバージョンは、R3.0.0以降のバージョン用にビルドされたパッケージと互換性がないことに注意してください。


こんにちは、ジョリス、ちょっと質問があります。私はRの初心者ですが、正常にインストールできました。コマンドラインから「天体」パッケージの「cosvol」機能を使いたいのですが。FedoraリポジトリーからLinuxシステムにインストールされるRとは異なり、「ホーム」の別のディレクトリーに「天体」パッケージをダウンロードしました。関数「cosvol()」を要求するたびに、「関数「cosdistCoVol」が見つかりませんでした」と表示されます。「天体」パッケージにすべての機能が個別にダウンロードされているディレクターについて、Rに通知する方法がわかりません。よろしくお願いします。
ベンジャミン

関数がコア/ベースRライブラリの1つにある場合は、それを更新する必要があります。私の場合、hasName関数をで使用しようとしていましたutils。ただし、私は3.3.1を使用しており、hasName3.4.0まで導入されませんでした。utilsスタンドアロンライブラリとして更新することはできないため、R / R Studioによると、更新するライブラリはありませんでした。
mpag 2018年

@mpag utilsパッケージはRリリースの不可欠な部分だからです。RSiteSearch( "hasName")を文字通り使用する場合、最初のエントリは、R 3.3.1でその機能を使用可能にするバックポートパッケージへの参照です。詳細については、github.com / r-lib / backportsも参照してください。その場合の情報をいくつか追加しました。通知にはthxを使用します
Joris Meys 2018

@JorisMeysとても参考になりました。また、その関数のヘルプページで関数がRに追加されたときを文書化するのは標準的な方法であるべきだと提出したいと思います(例?hasName)。例えば、どちらhttps://www.rdocumentation.org/packages/utils/versions/3.4.3/topics/hasNamehttps://stat.ethz.ch/R-manual/R-devel/library/utils/html/hasName.html「R 3.4.0で導入された」と言っていない私は、githubのレポと見て参照して、それを考え出すことになったblameutilsの/ R / hasName.Rとベース/ R / match.Rため
mpag

@mpagまたはあなたは文字通り最初のヒットを開いRSiteSearch("hasName")て同じ情報を得たかもしれません。それが、私がその答えに数年前に追加した理由です。知っておくと便利です;-)
Joris Meys

29

NAMESPACEが存在する場合の別の問題は、パッケージfooからエクスポートされていない関数を実行しようとしていることです。

たとえば、(不自然な、私は知っていますが):

> mod <- prcomp(USArrests, scale = TRUE)
> plot.prcomp(mod)
Error: could not find function "plot.prcomp"

まず、S3メソッドを直接呼び出すことはできませんが、plot.prcomp実際にはパッケージfooの便利な内部関数であると想定してください。実行していることがわかっている場合にそのような関数を呼び出すには、を使用する必要があります:::。また、関数が含まれている名前空間も知っておく必要があります。を使用しgetAnywhere()て、関数がパッケージstatsにあることがわかります。

> getAnywhere(plot.prcomp)
A single object matching ‘plot.prcomp’ was found
It was found in the following places
  registered S3 method for plot from namespace stats
  namespace:stats
with value

function (x, main = deparse(substitute(x)), ...) 
screeplot.default(x, main = main, ...)
<environment: namespace:stats>

したがって、次のように直接呼び出すことができます。

> stats:::plot.prcomp(mod)

plot.prcomp目的を説明するために、例として使用しました。通常の使用では、このようなS3メソッドを呼び出すことはできません。しかし、言ったように、呼び出したい関数が存在する場合(たとえば、非表示のユーティリティ関数である可能性があります)がにあるnamespace場合、Rは、どの名前空間を検索するかを指定しない限り、関数を見つけられないと報告します。 。

以下に、この比較: stats::plot.prcomp ながらため、上記の失敗statsの用途plot.prcomp、それはからエクスポートされていないstatsエラーが正しく教えてくれるよう:

エラー:「plot.prcomp」は「namespace:stats」からエクスポートされたオブジェクトではありません

これは次のように文書化されています。

pkg :: nameはエクスポートされた変数名の値を名前空間pkgに返しますが、pkg ::: nameは内部変数名の値を返します。


1
ありがとう-これはR 3にアップグレードした後に私を救いましたcould not find function "anova.lm"... stats:::anova.lm()代わりに電話で修正しました
ErichBSchulz '22 / 11/14

それほど関連性はありませんが、の使用は:::設計ミスと呼ばれており、それ::が推奨されます。簡単に参照を見つけることができません。
NelsonGon

1
すべての原因に関しては@NelsonGon、:::::されている異なると、あなたの編集はしない仕事しますplot.prcomp()関数がされていない、あなたが使用する必要があるので、統計名前空間からエクスポート:::
Gavin Simpson、

@GavinSimpsonそうです!私は尊重されたR開発者の言葉をデザインエラーと見なし、実際にそれを検証したことはありませんでした。おそらく、それは彼らの個人的な意見でした。
NelsonGon

11

コンピュータが自分の制御下にあるときに、通常、この問題を解決できますが、グリッドを操作する場合は、さらに厄介です。グリッドが均質でない場合、すべてのライブラリーがインストールされない可能性があり、依存関係がインストールされなかったためにパッケージがインストールされなかったことがよくあります。これに対処するために、以下を確認します。

  1. Fortranはインストールされていますか?( 'gfortran'を探してください。)これは、Rのいくつかの主要なパッケージに影響します。
  2. Javaはインストールされていますか?Javaクラスパスは正しいですか?
  3. パッケージが管理者によってインストールされ、適切なユーザーが使用できることを確認してください。場合によっては、ユーザーがパッケージを間違った場所にインストールしたり、適切なライブラリに適切にアクセスせずに実行したりすることがあります。 .libPaths()良いチェックです。
  4. チェックlddRの結果を、共有ライブラリについて確認します
  5. 必要なすべてのパッケージをロードし、いくつかの小さなテストを実行するスクリプトを定期的に実行することをお勧めします。これにより、ワークフローのできるだけ早い段階でパッケージの問題が検出されます。これはビルドテストやユニットテストに似ていますが、非常に基本的なものが機能することを確認するためのスモークテストに似ています。
  6. パッケージがネットワークからアクセス可能な場所に保存できる場合、それらはありますか?できない場合、マシン間で一貫したバージョンを保証する方法はありますか?(これは、OTを見えるかもしれませんが、正しいパッケージのインストールがの可用性含んバージョンを。)
  7. パッケージは特定のOSで利用できますか?残念ながら、すべてのパッケージがプラットフォーム間で利用できるわけではありません。これはステップ5に戻ります。可能であれば、パッケージの適切なフレーバーに切り替えることによって別のOSを処理する方法を見つけるか、特定のケースで依存関係をオフにしてください。

これにかなり遭遇したので、これらのステップのいくつかはかなり日常的になります。#7は良い出発点のように思えるかもしれませんが、これらは私がそれらを使用する頻度のおおよその順序でリストされています。


2
確かに有用な考慮事項ですが、「パッケージのインストール時にエラーが発生するのはなぜですか」に対する回答です。
IRTFM 2011

@DWin:たぶん、そうでもない。よくわからなかったかもしれません。これらの問題は、パッケージがインストールされていないためにジョブがグリッドで停止するときに発生します。グリッドでソフトウェアの一貫性を維持することは難しくありませんが、インストール、メンテナンス、およびデバッグのための適切なプロセスが必要です。これらは、少なくとも機能が使用できないときに発生するきしむ音に関連しているため、各フェーズから現れる項目の一部にすぎません。:)
イテレータ2011

6

パッケージのチェック(R CMDチェック)中にこれが発生した場合は、NAMESPACEを確認してください。

これを解決するには、NAMESPACEに次のステートメントを追加します。

exportPattern("^[^\\\\.]")

これは、ドット( "。")で始まらないものすべてをエクスポートします。これにより、ドットで始まる隠し機能を持つことができます。

.myHiddenFunction <- function(x) cat("my hidden function")

これはRStudioで私にとって失敗します-エラー: '\。' 「^ \ [^。」」始まる文字列で認識されないエスケープである
アンドリュー

1
作成していないパッケージを使用しているときにエラーが発生した場合、どうすればよいですか?おそらく作者が上記を行わなかったため、パッケージ自体は定義されていない内部メソッドを使用したいと思われます。
Andre Luus

4

エラーがありました

エラー:関数が見つかりませんでした some.function

RStudioで作成していたパッケージのR CMDチェックを実行すると発生します。追加した

exportPattern( "。")

NAMESPACEファイルへのトリックでした。補足として、ROStudioを使用してドキュメントを作成するようにRStudioを最初に構成し、ROxygenがNAMESPACEファイルを書き込む構成を選択しました。これにより、編集内容が消去され続けました。そのため、私のインスタンスでは、Roxygen構成からNAMESPACEのチェックを外し、このエラーを解決するためにNAMESPACEにexportPattern( "。")を追加しました。


1
ネームスペースファイルに加えた編集を認識し、そのまま保持するroxygen2を使用する方がよいでしょう。名前空間ファイルでexportPattern( "。")を使用しないことも強くお勧めします。代わりに、個々のファイルでタグ@exportを使用して、エクスポートが必要な関数のみをエクスポートします。Roxygen2は、名前空間を自動的に更新して、エクスポートが必要なすべての関数をエクスポートします。
Joris Meys 2013

1
ジョリス-時間を割いてコメントしていただき本当にありがとうございます。私はあなたが書いたものに100%同意します。私は現在devtools / roxygen2を使用しており、エクスポートする必要のあるすべての関数に次のものを入れています:# '@export
swihart

4

このエラーは、必須の引数が欠落している(つまり、引数が不足している)場合に関数の名前が有効であっても発生する可能性があります。
これは、オプションの引数を使用してC ++関数を記述し、Rでそれらの引数を提供しなかったRcppコンテキストで取得しました。C++からのオプションの引数は、Rによって必須であると見なされたようです。その結果、Rは見つかりませんでした正しい名前に一致する関数ですが、引数の数が正しくありません。

Rcpp関数: SEXP RcppFunction(arg1, arg2=0) {}
R呼び出し:
RcppFunction(0)エラーを発生さ
RcppFunction(0, 0)せません


2

Rdocumentation.orgには、CRANのすべてのパッケージや、BioductorやGitHubのパッケージから機能を見つけることができる非常に便利な検索機能があります。

ここに画像の説明を入力してください


1

使用している場合 parallelMap場合は、カスタム関数をスレーブジョブにエクスポートする必要があります。そうでない場合は、「関数が見つかりませんでした」というエラーが発生します。

parallelStart同じ引数に欠落していないレベルを設定するとparallelExport、に渡されます。それ以外の場合は、同じエラーが発生します。したがって、これは厳密に従う必要があります。

parallelStart(mode = "<your mode here>", N, level = "<task.level>")
parallelExport("<myfun>", level = "<task.level>")

0

名前間隔によってこのエラーを修正できる場合があります::関数呼び出し

comparison.cloud(colors = c("red", "green"), max.words = 100)

wordcloud::comparison.cloud(colors = c("red", "green"), max.words = 100)

1
エラーは「比較」ではなく「比較」を示します。名前空間は問題ではなかったと思います:-)
Joris Meys

グッドスポット@Joris Meys
Tony Cronin

-1

同じエラーが発生しました。バージョン.99xxxを実行していました。ヘルプメニューから更新を確認し、My RStudioを1.0xに更新したところ、エラーは発生しませんでした

とてもシンプルなソリューション、R Studioを更新するだけ


1
エラーの性質について詳しく説明してください。これは役立つかもしれませんが、非常に特殊なケースでのみです。
Joris Meys、2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.