在R中的另一个函数的for循环中使用ggplot()而不返回图形对象?

时间:2014-11-01 19:06:35

标签: r function ggplot2 dataframe histogram

所有,我有一个编写函数的任务,该函数返回一个列表作为输出。 同时,绘制一些东西。

使用mtcars数据说明我的功能如下

library(ggplot2)    
data(mtcars)
myfunc<-function(mtcars){
  for(i in 1:ncol(mtcars)){
    g1<- ggplot(mtcars, aes(x=mtcars[,i]))
    g1 + geom_histogram()+
    geom_vline(xintercept=mean(mtcars[,i]),col="red")
  }
  return (list(mtcars))
}

myfunc(mtcars)

如何修改上述代码,根据需要返回列表并显示gglots?

1 个答案:

答案 0 :(得分:2)

如果您的问题是&#34;为什么这不显示任何情节?&#34;,那么答案就是:

在R命令行中,只需键入变量名或表达式即可调用print方法。这不会发生在函数,循环或使用source(...)中,因此要显示任何内容(打印或绘图),您需要明确地执行此操作。但这只是你问题的一部分。

aes(...)电话中使用索引是一个非常糟糕的主意。而是提取列名称并在调用aes_string(...)

时使用它
myfunc<-function(mtcars){
  for(i in 1:ncol(mtcars)){
    col <- names(mtcars)[i]
    ggp <- ggplot(mtcars, aes_string(x=col))+
      geom_histogram()+
      geom_vline(xintercept=mean(mtcars[[col]]),col="red")
    plot(ggp)
  }
  return (list(mtcars))
}

myfunc(mtcars)

这将绘制直方图。