我最近在R中处理了相当严重的环境,并且我发现data.table
在封闭在环境中时不会表现得很可靠(传递给函数等...)。我通常会收到错误:
:=
(d,4)中的错误:检查is.data.table(DT)== TRUE。 否则,:=和:=
(...)被定义为在j中使用,只有一次和在 特殊方式。请参阅帮助(":=")。
令人惊讶的是,这种情况发生在某些计算机上而不是其他计算机上,尽管它们具有非常相似的设置(ubuntu,相同版本的R,相同版本的data.table,...)
以下是在我有权访问的任何计算机上获取此错误的最小示例。任何人都可以解释为什么在这种极小的情况下会发生这样的错误:
library("data.table")
dat <- data.frame(c=c(1,2),b=c(3,4))
datDT <- data.table(dat)
datDT[,d:=4]
my.env <- new.env()
assign("datDT",my.env)
my.env$datDT[,d:=4]
当然猜测在某些功能中只有前四行失败的更具体问题,但只欢迎在某些电脑上使用!
答案 0 :(得分:2)
正如弗兰克指出的那样,问题在于assign
函数的使用不正确。下面的代码将解决您的情况。
library("data.table")
dat <- data.frame(c=c(1,2),b=c(3,4))
datDT <- data.table(dat)
datDT[,d:=4]
my.env <- new.env()
assign("datDT", datDT, envir = my.env)
my.env$datDT[,d:=4]
my.env$datDT[]
# c b d
#1: 1 3 4
#2: 2 4 4