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

How to use sapply to perform a linear regression on a dataset

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

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 或完成这项工作所需的语法。

Sapply 没有三个参数 - 您将它与 apply 混淆了。无论如何,在这里你不应该使用 (s)apply 而只是一个 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

我想你可以使用 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)