给一个字符串在drake中定义一个文件依赖
Give a character string to define a file dependency in drake
我正在学习 drake 定义我的分析工作流程,但我无法将数据文件作为依赖项。
我在 drake_plan()
中使用了函数 file_in()
,但它只有在我直接提供文件路径时才有效。如果我用 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 文件的依赖关系?
在 Github 上的开发人员 answer 之后,file_in()
中的代码未被评估,因此无法在其中使用 file.path
。
每时每刻,如果您在 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 创建
我正在学习 drake 定义我的分析工作流程,但我无法将数据文件作为依赖项。
我在 drake_plan()
中使用了函数 file_in()
,但它只有在我直接提供文件路径时才有效。如果我用 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 文件的依赖关系?
在 Github 上的开发人员 answer 之后,file_in()
中的代码未被评估,因此无法在其中使用 file.path
。
每时每刻,如果您在 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 创建