【问题标题】:How do I convert a subsetted object character string name to a usable object in R? [duplicate]如何将子集对象字符串名称转换为 R 中的可用对象? [复制]
【发布时间】:2015-10-18 03:13:42
【问题描述】:

假设我有一个子集对象名称的字符串。例如:

foo$var1[foo$var2 < 10 & foo$var3 %in% c(0:100)]  #is currently represented as...
"foo$var1[foo$var2 < 10 & foo$var3 %in% c(0:100)]"

我想使用对象名称的字符串调用子集对象。

我尝试使用get()

get("foo$var1[foo$var2 < 10 & foo$var3 %in% c(0:100)]")

但我得到了错误:

Error in "foo$var1[foo$var2 < 10 & foo$var3 %in% c(0:100)]":
object  "foo$var1[foo$var2 < 10 & foo$var3 %in% c(0:100)]" not found

我假设有一种方法可以使用子集对象来做到这一点(而我知道它只是一个对象名称)。

提前致谢!

【问题讨论】:

  • 您是如何陷入这种境地的?将 R 代码放入字符串可能不是 R 中的一个好策略。get() 函数返回给定名称的变量,它不评估代码(以及像 [&amp;&lt; 这样的操作是 R) 中的函数。您可能能够解析和评估 eval(parse(text=x)),但这不是我推荐的必要内容。

标签: r string get subset


【解决方案1】:

正如@MrFlick 在 cmets 中提到的,您可以这样做:

eval(parse(text="foo$var1[foo$var2 < 10 & foo$var3 %in% c(0:100)]"))

parse 将字符串转换为 expressioneval 计算出 expression

不过,这在 R 中通常被认为是一种不好的做法,请参阅 here

【讨论】:

  • fortunes::fortune(106)
  • @DavidArenburg 感谢您的编辑!我应该更仔细地阅读 cmets。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
相关资源
最近更新 更多