将变量或表达式传递给`aes`

时间:2014-11-02 12:43:56

标签: r ggplot2

我编写了用因子变量绘制条形图的函数。当我运行我的功能时,显示错误消息。 eval(expr,envir,enclos)中的错误:object' dset'未找到 如何修改我的功能?谢谢!

x1=factor(c("f","m","f","f","m","f","f","m","f","m"))
x2=factor(c("1","2","1","1","1","2","2","2","1","1"))
y1=c(10,11,12,13,14,15,16,17,18,19)
y2=c(10,12,12,13,14,15,15,17,18,19)
y3=c(10,12,12,14,14,15,15,17,18,19)
bbb<- data.frame(x1,x2,y1,y2,y3)


myfunc<-function(dataframe){
  library(ggplot2)
  dset<-dataframe
  for (i in 1:ncol(dset)){
    if (is.factor(dset[,i])==T){
      p3<-ggplot(data=dset, aes(x=dset[,i]))
      p3<-p3+geom_bar(colour='blue',fill='blue')
      print(p3)
    } 
  } 
}

myfunc(dataframe=bbb)

1 个答案:

答案 0 :(得分:7)

转换为答案,因为它似乎很有用

aes旨在评估所提供数据集范围内的未加引号的列名称(在您的案例中为dset)。 dset[, i]不是列名,而是aes未设计用于处理的整个列。

幸运的是,您可以将引用的列名解析为aes_string。因此,使用

aes_string(x = names(dset)[i])

而不是

aes(x = dset[, i])

应该解决你的问题