Я использую 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.
Я полагаю, что Дрейк находит в качестве цели только литеральную строку, а не результат 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))
Есть идеи, как это исправить?