为什么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
答案 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