【问题标题】:For loop in R that will iterate a simple function and store resultsR中的for循环将迭代一个简单的函数并存储结果
【发布时间】:2016-09-08 09:36:58
【问题描述】:

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

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 &lt;- iterator(f))。但是当我尝试myresults 时,它最终会变成NULL。如何将矩阵作为函数的输出传递?

【问题讨论】:

  • 为了将结果矩阵作为输出(您可以分配给变量),您需要在函数末尾使用 return(results)。

标签: r loops iteration


【解决方案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)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 2019-12-31
    • 2016-02-16
    • 2020-05-09
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多