【问题标题】:How can I use the apply-Family, when the second function argument is changing along the same dimension as the first argument?当第二个函数参数沿与第一个参数相同的维度变化时,如何使用 apply-Family?
【发布时间】:2018-06-18 07:40:52
【问题描述】:

考虑一个函数 f(x,y),其中 x 是一个向量 (1xn),数据是一个矩阵 (nxm),返回一个数值标量。

现在,我有一个矩阵 A 和一个三维数组 B,我想在 A 和 B 的第一个维度上应用 f。

具体来说,我希望 f 在 x=A[1,] y=B[1,,] 处进行评估,然后是 x=A[2,] y=B[2,,] 等等,返回数值标量向量。

有没有办法使用“apply”系列的任何函数来解决这个问题,从而避免循环?

【问题讨论】:

  • sapply(1:nrow(A), function(i) f(A[i,], B[i,,])) 它是循环隐藏。我想在这种情况下最好使用显式循环。
  • @jogo 非常感谢您的快速回复。完美运行。
  • 看看mapply。它旨在遍历... 中的每个参数
  • 我会说使用mapply 他必须转换他的数组,例如分别到向量和矩阵的列表。 AFAIK 基础 R 不提供优雅的“应用”变体来直接处理多个数组(没有索引变量,如第一条评论所示)
  • @user3293236 在发布问题之前我查看了 mapply ,因为文档专门提到了“元素”,所以我得出了与 RolandASc 相同的结论。关于如何用 mapply 解决这个问题的任何建议?

标签: r apply


【解决方案1】:

你可以这样做:

sapply(1:nrow(A), function(i) f(A[i,], B[i,,]))

这是 循环隐藏,因为循环是在 sapply() 内部完成的。我想在这种情况下最好使用显式循环:

result <- numeric(nrow(A))
for (i in 1:nrow(A)) result[i] <- f(A[i,], B[i,,]

【讨论】:

    猜你喜欢
    • 2017-12-12
    • 2019-07-15
    • 1970-01-01
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    相关资源
    最近更新 更多