2016-11-07 2 views
-1

Я видел несколько подобных вопросов, но мои вопросы кажутся более простыми.Извлечение коэффициентов из списка объектов оценки

Я запускаю более сложную регрессию, чем моя MWE, и заканчиваю список объектов оценки. Мне было интересно, есть ли более элегантный способ извлечения коэффициентов списка, чем использование другого для цикла по числу или именам списка.

list.lm<-list() 
for(i in 1:3) { 
list.lm[[i]]<-lm(mpg~cyl+runif(32), data=mtcars) 
} 

Я знаю, что я могу использовать обратиться, чтобы получить coeffcients, но я не могу превратить этот

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

'vapply (list.lm, коэффициенты, цифровая (3))' – Barker

+0

то будет в основном такие же, как lapply, что я уже есть. Кто-то предложил использовать транспонирование, но это исчезло –

+0

Возможно, вам стоит подробно остановиться на том, что вы ищете. Мне кажется, что решение @ Barker принимает ваш код «результатов» и сводит его к одной строке кода, что намного эффективнее. –

ответ

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 

Вы также можете посмотреть в purrr пакет Хедли и/или broom пакет Дэвида Робинсона. См https://blog.rstudio.org/2015/09/29/purrr-0-1-0/ и https://cran.r-project.org/web/packages/broom/broom.pdf

0

мне просто нужно использовать транспонирование и sapply/vapply

data.frame(iteration=seq(1,3),t(sapply(list.lm,coefficients))) 
Смежные вопросы