如何在函数中创建计划

How to create a plan in a function

我想使用一个函数来创建一个 drake 计划。见 MWE:

plan_func <- function(param) {
  drake::drake_plan(
    myparam = param
  )
}

我愿意

plan_func("a")

给予

# A tibble: 1 x 2
  target  command   
  <chr>   <expr_lst>
1 myparam "a"

但是,它给出了

> plan_func("a")
# A tibble: 1 x 2
  target  command   
  <chr>   <expr_lst>
1 myparam param     

感觉是NSE的问题。有人可以友好地提示如何正确执行此操作吗?

提前致谢!

drake_plan()支持tidy evaluation,所以可以在plan里写!!param

library(drake)
plan_func <- function(param) {
  drake::drake_plan(
    myparam = !!param
  )
}
plan_func("a")
#> # A tibble: 1 x 2
#>   target  command   
#>   <chr>   <expr_lst>
#> 1 myparam "a"

reprex package (v0.3.0)

于 2020 年 6 月 2 日创建

https://github.com/ropensci/drake/issues/1251 这样更棘手的情况可能需要您关闭 drake_plan()tidy_evaltransform 参数。

编辑

要将多个参数拼接成一个函数,请使用三连击 (!!!) 而不是连击 (!!):

library(drake)

plan_func <- function(param) {
  drake_plan(
    myparam = f(!!param)
  )
}

  plan_func(c("a", "b"))
#> # A tibble: 1 x 2
#>   target  command       
#>   <chr>   <expr>        
#> 1 myparam f(c("a", "b"))

plan_func <- function(param) {
  drake_plan(
    myparam = f(!!!param)
  )
}

plan_func(c("a", "b"))
#> # A tibble: 1 x 2
#>   target  command    
#>   <chr>   <expr>     
#> 1 myparam f("a", "b")

reprex package (v0.3.0)

于 2020 年 6 月 2 日创建