2015-05-24 16 views
0

對於措辭不佳的問題抱歉,但我認爲這可能是一個我沒有找到答案的常見問題。如何在ggplot2/dplyr約定中嵌入函數參數

ggplot/dplyr不使用字符類型來調用列名的過濾/組:

library(dplyr) 
library(ggplot2) 
mtcars %>% 
     filter(gear > 4) 

#OR 
enter code here 


ggplot(data = mtcars, aes(x = disp, y = wt, color = factor(gear))) + geom_point() 

...因此,如果想構建將使用這些非字符類型的函數說變換齒輪到不同的列,我該怎麼做?我需要撥打assign嗎?

下面就來過濾哈克的解決方案,可以幫助澄清我的問題:

filter_foo <- function(data, column, value) { 
    data[column > value,] 
} 

filter_foo(mtcars, mtcars$gear , 4) 
+1

好像你可以看看'GGPLOT2 :: aes_string'和[標準評價'dplyr'(http://cran.r-project.org/web/packages/dplyr/vignettes /nse.html)。 – Henrik

回答

1

與Henrik在我的帖子評論的幫助,這SO question,我明白了,我感興趣的是對dplyr/ggplot2應用非標準評估。並且我想在下面使用字符向量來重現結果。

library(lazyeval) 
library(ggplot2) 
library(dplyr) 
filter_criteria <- interp(~ which_column > 4, which_column = as.name("gear")) 
mtcars %>% 
    filter_(filter_criteria) 

#OR 
ggplot(data = mtcars, aes_string(x = "disp", y = "wt", color = "factor(gear)")) + geom_point()