data.table:使用矩阵更新data.table中的多个列

sri*_*amn 4 r matrix data.table

如何data.table使用矩阵中的值更新多个列.这是一个说明我面临的问题的MWE:

library(data.table)
DT = data.table(expand.grid(1:3,1:3,1:3))
DF = expand.grid(1:3,1:3,1:3)
mat = matrix(seq(0, 80), 27, 3)
Run Code Online (Sandbox Code Playgroud)

在这个data.frame世界里,我会使用这种语法:

DF[,2:ncol(DF)] = mat[,2:ncol(DF)] #Data frame approach
Run Code Online (Sandbox Code Playgroud)

类似的data.table语法产生了多个警告,输出非常奇怪.

DT[,2:ncol(DF) := mat[,2:ncol(DF)], with=FALSE] #Data table approach
Run Code Online (Sandbox Code Playgroud)

这显然是错误的 - 因为警告表明矩阵实际上是扁平的.警告信息:

1: In `[.data.table`(DT, , `:=`(2:ncol(DF), mat[, 2:ncol(DF)]), with = FALSE) :
  2 column matrix RHS of := will be treated as one vector
Run Code Online (Sandbox Code Playgroud)

Señ*_*r O 8

您需要将RHS转换为a list,并且一种简单的方法是使用as.data.table:

DT[, 2:ncol(DT) := as.data.table(mat[,2:ncol(DT)])]
Run Code Online (Sandbox Code Playgroud)

with 这里没有必要,因为LHS被推断为自动表示列数.