使用 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(":=").
为什么?
编辑:@Roland 指出在包Depends
字段中添加 data.table 可以使其工作。但是,我认为这不是一个很好的解决方案,因为该包并不真正依赖、需要或使用 data.table。我只想能够将 data.table 与包一起使用。
此外, data.table 的所有其他内容在函数中都可以正常工作,只是在:=
运算符中不行。
所以我想一个后续问题可能是:我是否应该将 data.table 添加到我编写的每个包的 Depends 中,以便 data.tables 在该包的函数中按预期工作?这似乎不对......解决这个问题的正确方法是什么?