如何使用sapply对数据集执行线性回归

时间:2016-01-17 22:06:58

标签: r ggplot2 statistics linear-regression sapply

我正在尝试使用sapply来简化我的代码以运行执行线性回归的函数,绘制图像并将其作为.pdf保存在我作为.csv导入的数据集的所有列上。基本上我有一个包含数字的列,我想对第一列运行所有其他列的线性回归。到目前为止,这是我的代码:

library(readr)
library(ggplot2)

data <- read_csv("~/Desktop/tertileandvolume.csv", col_name = TRUE)
data <- na.omit(data)

run_all <- function(x){
    lm(data[,1] ~ x)
    summary(lm(data[,1] ~ x))
    ggplot(data, aes(x=names(data)[1], y=names(data)[x])) +
    geom_point(shape=1) + geom_smooth(method=lm, se=FALSE) + ggtitle("x") + labs(x=names(data)[1],y=names(data)[x])
    ggsave(path="~/Desktop/")
}

sapply(data, 2, run_all)

另外,如何使用列名生成绘图的轴标签?然后使用相同的标签将其保存在ggsave中?我不太熟悉使用sapply或我需要使用的语法来完成这项工作。

2 个答案:

答案 0 :(得分:0)

Sapply没有三个参数 - 你把它与apply混淆了。在任何情况下,这里你不应该使用(s)申请,而只是一个for循环:

for (col_name in names(data)[,-1]) run_all (data[,col_name])

如果您想知道列名,只需传递它而不是整列:

for (col_name in names(data)[-1]) run_all (col_name)

run_all <- function(col_name){
  x <- data[, col_name]
  l <- lm (data[,1] ~ x) # please note the rest of your code has more error!!
  summary (l)
  # gg <-ggplot ... #!!
  # etc

答案 1 :(得分:-1)

我认为你可以使用lapply(names(data)[-1], run_all) 我复制并粘贴到您的函数下面,还没有尝试,因为我没有您的数据集(我评论了一些更改):

run_all <- function(x, data){
    lm1 <- lm(data[,1] ~ data[,x]) # save the results
    summary(lm1)                   # so you don't have to do it here again
    ggplot(data, aes(x=names(data)[1], y=x)) +
           geom_point(shape=1) + geom_smooth(method=lm, se=FALSE) + 
           ggtitle("x") + labs(x=names(data)[1],y=x)
    ggsave(path=paste0("~/Desktop/",x))  # just to prevent the same filename
}

lapply(names(data)[-1], run_all, data)