2017-07-21 39 views
0

你有繪圖功能,你想傳遞的列名,如下所示:傳遞列名到ggplot功能與AES

plottr <- function(df, flag, flagaes) { 
    ddply(df, flag, summarize, pct = sum(hitbox==1)/length(hitbox)) %>% 
    ggplot(aes_string(x=flagaes, y='pct')) + geom_bar(stat = "identity") 
} 

的問題,很多人(包括我)的臉ddply函數按照原樣獲取列名並在您的數據框中找到它。然而,Aes不知道如何處理一個字符串。我們如何解決這個問題?

+0

你是怎麼試圖調用這個函數的?你傳遞給每個參數的對象是什麼類型的? – MrFlick

+3

我把你的問題標題粘貼到SO搜索面板中,並立即獲得重複。我懷疑還有很多其他的重複,如果我們稍微修改一下,就會顯示出來。如果您打算髮布已有的問題/答案組合,則應該進行誠信搜索以查看是否可以找到一個或多個問題。如果你的問題在重要方面有所不同,你應該引用那些很接近的問題並解釋他們爲什麼不夠用。 –

回答

0

首先,對於flag變量,將列名稱與as.name函數一起傳遞,以將其從字符串形式中刪除。這是因爲,如果你不作爲字符串傳遞,R會嘗試用你輸入的名字找到一個變量。

接下來,需要調用aes作爲aes_string以將列名傳遞給它,但隨後嘗試對pct進行串行處理。如上所示,這可以通過反襯ggplot函數中的列名來彌補,在上面的函數中被看作\`pct`\

我認爲這將是很好的共享這爲未來的用戶,我敢肯定,這不是最乾淨的方式來實現這一點。