#r #lazy-evaluation #evaluation
Вопрос:
Я хотел бы иметь возможность написать ниже в форме, которая использует интерполяцию строк.
r[[glue("fic_{data}")]] lt;- switch( data, "data" = fic::data, "targets" = fic::targets )
Я пробовал такие вещи, как
r[[glue("fic_{data}")]] lt;- eval(glue("fic::{data}")) r[[glue("fic_{data}")]] lt;- eval(sym(glue("fic::{data}"))) r[[glue("fic_{data}")]] lt;- eval(glue("fic::{!!data}"))
во многих сочетаниях и размещениях sym
и. !!
Можно ли это сделать и как, если да, то как?
Комментарии:
1. Можете ли вы использовать
data(dataname, packagename)
Ответ №1:
С eval
, нам parse
также может понадобиться
gt; eval(glue("collapse::wlddev")) collapse::wlddev
возвращает только glue
объект
gt; str(eval(parse(text = glue("collapse::wlddev")))) 'data.frame': 13176 obs. of 13 variables: $ country: chr "Afghanistan" "Afghanistan" "Afghanistan" "Afghanistan" ... ..- attr(*, "label")= chr "Country Name" $ iso3c : Factor w/ 216 levels "ABW","AFG","AGO",..: 2 2 2 2 2 2 2 2 2 2 ... ..- attr(*, "label")= chr "Country Code" $ date : Date, format: "1961-01-01" "1962-01-01" "1963-01-01" "1964-01-01" ... $ year : int 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 ... ...
Или используйте parse_expr
от rlang
eval(rlang::parse_expr(glue("collapse::wlddev")))
Другой вариант-передать строку в поле data
для загрузки данных
data(list = "wlddev", package = "collapse") head(wlddev)