2013-04-24 86 views
3

這裏是一個功能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)}] 
} 

和一些示例數據

dt = data.table(XLM=sample(1L:300L,5e4,T), w_qalim=sample(1L:5L,5e4,T)) 
dt1 = data.table(XLM=sample(1L:300L,1e2,T), w_qalim=sample(1L:5L,1e2,T)) 

執行f(dt)引用我的箱子不更新dtf(dt1)做。它是預期/某物datatable.alloccol

回答

4

在這兩種情況下,數據表的長度爲2,truelength做的是100:

> length(dt); truelength(dt) 
[1] 2 
[1] 100 
> length(dt1); truelength(dt1) 
[1] 2 
[1] 100 

然而,在dtcolNames的情況下是300這樣2+ 300超過真實長度,但在dt1,colNames的情況下爲81,所以2 + 81不是。

您可以提前分配更大的真實長度,例如,

alloc.col(dt, 1000) 

,或者您可以設置默認值,以便所有數據表有一個更大的默認:

options(datatable.alloccol = 1000) 

?alloc.col

+0

好了,所以我想我是確定想複製進行時我創造了太多的colums。感謝您指出?alloc.col – statquant 2013-04-24 19:24:23