在R语言中,是否有一个内置函数可以迭代一个函数n次?

3
假设我有一个变量x和一个函数f。我想对x执行f,然后再对结果n次执行。
我已经为此编写了一个简单的函数:
iterate <- function(x, f, n) {

    assertthat::assert_that(n >= 0)

    if (n > 0) {

        for (i in 1:n) {

            x <- f(x)
        }
    }

    x
}

Which works as follows:

iterate(256, f = sqrt, n = 3)

这已经内置于R中了吗?
1个回答

5
你可以使用函数式编程方法,使用functional包中的ReduceCompose来实现。思路是创建所需的函数列表,并使用Compose将它们链接起来。然后你只需将该函数应用于x即可。
x = 256
n = 3
f = sqrt

library(functional)

Reduce(Compose, replicate(n, f))(x)
#[1] 2

或者使用magrittr中的freduce

library(magrittr)

freduce(x, replicate(n, f))
#[1] 2

我认为我的现有解决方案更易于阅读 - 知道其他选择也是好的。 - sdgfsdh
我发现Reduce非常明确 - 命令式编程与函数式编程的区别;) 重要的是两者都能工作! - Colonel Beauvel
但哪一个更快呢? :-) - Carl Witthoft

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接