R以编程方式读取目标

R read target programmatically

我有一组目标,比方说 data_adata_b、... 我想遍历所有数据集并加载数据。 这可以使用 tar_read(data_a)tar_read(data_a") 来实现。因为我想以编程方式加载目标,所以我想在某种 lapply:

中使用类似的东西
target_name <- "data_a"
data <- tar_read(target_name)

但随后我收到错误消息,指出未找到目标 target_name。 我知道这与 R 的 NSE 有关,因为 tar_read 内部调用 substitute,但我无法弄清楚如何屏蔽 target_name 以使 tar_read 工作。我尝试了 eval(parse())Advanced R 中提供的不同选项,以及 rlang(例如 !!、{{ 和类似的)都无济于事。

知道如何实现吗?

如果您查看 tar_read 的代码,您会发现它使用 NSE 将 name 参数转换为字符串,然后在结果上调用函数 tar_read_raw字符串:

tar_read
#> function (name, branches = NULL, meta = tar_meta(store = store), 
#      store = targets::tar_config_get("store")) 
#> {
#>     force(meta)
#>     name <- tar_deparse_language(substitute(name))
#>     tar_read_raw(name = name, branches = branches, meta = meta, 
#>         store = store)
#> }

不过,您也可以直接使用tar_read_rawtar_read_raw 的手册说:

Like tar_read() except name is a character string.

所以你应该能够做到:

data <- tar_read_raw(target_name)