12

R の data.table パッケージを使用して、

これは機能します:

instruction = "a = data.table(name=1:3, value=1:3, blah=1:3); a[,c('value', 'blah'):=NULL]"
eval(parse(text=instruction))
#   name
#1:    1
#2:    2
#3:    3

これは機能します:

myFunc = function(instruction) {
eval(parse(text=instruction))
}
myFunc(instruction)
#   name
#1:    1
#2:    2
#3:    3

次に、この関数をパッケージに入れてロードし、呼び出してみます。これは機能しません:

myFuncInPackage(instruction)
#Error in `:=`(c("value", "blah"), NULL) : 
#  Check that is.data.table(DT) == TRUE. Otherwise, := and `:=`(...) are defined for use in j, once only and in particular ways. See help(":=").

なんで?


Depends編集: @Roland は、パッケージフィールドに data.table を追加すると機能することを指摘しています。ただし、パッケージは実際には data.table に依存、要求、または使用していないため、これは優れたソリューションではないと思います。パッケージで data.table を使用できるようにしたいだけです。

さらに、 data.table を使用する他のすべては、関数では正常に機能しますが、:=演算子では機能しません。

したがって、フォローアップの質問は次のようになると思います: data.table を作成するすべてのパッケージの Depends に追加して、そのパッケージの関数内で data.tables が期待どおりに機能するようにする必要がありますか? これは正しくないようです...これにアプローチする正しい方法は何ですか?

4

2 に答える 2