I'd like to use a function to create a drake plan. See MWE:
plan_func <- function(param) {
drake::drake_plan(
myparam = param
)
}
I would like
plan_func("a")
to give
# A tibble: 1 x 2
target command
<chr> <expr_lst>
1 myparam "a"
but instead, it gives
> plan_func("a")
# A tibble: 1 x 2
target command
<chr> <expr_lst>
1 myparam param
It feels like this is an NSE problem. Can someone give a friendly hint how to get this right?
My appreciation in advance!
drake_plan()
supports tidy evaluation, so you can write !!param
in the plan.
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"
Created on 2020-06-02 by the reprex package (v0.3.0)
Trickier situations like https://github.com/ropensci/drake/issues/1251 might require you to turn off the tidy_eval
and transform
arguments of drake_plan()
.
To splice multiple arguments into a function, use triple-bang (!!!) instead of 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")
Created on 2020-06-02 by the reprex package (v0.3.0)