我有一个数据框:
df = data.frame(x1 = rnorm(50), x2 = rnorm(50), x3 = rnorm(50), x4 = rnorm(50))
我想对每个变量与所有其他变量进行回归,例如:
fit1 <- lm(x1 ~ ., data = df)
fit2 <- lm(x2 ~ ., data = df)
等。 (当然,真正的数据框有很多变量)。
我尝试将它们放在一个循环中,但它没有用。我也尝试使用lapply
,但也无法产生预期的结果。有谁知道这个伎俩?
答案 0 :(得分:0)
您可以使用reformulate
动态构建表格
df = data.frame(x1 = rnorm(50), x2 = rnorm(50), x3 = rnorm(50), x4 = rnorm(50))
vars <- names(df)
result <- lapply(vars, function(resp) {
lm(reformulate(".",resp), data=df)
})
或者你可以使用do.call来获得更漂亮的&#34;每个模型中的形式
vars <- names(df)
result <- lapply(vars, function(resp) {
do.call("lm", list(reformulate(".",resp), data=quote(df)))
})
这些方法中的每一个都返回一个列表。您可以使用result[[1]]
,result[[2]]
等
答案 1 :(得分:0)
或者你可以试试这个......
df = data.frame(x1 = rnorm(50), x2 = rnorm(50), x3 = rnorm(50), x4 = rnorm(50))
models = list()
for (i in (1: ncol(df))){
formula = paste(colnames(df)[i], "~ .", sep="")
models[[i]] = lm(formula, data = df)
}
这会将所有模型保存为列表
检索存储的模型:
例如:模型在x4上退化
#retrieve model - replace modelName with the name of the required column
modelName = "x4"
out = models[[which( colnames(df)== modelName )]]
输出:
Call:
lm(formula = formula, data = df)
Coefficients:
(Intercept) x1 x2 x3
-0.17383 0.07602 -0.09759 -0.23920