3

ここに関数があります

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

1 に答える 1

4

どちらの場合も、データ テーブルの長さは 2 で、真の長さは 100 です。

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

ただし、dt colNamesis 300 の場合は 2+300 が真の長さを超えますが、dt1 colNamesis 81 の場合は 2+81 は超えません。

より大きな truelength を前もって割り当てることができます。

alloc.col(dt, 1000)

または、すべてのデータ テーブルの既定値が大きくなるように既定値を設定できます。

options(datatable.alloccol = 1000)

を参照?alloc.colしてください。

于 2013-04-24T19:15:23.953 に答える