我正在尝试编写一个从数据帧返回一系列ggplot散点图的函数。下面是可复制的数据框以及我编写的功能
a <- sample(0:20,20,rep=TRUE)
b <- sample(0:300,20,rep=TRUE)
c <- sample(0:3, 20, rep=TRUE)
d <- rep("dog", 20)
df <- data.frame(a,b,c,d)
loopGraph <- function(dataFrame, y_value, x_type){
if(is.numeric(dataFrame[,y_value]) == TRUE && x_type == "numeric"){
dataFrame_number <- dataFrame %>%
dplyr::select_if(is.numeric) %>%
filter(y_value!=0) %>%
dplyr::select(-y_value)
x <- 1
y<-ncol(dataFrame_number)
endList <- list()
for (i in x:y)
{
i
x_value <-colnames(dataFrame_number)[i]
plotDataFrame <- cbind(dataFrame_number[,x_value], dataFrame[,y_value]) %>% as.data.frame()
r2 <- summary(lm(plotDataFrame[,2]~plotDataFrame[,1]))$r.squared
ggplot <- ggplot(plotDataFrame, aes(y=plotDataFrame[,2],x=plotDataFrame[,1])) +
geom_point()+
geom_smooth(method=lm) +
labs(title = paste("Scatterplot of", y_value, "vs.", x_value), subtitle= paste0("R^2=",r2), x = x_value,y=y_value)
endList[[i]] <- ggplot
}
return(endList)
}
else{print("Try again")}
}
loopGraph(df, "a", "numeric")
我想要的是返回对象endList
,因此我可以查看此函数生成的多个散点图。发生的结果是该函数在图窗口中打印了每个散点图,而没有让我访问endList
对象。
如何获取此函数以返回endList对象?有没有更好的方法来解决这个问题?预先感谢!
更新
感谢@GordonShumway解决了我的第一个问题。现在,当我将图定义为plots <- loopGraph(df, "a", "numeric")
时,我可以查看所有输出。但是,即使标签发生了变化,所有图形都具有第一个ggplot功能。关于发生这种情况的任何直觉?或如何解决?我尝试添加dev.set(dev.next())
无济于事。