【问题标题】:Convert multiple strings into object references将多个字符串转换为对象引用
【发布时间】:2019-09-04 22:39:40
【问题描述】:

是否可以将字符串动态转换为对象引用?假设我们有:

a <- 5
b <- 6

letters <- c("a", "b")

eval(parse(text = "a")) 返回a5 的值。是否可以返回多个字符串的值?当我在parse 中包含多个字符串时,只返回最后一个值。

>eval(parse(text = letters))
[1] 6

所需的输出是输入字符串的向量或值:

[1] 5 6

【问题讨论】:

  • 好像是重复的;关于将mget() 与字符串向量一起使用存在几个现有问题,包括dplyrdata.table。最终,您的意图是参数化您传递给函数调用的对象,对吗?可以避免编写此类代码。
  • 一般来说,没有人应该需要编写这样的代码,任何时候你发现自己在这样做,这就是你没有正确使用你的库的代码味道。根据您的其他问题,您似乎正在为 Shiny 构建对 dplyr 的调用。

标签: r


【解决方案1】:

在这里,我们可以使用mget 来返回list 中的对象的值,然后unlist list 输出

unlist(mget(letters), use.names = FALSE)
#[1] 5 6

另外,如果我们使用eval(parse,它仅适用于单个元素,因此循环遍历“字母”,然后执行eval(parse

unname(sapply(letters, function(x) eval(parse(text = x))))
#[1] 5 6

但是,推荐的选项是mget


letters/LETTERS 是内置的 Constants 以返回小写/大写字母。因此,最好不要使用带有保留字或函数名的标识符名称

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-14
    • 2011-08-02
    • 2016-06-10
    相关资源
    最近更新 更多