【问题标题】:R: Repeatedly apply function to corresponding elements of matrices, and collect the resultR:对矩阵的对应元素重复应用函数,并收集结果
【发布时间】:2019-01-30 19:42:04
【问题描述】:

我想对一些矩阵(大小相同)的对应元素应用一些函数,并返回每个应用程序的结果,以便将其添加到某个累加器中。最直观的方法是使用循环,但我正在处理大型数据集,循环耗时太长。

我知道函数的应用类,但我不太确定如何使用它们来累积每次迭代的结果。

这是我正在尝试做的一个小例子。

mat <- matrix(c(0, 1, 2, 3, 2, 9, 5, 1, 1, 1, 0, 0, 5, 5, 2, 0), 4, 4)
mat2 <- matrix(c(1, 1, 3, 1, 6, 2, 9, 2, 0, 1, 3, 2, 0, 1, 2, 1), 4, 4)
mat3 <- matrix(c(0, 4, 6, 1, 0, 4, 3, 8, 9, 1, 3, 0, 9, 9, 8, 8), 4, 4)

some_function <- function(num1, num2, num3) {
  return(num1 * num2 + num3)    
}

accum <- 0.1
for (i in 1:nrow(mat)) {
  for (j in 1:ncol(mat)) {
    accum <- accum + log(1 + some_function(mat[i,j], mat2[i,j], mat3[i,j]+10))
  }
}

这给出了正确的答案,但我想这样做没有循环。另请注意, some_function 只是我为了举例而提出的任意函数。我应用于数据的函数更复杂。

【问题讨论】:

    标签: r loops matrix apply


    【解决方案1】:

    这个不需要申请,运行函数即可。

    accum <- 0.1+sum(log(1+(some_function)(mat,mat2,mat3+10)))
    

    更快更干净。

    【讨论】:

    • 非常感谢!这将我的运行时间从 1.5 小时缩短到了 2 分钟。没想到循环这么慢。
    • 循环不一定比 apply 慢或差(但是是的,大多数时候它们是),您只需要了解何时以及如何使用它们。我前段时间阅读了关于循环的精彩讨论:r-project.org/doc/Rnews/Rnews_2008-1.pdf 转到第 48 页
    • 感谢您的链接。
    猜你喜欢
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-04
    • 2011-11-15
    • 2022-08-04
    相关资源
    最近更新 更多