2016-02-21 171 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"