与Frank的用法类似freduce,您可以使用Reduce:
step1 <- function(a) a^2
step2 <- function(a) sum(a)
step3 <- function(a) sqrt(a)
steps <- list(step1, step2, step3)
Reduce(function(a,f) f(a), steps, 1:3)
# [1] 3.741657
step3(step2(step1(1:3)))
# [1] 3.741657
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式看到它的“作用”:
Reduce(function(a,f) f(a), steps, 1:3, accumulate=TRUE)
# [[1]]
# [1] 1 2 3
# [[2]]
# [1] 1 4 9
# [[3]]
# [1] 14
# [[4]]
# [1] 3.741657
Run Code Online (Sandbox Code Playgroud)
看一眼purrr::compose。如果您的函数存储在列表中,请使用purrr::invoke将该列表传递给compose:
fun_vec <- c( exp, log10, sqrt )
f <- purrr::invoke( purrr::compose, fun_vec )
f(4) # 1.35125
exp( log10( sqrt(4) ) ) # 1.35125
Run Code Online (Sandbox Code Playgroud)