r - 将矩阵分配给 data.table 的子集

标签 r data.table

我想将矩阵分配给 data.table 的多列子集但矩阵最终被视为列向量。例如,

dt1 <- data.table(a1=rnorm(5), a2=rnorm(5), a3=rnorm(5))
m1 <- matrix(rnorm(10), ncol=2)
dt1[,c("a1","a2")] <- m1

Warning messages:
1: In `[<-.data.table`(`*tmp*`, , c("a1", "a2"), value = c(-0.308851784175091,  :
  2 column matrix RHS of := will be treated as one vector
2: In `[<-.data.table`(`*tmp*`, , c("a1", "a2"), value = c(-0.308851784175091,  :
  Supplied 10 items to be assigned to 5 items of column 'a1' (5 unused)
3: In `[<-.data.table`(`*tmp*`, , c("a1", "a2"), value = c(-0.308851784175091,  :
  2 column matrix RHS of := will be treated as one vector
4: In `[<-.data.table`(`*tmp*`, , c("a1", "a2"), value = c(-0.308851784175091,  :
  Supplied 10 items to be assigned to 5 items of column 'a2' (5 unused)

问题可以先转换m1解决成为另一个data.table对象,但我很好奇这个错误的原因是什么。如果 dt1,上述语法将起作用是 data.frame ;不使用它的架构原理是什么 data.table ?

最佳答案

dt1[,c("a1","a2")] <- as.data.table(m1)

给出了一个简单的解决方案,但确实复制了一份。

@Simon O'Hanlon 在 data.table 中提供了解决方案道路:
dt1[ , `:=`( a1 = m1[,1] , a2 = m1[,2] ) ]

在我看来更好 data.table解决方案由@Frank 提供:
dt1[,c("a1","a2") := as.data.table(m1)]

关于r - 将矩阵分配给 data.table 的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19918946/

相关文章:

r - 使加载的 data.table 可通过函数修改

r - 如何避免igraph中的双箭头

r - 如何删除fill.contour内部网格?

在 SparkR 中运行关联 : no method for coercing this S4 class to a vector

RCPP错误: undefined symbol: _ZTIN4Rcpp7RObjectE on package install

R - 如何基于多个因素在不同的 data.table 列上运行平均值和最大值并返回原始列名

r - 将 data.table 列分配给 R 中的变量

r - 将 data.table 中的列表分配/提取值到列

r - 从坐标中提取地址分量

r - 在 R 数据框中按组应用计算