最も可能性の高い候補は、関数に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()
}