I have a set of targets, lets say data_a, data_b, ...
I want to iterate over all datasets and load the data.
This can be achieved using tar_read(data_a) or tar_read(data_a"). As I want to load the targets programmatically, I would like to use something like this in some kind of lapply:
target_name <- "data_a"
data <- tar_read(target_name)
But then I get the error that the target target_name was not found.
I know this is related to NSE with R as tar_read internally calls substitute, but I wasn't able to figure out how to mask the target_name to make tar_read work. I have tried eval(parse()) and the different options presented in Advanced R, as well as rlang (such as !!, {{ and similar) to no avail.
Any idea how to achieve this?
If you look at the code for tar_read, you see that it uses NSE to convert the name parameter into a character string, then calls the function tar_read_raw on the resulting string:
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)
#> }
However, you can also use tar_read_raw directly. The manual for tar_read_raw says:
Like
tar_read()exceptnameis a character string.
So you should just be able to do:
data <- tar_read_raw(target_name)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With