我正在尝试创建一个循环遍历数据集列的函数,并保存每个变量的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)
答案 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=""))
}
}