R:使用get()和paste()返回列

时间:2015-12-02 20:45:44

标签: r indexing

为什么get()paste()结合使用数据帧而不是数据框中的列?我怎样才能让它发挥作用?

ab<-12
get(paste("a","b",sep=""))
# gives: [1] 12

ab<-data.frame(a=1:3,b=3:5)
ab$a
#gives: [1] 1 2 3

get(paste("a","b",sep=""))
# gives the whole dataframe

get(paste("ab$","a",sep=""))
# gives: Error in get(paste("ab$", "a", sep = "")) : object 'ab$a' not found

2 个答案:

答案 0 :(得分:2)

它不起作用,因为get()将其传递的字符串解释为引用名为"ab$a"的对象(而不是引用名为{{1}的对象的名为"a"的元素})。这可能是了解这意味着什么的最佳方式:

"ab"

答案 1 :(得分:1)

数据框中的列不是第一类对象。他们的名字&#34;实际上是列表提取的索引值。尽管由names函数的存在引起了可理解的混淆,但它们不是R对象列表中的真正R名,即未加引号的标记或符号。请参阅?is.symbol帮助页面。 get函数接受一个字符值,然后在工作区中查找它并返回它以供进一步处理。

> ab<-data.frame(a=1:3,b=3:5)
> ab$a
[1] 1 2 3
> get(paste("a","b",sep=""))
  a b
1 1 3
2 2 4
3 3 5
> 
> # and this would be the way to get the 'a' column of the ab object

get(paste("ab",sep=""))[['a']]

如果命名对象target的值为&#34; a&#34;你也可以这样做:

target <- "a"
get(paste("ab",sep=""))[[target]]  # notice no quotes around target 
                                   # because `target` is a _real_ R name