2016-02-21 120 views
0

下面是我想要的一个简单的例子:参考函数参数与字符串名称中的R

“DF1”是两个变量“V1”和“V2”的数据帧,这样我就可以得到简单的ggplot功能如流:

ggplot(DF1,aes(x=V1,y=V2))+geom_line() 

现在,如果我有以下两个字符串:

name1="V1" 
name2="V2" 

有没有办法在上面ggplot代码NAME 1和NAME更换V1和V2?我试图使用do.call,但没有解决。我觉得我需要公式般的目标来做到这一点。

+0

只有在情节?绘图之前的setNames可能会工作 –

+0

感谢您的评论。你的意思是像setNames(V1,“name1”)或setNames(DF1 $ V1,“name1”)?我试过了,它不起作用。 –

回答

2

标准答案是

aes_string(x=name1, y=name2) 

(肯定是重复的)

+0

谢谢@baptiste看来我没有用正确的关键字高效地搜索 –

+0

我找不到重复的(虽然它是一个FAQ),但很难搜索 – baptiste

0

我会重新命名列或者使用plyr沿线

library(plyr) 
DF1 <- rename(DF1, c("V1" = "name1")) 

或我的最好的方式,使用data.table

require(data.table) 
DT <- as.data.table(DF1) 
setnames(DT, "V1","name1") 

然后

ggplot(DT, aes(x=name1,y=name2))+geom_line() 

设置一些V1列工作等通常是适得其反的,而且是错误的或易发

UPDATE

一些讨论Named columns renaming

+0

感谢您的帮助@Severin Pappadeux。 baptiste的方式更容易,所以我给他信贷。 –

0

我只是弄清楚,得到()将工作!

ggplot(DF1,aes(x=get(name1),y=get(name2)))+geom_line() 
+1

意见建议:不要用'get' – baptiste

+0

这是为什么?我从来没有在 –

+0

之前使用它,一般来说,使用'get'或'assign'是一个明确的信号,表明你试图按照另一种语言的模式做某件事,而在R中将会有一种更自然,更优雅,更安全的方式以“获得”相同的结果。与“命运::财富(236)”密切相关。从本质上讲,R鼓励使用词法作用域进行函数式编程,而当您在全局环境(工作空间)中保留变量时,常常使用“get”。 [不完全是这里的情况,但无论如何] – baptiste

0

R基本改变列名:

colnames(DF1)[colnames(DF1)=="V1"] <- "Name 1"