2011-06-15 17 views
8

coeftest nesnesinden iki veya daha çok sütun çıkarabilen bir işlev var mı? Bu bir seferde bir tane kolay bir coeftest nesnesidir, ancak aynısını bir listeye yapabilir miyim (for() döngü dışında)? Bana o zaman, tek başına sütunları ayıklamak mapply() kullanmasına izin verecek bir veri çerçevesi içine coeftest nesnenin eti açmak için bir yol olup olmadığınıÖznitelikli nesneler listesinden sütunları ayıkla

> # meaningless data 
> temp <- data.frame(a = rnorm(100, mean = 5), b = rnorm(100, mean = 1), 
+     c = 1:100) 
> formulas <- list(a ~ b, a ~ c) 
> models <- lapply(formulas, lm, data = temp) 
> library(lmtest) 
> cts <- lapply(models, coeftest) 

> # easy to extract columns one object at a time 
> cts[[1]][, 1:2] 
       Estimate Std. Error 
(Intercept) 5.0314196 0.1333705 
b   -0.1039264 0.0987044 

> # but more difficult algorithmically 
> # either one column 
> lapply(cts, "[[", 1) 
[[1]] 
[1] 5.03142 

[[2]] 
[1] 5.312007 

> # or two 
> lapply(cts, "[[", 1:2) 
Error in FUN(X[[1L]], ...) : attempt to select more than one element 

Belki daha temel bir sorudur. Teşekkürler!

Düzenleme: Birinci ve ikinci sütunlara sahip bir matris (veya veri çerçeveleri) ile sonlandırmak istiyorum.

[[1]] 
       Estimate Std. Error 
(Intercept) 5.0314196 0.1333705 
b   -0.1039264 0.0987044 

[[2]] 
       Estimate Std. Error 
(Intercept) 5.312007153 0.199485363 
c   -0.007378529 0.003429477 
+1

İstenilen bir sonuç verirseniz yanıtlanması daha kolay olur. – kohske

+0

@kohske - İyi çağrı. Teşekkürler. –

cevap

12

[[ bu durumda yanlış alt küme fonksiyonudur. Bir listenin üzerinde lapply() bulunduğunuzda, listenin bileşenleri, list[[i]] ile alacağınız bitlerin, ith bileşeninin i olduğu bit olduğunu unutmayın.

Bu nedenle, lapply() numaralı çağrıya yalnızca [, 1:2] bit cts[[1]][, 1:2] aramasına gereksinim duyarsınız. Bu lapply() ile biraz [ için çünkü argümanlar yanıltıcıdır, ama kolayca yapılabilir:

> lapply(cts, `[`, , 1:2) 
[[1]] 
       Estimate Std. Error 
(Intercept) 4.926679544 0.1549482 
b   -0.001967657 0.1062437 

[[2]] 
       Estimate Std. Error 
(Intercept) 4.849041327 0.204342067 
c   0.001494454 0.003512972 

Not <space>,1:2 önce; Bu [ , 1:2] eşdeğeridir.

+0

Teşekkürler! Çok açık bir açıklama. –

5

Bunun istediğini olup olmadığından emin değilim, ama yaklaşık nasıl:

> do.call("rbind", cts)[, 1:2] 
       Estimate Std. Error 
(Intercept) 4.8200993881 0.142381642 
b   -0.0421189130 0.092620363 
(Intercept) 4.7459340076 0.206372906 
c   0.0005770324 0.003547885 
+0

@Kohkse - Teşekkürler! Farklı bir soruya doğru cevap (istenilen çıktıyı sağlamakta yavaş kaldım), ancak bu daha sonra için iyi bir araçtır. –