0

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

target_name <- "data_a"
data <- tar_read(target_name)

但是后来我得到了target_name找不到目标的错误。我知道这与 NSE 和 R 作为tar_read内部调用有关substitute,但我无法弄清楚如何掩盖它target_nametar_read工作。我已经尝试过Advanced R以及 rlangeval(parse())中提供的不同选项(例如 !!、{{ 和类似的)都无济于事。

知道如何实现这一目标吗?

4

1 回答 1

1

如果查看 的代码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_raw直接使用。手册tar_read_raw说:

tar_read()exceptname是一个字符串。

所以你应该能够做到:

data <- tar_read_raw(target_name)
于 2021-10-25T15:12:55.103 回答