2014-02-05 215 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