11

「依存」フィールドにパッケージがあると、名前空間も自動的にインポートされると常に想定していました。ただし、R 2.15 では、パッケージが実際に検索パスにアタッチされるまで、依存関係が利用可能にならないようです。これは意図した動作ですか?

問題は次のように表示されます: Dependsであるが、'Parent' という名前のパッケージを明示的にインポートせず、'Parent' の名前空間内のオブジェクトを呼び出す関数を含むパッケージ 'Child' があるとします。その後、実際に「子」をアタッチせずにこの関数を呼び出すと、「親」内の関数が見つかりません。

これはパッケージのマニュアルの例ですbigdataが、問題は非常に広まっています。

x = matrix(rnorm(50*80),50,80)
beta = c(3,2,1.5,rep(0,77))
y = rnorm(50) + x%*%beta
z1 = bigdata::lasso.stars(x,y)

lasso.stars が「glmnet」に依存しているため、この例は失敗します。これは、bigdataアタッチされるまでロードされません。呼び出すことができる唯一の方法lasso.starsは、実際にbigdataパッケージを添付することです。

library(bigdata)
z1 = bigdata::lasso.stars(x,y)

さらに複雑なことに、この問題は、この場合は lasso.stars 関数をインポートする「孫」パッケージに継承されているようです。良い例を見つけるのに苦労していますが、それらはそこにあると確信しています。

これはバグですか?パッケージ作成者に Depends の代わりに Imports を使用するよう依頼することで回避できることはわかっていますが、実際には、CRAN のパッケージの大部分は依然として Depends を使用しています。Rが依存パッケージの名前空間を子パッケージの名前空間に自動的にインポートする場合、問題は簡単に回避できるようです。

4

1 に答える 1

2

興味のある方は、r-devel メーリング リストで議論を続けてください。

于 2012-05-13T21:14:50.163 に答える