R data.table ': =' funktioniert beim direkten Aufruf, aber die gleiche Funktion in einem Paket schlägt fehl

Verwenden Sie das data.table-Paket von R,

Das funktioniert

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

Das funktioniert

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

Nun, fügen Sie diese Funktion in ein Paket ein, laden Sie sie und versuchen Sie, sie aufzurufen. Das geht nicht:

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(":=").

Warum

EDIT: @Roland weist darauf hin, dass das Hinzufügen von data.table im PaketDepends Feld macht es funktioniert. Ich halte dies jedoch nicht für eine großartige Lösung, da das Paket nicht wirklich von data.table abhängt, diese benötigt oder verwendet. Ich möchte nur in der Lage sein, data.table mit dem Paket zu verwenden.

Außerdem funktioniert alles andere mit data.table in der Funktion, nur nicht das:= Operator

So könnte eine weitere Frage lauten: Soll ich data.table zu den Depends jedes Pakets, das ich schreibe, hinzufügen, damit data.tables innerhalb der Funktionen dieses Pakets wie erwartet funktionieren? Das scheint nicht richtig zu sein ... wie kann man das richtig angehen?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage