2015-05-08 114 views
3

我正在使用for循环在项目列表()中运行回归,我想用该变量的名称替换给定列表输入的引用,而不是比它的指数。例如:通过list()变量名称而不是索引在R中重命名

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 

我想每个项目在配合指代替 “x.list [[I]]”, “X1”, “X2”, “×3”。感谢您对此的任何想法。

+1

'frame'是一个函数;也许你可以称之为别的东西? – Frank

回答

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]])) 

你可以看一下summarylapply(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

如果你想要一个返回值,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) 

但是, tegy会与for循环一起工作。

相关问题