R以编程方式读取目标
R read target programmatically
我有一组目标,比方说 data_a
、data_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_raw
。 tar_read_raw
的手册说:
Like tar_read()
except name
is a character string.
所以你应该能够做到:
data <- tar_read_raw(target_name)
我有一组目标,比方说 data_a
、data_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_raw
。 tar_read_raw
的手册说:
Like
tar_read()
exceptname
is a character string.
所以你应该能够做到:
data <- tar_read_raw(target_name)