gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:47:33 27 4
gpt4 key购买 nike

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

27 4 0