R data.table不再通过引用更新
这里有一个函数R data.table不再通过引用更新,r,data.table,R,Data.table,这里有一个函数 f <- function(orderData){ colNames <- paste0("lim_",sort(unique(orderData[,XLM]))) orderData[, (colNames):={lim_=factor(XLM);lapply(data.table(model.matrix(~ lim_:w_qalim + 0)), cumsum)}] } 执行f(dt)不会通过我的框中的引用更新dt,而是f(dt
f <- function(orderData){
colNames <- paste0("lim_",sort(unique(orderData[,XLM])))
orderData[, (colNames):={lim_=factor(XLM);lapply(data.table(model.matrix(~ lim_:w_qalim + 0)), cumsum)}]
}
执行
f(dt)
不会通过我的框中的引用更新dt
,而是f(dt1)
do。这是否与数据表有关?alloccol在这两种情况下,数据表的长度都是2,truelength是100:
> length(dt); truelength(dt)
[1] 2
[1] 100
> length(dt1); truelength(dt1)
[1] 2
[1] 100
但是,在dt
colNames
为300的情况下,因此2+300超过了truelength,但在dt1
colNames
为81的情况下,因此2+81不超过truelength
您可以提前分配更大的truelength,例如
alloc.col(dt, 1000)
也可以设置默认值,以便所有数据表都具有更大的默认值:
options(datatable.alloccol = 1000)
请参见
?alloc.col
,好的,所以我想当我创建了太多的列时,我可以认为复制完成了。谢谢你的指点
options(datatable.alloccol = 1000)