如何使用矩阵中的值更新 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)
在
data.frame
世界中,我会使用以下语法:DF[,2:ncol(DF)] = mat[,2:ncol(DF)] #Data frame approach
对
data.table
语法的类似处理会产生多个带有非常奇怪输出的警告。DT[,2:ncol(DF) := mat[,2:ncol(DF)], with=FALSE] #Data table approach
这显然是错误的 - 因为警告表明矩阵实际上是扁平的。警告信息:
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
最佳答案
您需要将 RHS 转换为 list
,一个简单的方法是使用 as.data.table
:
DT[, 2:ncol(DT) := as.data.table(mat[,2:ncol(DT)])]
with
在这里不是必需的,因为 LHS 被推断为自动表示列号。
关于r - data.table:用矩阵更新 data.table 中的多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31972989/