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

对于R中的循环,它将迭代一个简单函数并存储结果,r,loops,iteration,R,Loops,Iteration,我有一个简单的函数sqrt(2*x),我想使用许多不同的种子迭代n次。这是我经常要做的事情,所以我想创建一个通用函数。到目前为止,我的代码是: iterator <- function(FUNC, seeds = -10:10, n = 100) { results <- matrix(nrow = n, ncol = length(seeds)) results[1, ] <- seeds for (i i

我有一个简单的函数
sqrt(2*x)
,我想使用许多不同的
种子
迭代
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
}
然后调用
iterator
(使用不同的参数以避免
NaN
错误并限制输出):

这很好,但我有两个问题:

  • 有没有更简单/更优雅的方法来实现这一点?我有一种感觉,对于这样一个简单的函数,这将正常工作,但对于更复杂的东西,这可能会很慢

  • 最后,我只需打印
    结果
    ,但我希望能够将输出分配给变量(例如
    myresults),您可以使用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)
    }
    

    迭代器为了将结果矩阵作为输出(可以分配给变量),需要在函数末尾使用return(results)。
    
    iterator(f, seeds = seq(0, 20, by = .5), n = 20)
    
    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)
    }