data.table不再通过引用更新

时间:2013-04-24 16:58:14

标签: 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)}]
}

和一些示例数据

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)并不会在我的框中通过引用更新dt,而是f(dt1)。是期望/与datatable.alloccol

有关

1 个答案:

答案 0 :(得分:4)

在这两种情况下,数据表的长度为2,真实长度为100:

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

然而,在dt colNames为300的情况下,2 + 300超过了真实长度,但在dt1 colNames的情况下是81,所以2 + 81确实不

您可以提前分配更大的真实长度,例如

alloc.col(dt, 1000)

或者您可以设置默认值,以便所有数据表都具有更大的默认值:

options(datatable.alloccol = 1000)

请参阅?alloc.col