2014-02-05 157 views
13

在ggplot2中,您可以使用aes_string在用戶定義函數內傳遞字符參數。你怎麼能做同樣的方面網格需要一個公式,而不是aes將字符串傳遞給facet_grid:ggplot2

FUN <- function(data, x, y, fac1, fac2) { 
    ggplot(data = data, aes_string(x=x, y=y)) + 
    geom_point() + facet_grid(as.formula(substitute(fac1 ~ fac2))) 
} 


FUN(mtcars, 'hp', 'mpg', 'cyl', 'am') 
+2

'as.formula(粘貼(FAC1, 「〜」,FAC2))' – baptiste

回答

23

reformulate()似乎工作得很好。

FUN <- function(data, x, y, fac1, fac2) { 
     ggplot(data = data, aes_string(x=x, y=y)) + 
     geom_point() + facet_grid(reformulate(fac2,fac1)) 
} 

FUN(mtcars, 'hp', 'mpg', 'cyl', 'am') 

enter image description here

+0

完美。不知道「重新配置」。 –

+2

如果你只想要水平或垂直方面,像'reconulate(fac1,「。」)''也可以。 – naco