对于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)
}