最も可能性の高い候補は、関数にrequire(<pkg>)
またはへの不要な呼び出しが含まれていることlibrary(<pkg>)
です。このエラー メッセージは少し誤解を招きます。コード内にrequire
またはlibrary
呼び出しを配置したが、ファイル内でそれらの呼び出しを実際に (適切に) 宣言していないことを示していDESCRIPTION
ます。
これらのパッケージのコードを自分のパッケージで使用するつもりなら、これらのlibrary
/require
呼び出しは必要ありません。むしろ、それらのパッケージを使用していること (およびそれらをどのように使用しているか) をファイルで適切に宣言する必要がありDESCRIPTION
ます。
ほとんどの場合、パッケージを「インポート」して、エクスポートされた関数/シンボルの一部またはすべてをパッケージで使用できるようにする必要があります。Imports:
そのようなパッケージをファイルのフィールドに追加できDESCRIPTION
ます-たとえば
Imports: <pkg>
同様に、ファイルに次のように記述して、そのパッケージからエクスポートされたすべてのシンボルを使用することを宣言します。NAMESPACE
import(<pkg>)
これにより、 の名前空間内のすべての関数が自動的に使用可能になるため、コード内のどこでもそのパッケージを使用<pkg>
する必要はありません。require
パッケージのコンテキスト内での主な用途は、require
条件付きでのみ使用できるようにする機能です。たとえば、 を必要とする非常に特殊なプロット メソッドを処理する関数を作成するfoo
とfoo
します。したがって、条件付きで package に依存するコードを含めたい場合はfoo
、次のような形式で記述できます。
if (require("foo")) {
#do stuff
}
そして、ではなくアンダーに含めることfoo
ができDESCRIPTION
ます。もう 1 つの例は、ビネットの作成に使用されるパッケージですが、パッケージのユーザーが必要とすることはありません。Suggests:
Imports:
要約すると、パッケージの名前空間にエクスポートされた関数を使用するためだけにパッケージをインポートする場合は、パッケージ コードのどこにもlibrary
必要ありません。require
編集: R の新しいバージョンでは、R CMD check
を使用すると警告が表示さrequire
れ、代わりに を使用するよう提案される場合がありますrequireNamespace
。その場合、次のパターンに従うことができます。
## Use the 'bar' function from package 'foo'
if (requireNamespace("foo", quietly = TRUE)) {
foo::bar()
}