Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R data.table不再通过引用更新_R_Data.table - Fatal编程技术网

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)