web-dev-qa-db-ja.com

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

これはFAQ質問であることを意図しているので、できるだけ完全にしてください。答えはコミュニティの答えなので、なにか足りないと思ったら編集してください

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

私はRを使っていてsome.functionを試しましたが、以下のエラーメッセージが出ました。

Error: could not find function "some.function"

この質問は非常に定期的に出てきます。 Rでこのようなエラーが発生したら、どうすれば解決できますか?

160
Joris Meys

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

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

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

  1. 正しいパッケージをインストールしてアタッチ/ロードしたことを確認したら、help.search("some.function")または??some.functionと入力して、どのパッケージに含まれているかを示す情報ボックスを表示します。
  2. findgetAnywhereは関数を見つけるためにも使うことができます。
  3. あなたがそのパッケージについて手がかりを持っていないのなら、 この答えで説明されるようにfindFnパッケージでsosを使うことができます
  4. RSiteSearch("some.function")または rdocumentation または rseek を使用して検索すると、関数を見つけることができます。 。

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

112
Joris Meys

NAMESPACEがある場合のもう1つの問題は、packagefooから未エクスポートの関数を実行しようとしていることです。

例えば(人為的に、私は知っていますが):

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

まず、S3メソッドを直接呼び出すべきではありませんが、plot.prcompが実際にはpackagefooの中の便利な内部関数であると仮定しましょう。自分のしていることがわかっている場合にこのような関数を呼び出すには、:::を使用する必要があります。関数が見つかった名前空間も知っておく必要があります。 getAnywhere()を使用して、関数がパッケージ統計にあることを見つけます。

> 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の中にあるなら、に。

これを次と比較してください。stats::plot.prcompstatsplot.prcompを使用していますが、statsからはエクスポートされないため、上記のエラーが発生します。

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

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

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

27
Gavin Simpson

私は通常、コンピュータが私の管理下にあるときにこの問題を解決することができますが、グリッドを使って作業するときにはもっと面倒です。グリッドが均質ではない場合、すべてのライブラリがインストールされるとは限りません。私の経験では、依存関係がインストールされていないためにパッケージがインストールされなかったことがよくあります。これに対処するために、次の点を確認します。

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

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

11
Iterator

あなたがあなたのパッケージをチェックする間にこれが起こるならば(R CMDチェック)、あなたのNAMESPACEを見てください。

これを解決するには、NAMESPACEに次の文を追加します。

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

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

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

私はエラーがありました

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

rStudioで作っていたパッケージのR CMDチェックをするときに起こります。追加しました

exportPattern( "。")

nAMESPACEファイルにトリックを行いました。補足として、私は最初にROxygenを使用してドキュメントを作成するようにRStudioを設定していました - そしてROxygenが私のためにNAMESPACEファイルを書き込む設定を選択しました。そこで、私の場合はRoxygenの設定からNAMESPACEのチェックを外し、NAMESPACEにexportPattern( "。")を追加してこのエラーを解決しました。

4
swihart

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

Rcpp関数:SEXP RcppFunction(arg1, arg2=0) {}
Rコール:
RcppFunction(0)はエラーを発生させます
RcppFunction(0, 0)はしません

4
Math

Rdocumentation.org は非常に便利な検索機能を備えています。とりわけ、CRAN上のすべてのパッケージから、およびパッケージから機能を見つけることができます。 BioconductorとGitHubから。

enter image description here

2
maj

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

存在しないレベルをparallelStartに設定した場合、同じ引数をparallelExportに渡す必要がありますが、それ以外の場合は同じエラーになります。したがって、これは厳密に従うべきです。

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

あなたはこのエラーを修正することができるかもしれません名前空間::関数呼び出し

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

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