所有,我有一个编写函数的任务,该函数返回一个列表作为输出。 同时,绘制一些东西。
使用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?
答案 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)
这将绘制直方图。