R drake文件输出名称与变量
R drake file out name with variable
我正在使用 drake
创建多个输出文件,我想在其中通过变量指定路径。像
outpath <- "data"
outfile <- file.path(outpath, "mydata.csv")
write.csv(df, outfile)
但是 file_out
似乎不适用于除文字字符以外的给定参数。
举个小代码例子:
代码设置
library(drake)
outpath <- "data"
# for reproducibility only
if (!dir.exists(outpath)) dir.create(outpath)
make_data <- function() data.frame(x = 1:10, y = rnorm(10))
工作代码
直接指定文件:
p0 <- drake_plan(
df = make_data(),
write.csv(df, file_out("data/mydata0.csv"))
)
make(p0)
#> target file "data/mydata0.csv"
失败代码
使用file.path
构建输出文件
p1 <- drake_plan(
df = make_data(),
write.csv(df, file_out(file.path(outpath, "mydata1.csv")))
)
make(p1)
#> target file "mydata1.csv"
#> Error: The file does not exist: mydata1.csv
#> In addition: Warning message:
#> File "mydata1.csv" was built or processed,
#> but the file itself does not exist.
我猜 drake 只找到文字字符串作为目标,而不是 file.path(...)
的结果,例如,这也失败了
p2 <- drake_plan(
df = make_data(),
outfile = file.path(outpath, "mydata1.csv"),
write.csv(df, file_out(outfile))
)
#> Error: found an empty file_out() in command: write.csv(df, file_out(outfile))
知道如何解决这个问题吗?
抱歉,我来得太晚了。使用 drake-r-package
标签可以更轻松地找到问题。
感谢@Alexis 向相关主题提供 link。通配符在这里真的很有用。
您的所有目标、输入文件和输出文件都需要提前明确命名。这样 drake
就可以在不评估计划中的任何代码的情况下找出所有依赖关系。由于 drake
负责确定何时构建哪些目标,因此我可能不会在以后的开发中放松此要求。
就其价值而言,整洁的评估也可能有所帮助。
library(drake) # version 5.3.0
pkgconfig::set_config("drake::strings_in_dots" = "literals")
file <- file.path("dir", "mydata1.csv")
drake_plan(
df = make_data(),
output = write.csv(df, file_out(!!file))
)
#> # A tibble: 2 x 2
#> target command
#> * <chr> <chr>
#> 1 df make_data()
#> 2 output "write.csv(df, file_out(\"dir/mydata1.csv\"))"
编辑:元编程
我最近加了一个lengthy section of the manual on metaprogramming. If you want more flexible and automated ways to generate workflow plan data frames, you may have to abandon the drake_plan()
function and do more involved tidy evaluation. The discussion on the issue tracker也有关系
我正在使用 drake
创建多个输出文件,我想在其中通过变量指定路径。像
outpath <- "data"
outfile <- file.path(outpath, "mydata.csv")
write.csv(df, outfile)
但是 file_out
似乎不适用于除文字字符以外的给定参数。
举个小代码例子:
代码设置
library(drake)
outpath <- "data"
# for reproducibility only
if (!dir.exists(outpath)) dir.create(outpath)
make_data <- function() data.frame(x = 1:10, y = rnorm(10))
工作代码
直接指定文件:
p0 <- drake_plan(
df = make_data(),
write.csv(df, file_out("data/mydata0.csv"))
)
make(p0)
#> target file "data/mydata0.csv"
失败代码
使用file.path
构建输出文件
p1 <- drake_plan(
df = make_data(),
write.csv(df, file_out(file.path(outpath, "mydata1.csv")))
)
make(p1)
#> target file "mydata1.csv"
#> Error: The file does not exist: mydata1.csv
#> In addition: Warning message:
#> File "mydata1.csv" was built or processed,
#> but the file itself does not exist.
我猜 drake 只找到文字字符串作为目标,而不是 file.path(...)
的结果,例如,这也失败了
p2 <- drake_plan(
df = make_data(),
outfile = file.path(outpath, "mydata1.csv"),
write.csv(df, file_out(outfile))
)
#> Error: found an empty file_out() in command: write.csv(df, file_out(outfile))
知道如何解决这个问题吗?
抱歉,我来得太晚了。使用 drake-r-package
标签可以更轻松地找到问题。
感谢@Alexis 向相关主题提供 link。通配符在这里真的很有用。
您的所有目标、输入文件和输出文件都需要提前明确命名。这样 drake
就可以在不评估计划中的任何代码的情况下找出所有依赖关系。由于 drake
负责确定何时构建哪些目标,因此我可能不会在以后的开发中放松此要求。
就其价值而言,整洁的评估也可能有所帮助。
library(drake) # version 5.3.0
pkgconfig::set_config("drake::strings_in_dots" = "literals")
file <- file.path("dir", "mydata1.csv")
drake_plan(
df = make_data(),
output = write.csv(df, file_out(!!file))
)
#> # A tibble: 2 x 2
#> target command
#> * <chr> <chr>
#> 1 df make_data()
#> 2 output "write.csv(df, file_out(\"dir/mydata1.csv\"))"
编辑:元编程
我最近加了一个lengthy section of the manual on metaprogramming. If you want more flexible and automated ways to generate workflow plan data frames, you may have to abandon the drake_plan()
function and do more involved tidy evaluation. The discussion on the issue tracker也有关系