我正在尝试使用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或我需要使用的语法来完成这项工作。
答案 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)