これはFAQ質問であることを意図しているので、できるだけ完全にしてください。答えはコミュニティの答えなので、なにか足りないと思ったら編集してください
私はRを使っていてsome.function
を試しましたが、以下のエラーメッセージが出ました。
Error: could not find function "some.function"
この質問は非常に定期的に出てきます。 Rでこのようなエラーが発生したら、どうすれば解決できますか?
確認する必要があることがいくつかあります。
install.packages("thePackage")
(これは一度だけ行う必要があります)require(thePackage)
またはlibrary(thePackage)
(これは新しいRセッションを開始するたびに行われるべきです)どのパッケージにその機能があるのかわからない場合は、いくつかのことができます。
help.search("some.function")
または??some.function
と入力して、どのパッケージに含まれているかを示す情報ボックスを表示します。find
とgetAnywhere
は関数を見つけるためにも使うことができます。findFn
パッケージでsos
を使うことができます 。RSiteSearch("some.function")
または rdocumentation または rseek を使用して検索すると、関数を見つけることができます。 。時々、あなたはRの古いバージョンを使う必要があるが、新しいバージョン用に作成されたコードを実行する。新しく追加された機能(例えばR 3.4.0のhasName)はそれから見つけられないでしょう。古いバージョンのRを使用していて新しい機能を使用したい場合は、パッケージ バックポート を使用してそのような機能を使用可能にすることができます。バックポートの gitレポジトリ にバックポートする必要がある関数のリストもあります。 R3.0.0より古いRバージョンは、R3.0.0以降のバージョン用にビルドされたパッケージと互換性がないことに注意してください。
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.prcomp
stats
はplot.prcomp
を使用していますが、stats
からはエクスポートされないため、上記のエラーが発生します。
エラー: 'plot.prcomp'は 'namespace:stats'からエクスポートされたオブジェクトではありません
これは次のように文書化されています。
pkg :: nameは名前空間pkgのエクスポートされた変数名の値を返しますが、pkg ::: nameは内部変数名の値を返します。
私は通常、コンピュータが私の管理下にあるときにこの問題を解決することができますが、グリッドを使って作業するときにはもっと面倒です。グリッドが均質ではない場合、すべてのライブラリがインストールされるとは限りません。私の経験では、依存関係がインストールされていないためにパッケージがインストールされなかったことがよくあります。これに対処するために、次の点を確認します。
.libPaths()
は良いチェックです。ldd
の結果をチェックしてくださいこれにかなり遭遇したので、これらのステップのいくつかはかなり日常的になります。 #7は良い出発点のように思えるかもしれませんが、これらは私がそれらを使用する頻度のおおよその順序で記載されています。
あなたがあなたのパッケージをチェックする間にこれが起こるならば(R CMDチェック)、あなたのNAMESPACEを見てください。
これを解決するには、NAMESPACEに次の文を追加します。
exportPattern("^[^\\\\.]")
これはドット( "。")で始まらないものすべてをエクスポートします。これにより、ドットで始まる隠し機能を持つことができます。
.myHiddenFunction <- function(x) cat("my hidden function")
私はエラーがありました
エラー:関数
some.function
が見つかりませんでした
rStudioで作っていたパッケージのR CMDチェックをするときに起こります。追加しました
exportPattern( "。")
nAMESPACEファイルにトリックを行いました。補足として、私は最初にROxygenを使用してドキュメントを作成するようにRStudioを設定していました - そしてROxygenが私のためにNAMESPACEファイルを書き込む設定を選択しました。そこで、私の場合はRoxygenの設定からNAMESPACEのチェックを外し、NAMESPACEにexportPattern( "。")を追加してこのエラーを解決しました。
このエラーは、必須の引数が欠落している場合(つまり、十分な引数を指定していない場合)、関数の名前が有効であっても発生する可能性があります。
これをRcppコンテキストで取得しました。そこでは、オプション引数を使用してC++関数を作成し、それらの引数をRで指定しませんでした。C++からのオプション引数はRでは必須と見なされていました。 、Rは正しい名前に一致する関数を見つけることができませんでしたが、引数の数が正しくありません。
Rcpp関数:SEXP RcppFunction(arg1, arg2=0) {}
Rコール:RcppFunction(0)
はエラーを発生させますRcppFunction(0, 0)
はしません
Rdocumentation.org は非常に便利な検索機能を備えています。とりわけ、CRAN上のすべてのパッケージから、およびパッケージから機能を見つけることができます。 BioconductorとGitHubから。
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)