[英]dynamic branching: Define the order of targets into single plan
阅读 drake 包的文档,我发现没有其他方法可以在不使用“file_in”和“file_out”的情况下定义目标的顺序。
file_in() 标记目标所依赖的单个文件(和整个目录)。
file_out() 标记目标创建的单个文件(和整个目录)。
但是,不可能将两者与动态目标一起使用。
那么如何定义动态目标之间应该遵循的顺序呢? 我也尝试使用make(plan, targets = c("ftp_list", "download.dbc", "dbc_list", "generate_parquet"))
,但没有用
例如,在下面的代码中,我有四个目标。 我想要什么(订购):
知道如何在不使用 file_in 和 file_out 的情况下链接动态目标(在这种情况下不允许)? 谢谢!
代码仅作为示例:
URL <- "ftp://ftp.url"
LOCAL_PATH <- paste0(getwd())
plan <- drake_plan(
ftp_list = obtain_filenames_from_url(url_ = URL,
remove_extension_from_filename_ = FALSE,
full_names = TRUE)[0:10],
download.dbc = target(download_dbc(ftp_list,
local_path = paste0(LOCAL_PATH, "/")),
dynamic = map(ftp_list)),
dbc_list = target(list.files(LOCAL_PATH, full.names = TRUE,
pattern = "*.dbc")),
generate_parquet = target(convert_dbc(dbc_list, delete_dbc_after_conversion = TRUE),
dynamic = map(dbc_list))
)
计划图输出:
file_in()
和file_out()
仅在您实际需要处理文件、目录或 URL 时才需要。 drake
目标是 R 对象,目标顺序由命令中提及目标的方式决定。 drake
通过静态代码分析读取您的命令和函数以解析目标顺序。 在下面的计划中,目标a
、 b
和c
以任意顺序运行,但由于提及符号的方式, drake
以正确的顺序运行它们。
library(drake)
plan <- drake_plan(
c = head(b),
a = mtcars[, seq_len(3)],
b = tail(a)
)
plot(plan)
make(plan)
#> target a
#> target b
#> target c
readd(c) # Targets are R objects
#> mpg cyl disp
#> Porsche 914-2 26.0 4 120.3
#> Lotus Europa 30.4 4 95.1
#> Ford Pantera L 15.8 8 351.0
#> Ferrari Dino 19.7 6 145.0
#> Maserati Bora 15.0 8 301.0
#> Volvo 142E 21.4 4 121.0
由reprex 包(v0.3.0) 于 2020 年 2 月 7 日创建
以下是一些可以帮助您当前计划的事情。
ftp://ftp.url
上使用file_in()
来检测ftp_list
应该更新。get_dbc()
)来下载一些文件( ftp_list
一部分)并将它们读入内存。drake
会自动将这些数据帧存储在fst
文件中。有关的:
草图:
get_dbc_data_frame <- function(ftp_list_entry) {
# 1. Download the files from the ftp_list_entry.
# 2. Read them into memory.
# 3. Return a data frame.
}
plan <- drake_plan(
ftp_list = obtain_filenames_from_url(
url_ = file_in("ftp://ftp.url"),
remove_extension_from_filename_ = FALSE,
full_names = TRUE
)[seq(0, 10)],
dbc_data = target(
get_dbc_data_frame(ftp_list, local_path = paste0(getwd(), "/")),
format = "fst", # Tell drake to store the data frame as an fst file.
dynamic = map(ftp_list)
)
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.