对于R中的循环,它将迭代一个简单的函数并存储结果

时间:2016-09-08 09:36:59

标签: r loops iteration

我有一个简单的函数sqrt(2 * x),我希望使用多个不同的n来迭代seeds次。这是我经常要做的事情所以我想创建一个通用函数我到目前为止的代码是:

iterator <- function(FUNC, seeds = -10:10, n = 100) {
    results <- matrix(nrow = n,
                      ncol = length(seeds))
    results[1, ] <- seeds

    for (i in 2:n) {
        results[i, ] <- FUNC(results[i - 1, ])
    }
    results
}

然后我创建了我的函数f

f <- function(x) sqrt(2 * x)

然后调用iterator(使用不同的args来避免NaN错误并限制输出:

iterator(f, seeds = seq(0, 20, by = .5), n = 20)

这没关系,但我有两个问题:

  1. 是否有更简单/更优雅的方式来实现这一目标?我觉得这对于这么简单的功能会很好用,但是对于更复杂的东西可能会很慢。
  2. 最后我只打印results,但我希望能够将输出分配给变量(例如myresults <- iterator(f))。但是,当我尝试将myresults最终作为NULL时。如何将矩阵作为函数的输出传递?

1 个答案:

答案 0 :(得分:1)

您可以使用sapply而不是循环:

iterator <- function(n, seeds) {
  res      <- matrix(NA, nrow=n, ncol=length(seeds))
  res[1, ] <- seeds
  sapply(2:n, FUN=function(x) { res[x,] <<- sqrt(2 * res[x-1,]) })
  return(res)
}