R читать цель программно

У меня есть набор целей, скажем так data_a, data_b, ... Я хочу перебрать все наборы данных и загрузить данные. Этого можно добиться с помощью tar_read(data_a) или tar_read(data_a"). Поскольку я хочу загрузить цели программно, я хотел бы использовать что-то вроде этого в каком-то стиле:

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

Но затем я получаю сообщение об ошибке, что цель не найдена. Я знаю, что это связано с NSE с R, поскольку внутренние вызовы substitute, но я не мог понять, как замаскировать target_name сделать tar_readРабота. я пытался eval(parse())и различные варианты, представленные в Advanced R , а также rlang (например, !!, {{и т.п.) безрезультатно.

Есть идеи, как этого добиться?

1 ответ

Решение

Если вы посмотрите на код для tar_read, вы видите, что он использует NSE для преобразования параметра в строку символов, а затем вызывает функцию для полученной строки:

      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() Кроме name это символьная строка.

Итак, вы должны просто уметь:

      data <- tar_read_raw(target_name)
Другие вопросы по тегам