我有一个简单的函数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)
这没关系,但我有两个问题:
results
,但我希望能够将输出分配给变量(例如myresults <- iterator(f)
)。但是,当我尝试将myresults
最终作为NULL
时。如何将矩阵作为函数的输出传递?答案 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)
}