gpt4 book ai didi

r - data.table 不再通过引用更新

转载 作者:行者123 更新时间:2023-12-01 07:58:56 25 4
gpt4 key购买 nike

这是一个函数

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

有关

最佳答案

两种情况下数据表的长度都是2,truelength都是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,

关于r - data.table 不再通过引用更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16197898/

25 4 0