0

apply我对 R (及其所有变体)有疑问。有没有办法在工作时更新函数的参数apply

例如,我有一个NextSol(Prev_Sol)从 生成新解决方案的函数,Prev_Sol以某种方式将其与原始解决方案进行比较,然后根据比较结果返回原始解决方案或新解决方案。我需要保存所有返回的解决方案。目前,我正在这样做:

for( i in 2:N ) {
  Results[[i]] <- NextSol(Results[[i-1]])
}

但也许有一种(更快的)方法可以使用apply?我也看到这Reduce可能会有所帮助,但我不知道如何使用它。任何帮助都感激不尽!

4

1 回答 1

4

正如 Thomas 所说,当一次迭代依赖于前一次迭代时,for 循环是标准的循环方式。(只需确保您正确处理N = 1代码中的情况。)

另一种方法是使用该Reduce功能。此示例改编自?Reduce帮助页面上的示例。

NextSol <- function(x) x + 1 #Or whatever you want

Funcall <- function(f, ...) f(...)
Reduce(Funcall, rep.int(list(NextSol), 5), 0, right = TRUE)
## [1] 5

这不太可能更快,并且可以说更难阅读,因此您可能会决定坚持使用 for 循环。


Iterate好吧,我想我们可以通过将其包装在一个函数中来使其更易于阅读。

Iterate <- function(f, init, n)
{
  Reduce(
    function(f, ...) f(...), 
    rep.int(list(f), n), 
    init, 
    right = TRUE
  )
}

Iterate(NextSol, 0, 5) #same as before
于 2013-10-22T08:41:21.623 回答