2

我正在尝试构建一个行为类似于 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 是抱怨的函数。怎么来的?

4

2 回答 2

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)

这将完美无缺。

PS 我改成scale_x_continuousscale_x_discrete因为 Species 是离散的

在此处输入图像描述

于 2015-02-20T12:19:40.743 回答
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))
于 2015-02-20T12:11:45.667 回答