我看到了一些类似的问题,但我的问题似乎更简单了。
我正在运行比我的MWE更复杂的回归,最终得到一个估算对象列表。我想知道是否有更优雅的方法来提取列表的系数,而不是使用另一个循环来覆盖列表的数字或名称。
list.lm<-list()
for(i in 1:3) {
list.lm[[i]]<-lm(mpg~cyl+runif(32), data=mtcars)
}
我知道我可以使用apply来获取系数,但我无法改变这个
sapply(list.lm,coefficients)
或
t(sapply(list.lm, coefficients))
好的,我可以做
data.frame(iteration=seq(1,3),t(sapply(list.lm,coefficients)))
与我的循环相同
results<-data.frame(iteration=numeric(),intercept=numeric(), cyl=numeric(), rand=numeric())
for(i in 1:3) {
results[i,]<-c(iteration=i,coefficients(list.lm[[i]]))
}
results
答案 0 :(得分:1)
一种简单的方法是使用sapply
并转置结果,而不是lapply
。
t(sapply(list.lm,coefficients))
# (Intercept) cyl runif(32)
# [1,] 35.43360 -2.774654 4.163870
# [2,] 38.71960 -2.840392 -1.896252
# [3,] 38.97739 -2.784622 -3.955039
您可能还想查看Hadley的purrr
包和/或David Robinson的broom
包。请参阅https://blog.rstudio.org/2015/09/29/purrr-0-1-0/和https://cran.r-project.org/web/packages/broom/broom.pdf
答案 1 :(得分:0)
我只需要使用transpose和sapply / vapply
data.frame(iteration=seq(1,3),t(sapply(list.lm,coefficients)))