R data.table ': =' работает при прямом вызове, но та же функция в пакете не работает
Используя пакет данных 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 указывает, что добавление data.table в пакетDepends
поле заставляет это работать. Однако я не думаю, что это отличное решение, потому что пакет на самом деле не зависит, не требует и не использует data.table. Я просто хочу иметь возможность использовать data.table с пакетом.
Кроме того, все остальное с data.table прекрасно работает в функции, только не:=
оператор.
Таким образом, я думаю, что следующий вопрос может быть следующим: должен ли я добавлять data.table в Зависит от каждого пакета, который я пишу, чтобы data.tables работали должным образом в функциях этого пакета? Это кажется неправильным ... как правильно подойти к этому?