假设我有一个变量x和一个函数f.我想执行f上x的结果,然后再次,n倍.
我为此构建了一个简单的函数:
iterate <- function(x, f, n) {
assertthat::assert_that(n >= 0)
if (n > 0) {
for (i in 1:n) {
x <- f(x)
}
}
x
}
Run Code Online (Sandbox Code Playgroud)
其工作原理如下:
iterate(256, f = sqrt, n = 3)
Run Code Online (Sandbox Code Playgroud)
这已经内置到R?
你可以用函数式编程的方式做到这一点,与Reduce和Compose从functional包.我们的想法是创建您想要的功能列表并使用它们进行链接Compose.您只需将此功能应用于x之后.
x = 256
n = 3
f = sqrt
library(functional)
Reduce(Compose, replicate(n, f))(x)
#[1] 2
Run Code Online (Sandbox Code Playgroud)
或者使用freduce从magrittr:
library(magrittr)
freduce(x, replicate(n, f))
#[1] 2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
72 次 |
| 最近记录: |