我真的很喜欢code_to_plan
在构建德雷克计划时使用该功能。我也真的target(..., format = "fst")
用于大文件。但是,我正在努力将这两个工作流程结合起来。例如,如果我有这个_drake.R
文件:
# Data --------------------------------------------------------------------
data_plan = code_to_plan("code/01-data/data.R")
join_plan = code_to_plan("code/01-data/merging.R")
# Cleaning ----------------------------------------------------------------
cleaning_plan = code_to_plan("code/02-cleaning/remove_na.R")
# Model -------------------------------------------------------------------
model_plan = code_to_plan("code/03-model/model.R")
# Combine Plans
dplan = bind_plans(
data_plan,
join_plan,
cleaning_plan,
model_plan
)
config <- drake_config(dplan)
这在调用时工作正常r_make(r_args = list(show = TRUE))
据我了解,它target
只能在drake_plan
. 如果我尝试这样的事情:
dplan2 <- drake_plan(full_plan = target(dplan, format = "fst"))
config <- drake_config(dplan2)
我收到这样的r_make
错误:
fst::write_fst(x = value$value, path = tmp) 中的目标 full_plan 错误:在列中发现未知类型。另外:警告消息:您为目标 full_plan 选择了 fst 格式,因此 drake 会将其从类 c("drake_plan", "tbl_df", "tbl", "data.frame") 转换为纯数据帧。
错误:--> 正在处理 18712
查看
.Last.error.trace
堆栈跟踪。
所以最终我的问题是,当您使用时,在哪里为目标指定特殊数据格式code_to_plan
?
编辑
使用@landau 有用的建议,我定义了这个函数:
add_target_format <- function(plan) {
# Get a list of named commands.
commands <- plan$command
names(commands) <- plan$target
# Turn it into a good plan.
do.call(drake_plan, commands)
}
这样就可以了:
dplan = bind_plans(
data_plan,
join_plan,
cleaning_plan,
model_plan
) %>%
add_target_format()