【发布时间】:2017-07-20 17:02:01
【问题描述】:
我知道在 R 中,如果我有一个矩阵列表,我可以使用 Reduce 函数对所有矩阵应用运算。例如:
l <- list(matrix(rnorm(16), 4, 4), matrix(rnorm(16), 4, 4))
Reduce(`*`, l)
但是如果我想在多个列表中应用这个操作呢?我可以使用for 循环进行暴力破解,但我觉得应该有更好的方法。我可以用mapply做两个列表
l2 <- l
mapply(`*`, l, l2, SIMPLIFY = FALSE)
但如果我有超过这两个,我不知道如何解决。
以下想法都会导致错误:
l3 <- l2
mapply(`*`, l, l2, l3, SIMPLIFY = FALSE)
Error in .Primitive("*")(dots[[1L]][[1L]], dots[[2L]][[1L]], dots[[3L]][[1L]]) :
operator needs one or two arguments
Reduce(`*`, list(l, l2, l3))
Error in f(init, x[[i]]) : non-numeric argument to binary operator
所需的输出是一个长度为 2 的列表,其中包含每个列表中每个矩阵的元素乘积。蛮力循环如下所示:
out <- vector("list", length = 2)
for(i in 1:2){
out[[i]] <- l[[i]] * l2[[i]] * l3[[i]]
}
【问题讨论】: