使用 mapply 对向量列表执行操作:索引规范有问题

Using mapply to perform operations on lists of vectors: trouble with index specification

我有两个列表(A 和 B),每个列表包含 5 个长度为 3 的向量。我还有一个 3x3 矩阵 Z。

我想用B和Z对A的元素进行运算,输出到一个3x5的矩阵。我能够使用 for 循环成功完成此操作,如下所示

#Create two lists of vectors
A = list(c(1,2,1), c(2,1,2), c(3,2,2),c(1,2,5),c(1,4,2))
B = list(c(2,3,1), c(1,3,4), c(2,5,2), c(2,4,1),c(1,4,1))
#Create 3x3 matrix
Z = rbind(c(2,3,5),c(3,2,3), c(1,1,1))

#initialize empty 3x5 matrix
Y = matrix(NA,3,5)

for (i in 1:3)
{
  for (j in 1:5)
  {
    #Take the ith element of the jth vector from A, and divide it by
    #the dot product of the jth vector from B and the ith row of Z
    Y[i,j] = A[[j]][i] / sum(B[[j]]*Z[i,])
  }
}

这个returns(对于Y)

           [,1]       [,2]       [,3]       [,4]       [,5]
[1,] 0.05555556 0.06451613 0.10344828 0.04761905 0.05263158
[2,] 0.13333333 0.04761905 0.09090909 0.11764706 0.28571429
[3,] 0.16666667 0.25000000 0.22222222 0.71428571 0.33333333

我正在尝试弄清楚如何使用 mapply 来提高效率。

到目前为止我得到了这个:

mapply(function(x,y,z) x/sum(y*z), x=A,y=B,z = Z)

但这不能正常工作。我认为也许将任务拆分为两个单独的 mapply 可能会达到目的,也许我需要重新组织矩阵和列表,以便索引以某种方式匹配。我在 apply 函数族方面取得了一些成功,但我还不够流利,无法弄清楚如何最好地解决这个问题。如果有任何指导,我将不胜感激。

我决定把它分成两步,就像你想的那样。这是一种方法:

BZ <- lapply(B, FUN = function(y) 
    apply(Z, 1, FUN = function(x) sum(y*x)))

mapply(function(x,y) x / y, x = A, y = BZ)

           [,1]       [,2]       [,3]       [,4]       [,5]
[1,] 0.05555556 0.06451613 0.10344828 0.04761905 0.05263158
[2,] 0.13333333 0.04761905 0.09090909 0.11764706 0.28571429
[3,] 0.16666667 0.25000000 0.22222222 0.71428571 0.33333333