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 が期待どおりに機能するようにする必要がありますか? これは正しくないようです...これにアプローチする正しい方法は何ですか?