0

我想使用一个函数来创建一个德雷克计划。见 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 问题。有人可以给出一个友好的提示如何做到这一点吗?

提前表示感谢!

4

1 回答 1

1

drake_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 包于 2020-06-02 创建(v0.3.0)

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

编辑

要将多个参数拼接到一个函数中,请使用三重键 (!!!) 而不是 bang-bang (!!):

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 包于 2020-06-02 创建(v0.3.0)

于 2020-06-02T12:17:30.133 回答