【发布时间】:2020-01-12 18:01:31
【问题描述】:
我有一个 data.table,其中包含一些数字列和另一列,其中每个条目都是一个矩阵。这是一个例子:
dt = data.table(a = c(1,2,3), b = c(-1,4,2))
dt$c = vector("list",3)
for (ind in 1:3){dt$c[[ind]] = round(matrix(10*runif(8), nrow = 4))}
对于每一行,我想将 a 和 b 列形成的数字向量与 c 中相应的 4 x 2 矩阵相乘,并将得到的 4 个数字存储到 V1、V2、V3 和 V4 列中。例如,对于第一行,我将采用 4 x 2 矩阵 dt$c[[1]],将其与 2 x 1 向量 rbind(dt$a[1],dt$b[1]) 相乘,并将得到的 4 个数字分配到 4 个新列的第一行命名为 V1、V2、V3 和 V4。
我正在寻找一种本机 data.table 方法来执行此操作。我目前正在遍历所有行,这对于我的实际问题大小来说太慢了。尝试了各种 data.table 语法,但我怀疑我在 c 列内部被视为列表的方式中遗漏了一些基本的东西,因此我无法让矩阵乘法工作。
对此的任何帮助将不胜感激。
【问题讨论】:
-
rbind时的行数与'c'的行数不匹配。不清楚这里的尺寸。因为如果你相乘,那么输出是 4 x 2 行 Xcolumn 矩阵,即
c(dt$a[1],dt$b[1]) * dt$c[[1]] -
@akrun - C 的每个条目都是一个 4x2 矩阵,我用 a 和 b 制作了一个 2x1 向量。然后我做一个矩阵乘法 (dt$C[[1]] %*% rbind(dt$a[1],dt$b[1])
标签: r data.table