为了创建一个处理移动平均线的函数,我碰到了这个问题。使用dplyr和purrr,我尝试生成一个闭包列表。
v <- 5
funs <- map(1:v, ~ . %>% lag(n = .x) )
它发生了,虽然funs[[1]](rnorm(100))
或funs[[2]](rnorm(100))
工作,我没有设法使这条线工作:
invoke_map(funs, rnorm(100))
为什么会这样?
invoke_map
不确定你希望它如何迭代。它是一个非常灵活的函数,有时会跨函数迭代,有时跨参数,有时跨越两者。为了明确表示你只希望它遍历函数,指定rnorm(x)
应该去哪个参数,但如果保留传统的函数结构而不是函数序列,这样做会更容易:
library(purrr)
set.seed(47)
funs <- map(1:5, ~partial(dplyr::lag, n = .x))
funs %>%
invoke_map(x = rnorm(10)) %>%
str(vec.len = 10)
#> List of 5
#> $ : num [1:10] NA 1.9947 0.7111 0.1854 -0.2818 0.1088 -1.0857 -0.9855 0.0151 -0.252
#> $ : num [1:10] NA NA 1.9947 0.7111 0.1854 -0.2818 0.1088 -1.0857 -0.9855 0.0151
#> $ : num [1:10] NA NA NA 1.995 0.711 0.185 -0.282 0.109 -1.086 -0.985
#> $ : num [1:10] NA NA NA NA 1.995 0.711 0.185 -0.282 0.109 -1.086
#> $ : num [1:10] NA NA NA NA NA 1.995 0.711 0.185 -0.282 0.109