我试图构建一个行为类似于ggplot函数的函数,并且还返回一个ggplot对象,其他函数可以进一步工作(添加构面,应用主题等)。
我现在面临的障碍是,我无法让论证传递给函数,就像我期望的那样。
data(iris)
te <- function(data,x,y){
g <- ggplot(data,aes_q(x=quote(x),y=quote(y))) + scale_x_continuous() +
scale_y_continuous() + geom_point()
return(g)
}
te(iris,x=Species,y=Petal.Length)
我得到的是:
Error: geom_point requires the following missing aesthetics: x, y
我希望这能让我把参数传递给不是字符串,但显然我在这里做错了。对我来说奇怪的是,geom_point是抱怨的功能。怎么样?
答案 0 :(得分:2)
调用函数时尝试quote
:
data(iris)
library(ggplot2)
te <- function(data,x,y){
g <- ggplot(data,aes_q(x,y)) + scale_x_continuous() +
scale_y_continuous() + geom_point()
return(g)
}
te(iris,x=quote(Species),y=quote(Petal.Length))
答案 1 :(得分:2)
在功能内部,您需要使用substitute
代替quote
:
data(iris)
te <- function(data,x,y){
x <- substitute(x)
y <- substitute(y)
g <- ggplot(data,aes_q(x=x,y=y)) + scale_x_discrete() +
scale_y_continuous() + geom_point()
return(g)
}
te(iris,x=Species,y=Petal.Length)
这将是完美的。
P.S。我将scale_x_continuous
更改为scale_x_discrete
,因为Species是离散的