从函数中还原列表对象

时间:2018-06-28 15:59:23

标签: r ggplot2

我正在尝试编写一个从数据帧返回一系列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())无济于事。

0 个答案:

没有答案