给出一个字符串来定义drake中的文件依赖项

时间:2018-03-29 12:28:44

标签: r drake-r-package

我正在学习drake来定义我的分析工作流程,但我无法将数据文件作为依赖项。

我在file_in()中使用函数drake_plan()但它只有在我直接给出文件路径时才有效。如果我使用file.path()函数或存储该文件路径的变量给它,它就不起作用。

示例:

# preparation
library(drake)

path.data <- "data"
dir.create(path.data)
write.csv(iris, file.path(path.data, "iris.csv"))

工作计划:

# working plan
working_plan <-
  drake_plan(iris_data = read.csv(file_in("data/iris.csv")),
             strings_in_dots = "literals")
working_config <- make(working_plan)
vis_drake_graph(working_config)

此计划正常,文件data/iris.csv被视为依赖

Working plan

不工作计划:

# not working
notworking_plan <-
  drake_plan(iris_data = read.csv(file_in(file.path(path.data, "iris.csv"))),
             strings_in_dots = "literals")
notworking_config <- make(notworking_plan)
vis_drake_graph(notworking_config)

此处尝试阅读文件iris.csv而不是data/iris.csv

工作但依赖性问题:

# working but "data/iris.csv" is not considered as a dependency
file.name <- file.path(path.data, "iris.csv")
notworking_plan <-
  drake_plan(iris_data = read.csv(file_in(file.name)),
             strings_in_dots = "literals")
notworking_config <- make(notworking_plan)
vis_drake_graph(notworking_config)

这最后一个工作正常,但该文件不被视为依赖项,因此如果更改此文件,drake不会重新运行该计划。

Not working drake plan

那么,有没有办法从变量中告诉drake文件依赖?

2 个答案:

答案 0 :(得分:2)

每次tidyeval,如果在!!前面添加file.path(),它将被评估并且不被引用。

此外,在新版的Drake中,不推荐使用strings_in_dots = "literals"参数。

library(drake)
path.data <- "data"
dir.create(path.data)
write.csv(iris, file.path(path.data, "iris.csv"))

# now working
notworking_plan <-
  drake_plan(iris_data = read.csv(file_in(!!file.path(path.data, "iris.csv"))))
notworking_plan
#> # A tibble: 1 x 2
#>   target    command                           
#>   <chr>     <expr>                            
#> 1 iris_data read.csv(file_in("data/iris.csv"))

reprex package(v0.2.1)于2019-05-08创建

答案 1 :(得分:1)

在Github上的开发人员answer之后,img { width: 100%; height: 100%; object-fit: contain; } 中的代码未经过评估,因此无法在其中使用file_in()