【问题标题】:Load data from package dynamically in R在 R 中动态加载包中的数据
【发布时间】:2021-12-31 01:14:48
【问题描述】:

我希望能够以使用字符串插值的形式编写以下内容。

r[[glue("fic_{data}")]] <- switch(
        data,
        "data" = fic::data,
        "targets" = fic::targets
)

我尝试过类似的东西

r[[glue("fic_{data}")]] <- eval(glue("fic::{data}"))
r[[glue("fic_{data}")]] <- eval(sym(glue("fic::{data}")))
r[[glue("fic_{data}")]] <- eval(glue("fic::{!!data}"))

sym!! 的许多组合和位置中。

有可能吗?如果可以,该怎么做?

【问题讨论】:

  • 你能用data(dataname, packagename)

标签: r lazy-evaluation evaluation


【解决方案1】:

使用eval,我们可能还需要parse

> eval(glue("collapse::wlddev"))
collapse::wlddev

只返回 glue 对象

> 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 ...
...

或者使用rlang中的parse_expr

eval(rlang::parse_expr(glue("collapse::wlddev")))

另一种选择是传递data中的字符串来加载数据

data(list = "wlddev", package = "collapse")
head(wlddev)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 2012-05-05
    • 1970-01-01
    • 2017-04-05
    • 2016-08-28
    • 2015-03-06
    • 1970-01-01
    相关资源
    最近更新 更多