【问题标题】:How to make purrr invoke_map work with closures如何使 purrr invoke_map 与闭包一起使用
【发布时间】:2023-03-06 19:38:01
【问题描述】:

为了创建一个处理移动平均线的函数,我遇到了这个问题。使用 dplyr 和 purrr,我尝试生成一个闭包列表。

v <- 5
funs <- map(1:v, ~ . %>% lag(n = .x)  ) 

虽然funs[[1]](rnorm(100))funs[[2]](rnorm(100)) 工作,但我没有设法使这条线工作:

invoke_map(funs, rnorm(100))

为什么会这样?

【问题讨论】:

    标签: r dplyr purrr


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      • 1970-01-01
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多