如何在ggplot2中循环qqplot?

时间:2015-08-23 14:39:11

标签: r for-loop ggplot2

我正在尝试创建一个循环遍历数据集列的函数,并保存每个变量的qq图。我花了很多时间寻找解决方案,但我是R新手,并且无法成功应用我的数据的任何答案。谁能看到我做错了什么?

我给出的错误就是这个," eval中的错误(expr,envir,enclos):object' i'找不到"

library(ggplot2)
QQPlot <- function(x, na.rm = TRUE, ...) {
    nm <- names(x)
    for (i in names(mybbs)) {
            plots <-ggplot(mybbs, aes(sample = nm[i])) + 
                    stat_qq()
            ggsave(plots, filename = paste(nm[i], ".png", sep=""))
    }
}

QQPlot(mybbs)

1 个答案:

答案 0 :(得分:1)

发生错误是因为您尝试将字符串作为变量名传递。使用aes_string()代替aes()

此外,您循环使用名称而不是索引; nm[i]适用于for(i in seq_along(names(x))之类的内容,但适用于您当前的循环。你最好在函数中用nm[i]替换所有i,因为你想要的是变量名。

最后,您在函数中使用mybbs而不是x。这意味着它无法与任何其他data.frame一起正常工作。

以下是这三个问题的解决方案:

QQPlot <- function(x, na.rm = TRUE, ...) {
  for (i in names(x)) {
    plots <-ggplot(x, aes_string(sample = i)) + 
      stat_qq()
    #print(plots)
    ggsave(plots, filename = paste(i, ".png", sep=""))
  }
}