r - data.table:用矩阵更新 data.table 中的多列

标签 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)

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/

相关文章:

r - 从数据框中获取一行作为R中的向量

r - 在 R 中使用 reshape 函数时出错

r - 如何使用现有 data.table 的列名构造一个空的 data.table?

r - 为什么要在 data.table 中使用二级索引 (`on` ),除非用于连接?

使用 XLConnect 读取包含缺失值的 .xls 文件

r - 将数据帧的一行转换为 R 中的简单向量

matrix - 在神经网络中实现偏差的正确方法

c++ - 使用 Eigen 库从旋转矩阵滚动俯仰和偏航

arrays - 在矩阵中查找唯一对

r - 在 data.table 中按组标记第一行