我想将矩阵分配给 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/