我使用for循环在项目列表()上运行回归,我想用给定列表输入的名称替换对该变量的引用而不是索引。例如:
frame <- data.frame(y = rnorm(10), x1 = rnorm(10), x2 = rnorm(10), x3 = rnorm(10) )
x.list <- list(frame$x1,frame$x2,frame$x3)
fit <- list()
for(i in 1:length(x.list)){ fit[[i]] <- summary(lm(frame$y ~ x.list[[i]]))}
fit
我希望每个项目都适合引用“x1”,“x2”,“x3”而不是“x.list [[i]]”。感谢您对此的任何想法。
答案 0 :(得分:3)
不要定义x.list
,只是遍历名称:
fit <- vector("list",3)
for ( i in c("x1","x2","x3") ) fit[[i]] <- summary(lm(frame$y ~ frame[[i]]))
保存lm
。您可能需要的不仅仅是摘要,所以只需保存lm
s:
xs <- c("x1","x2","x3")
xs <- setNames(xs,xs)
fit_lm <- lapply(xs,function(i)lm(frame$y ~ frame[[i]]))
您可以使用summary
查看lapply(fit_lm,summary)
,还可以查看系数,
sapply(fit_lm,`[[`,"coefficients")
# x1 x2 x3
# (Intercept) 0.1417501 0.2974165 0.25085281
# frame[[i]] 0.2318912 -0.1468433 -0.08783857
答案 1 :(得分:1)
如果您想要返回值,最好使用lapply
:
xs <- names(frame)[-1]
setNames(
lapply(xs, function(x, dat) {
f <- as.formula(paste("y", x, sep = "~"))
summary(lm(f, data = dat))
}, dat = frame),
xs)
但是,相同的策略适用于for
循环。