2011-06-15 17 views
8

क्या कोई ऐसा फ़ंक्शन है जो coeftest ऑब्जेक्ट से दो या अधिक कॉलम निकाल सकता है? यह एक समय में coeftest ऑब्जेक्ट आसान है, लेकिन क्या मैं एक सूची में ऐसा कर सकता हूं (for() लूप के अलावा)?कॉफ़ेस्ट ऑब्जेक्ट्स की सूची से कॉलम निकालें

> # 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 

शायद अधिक मौलिक सवाल है, तो वहाँ एक रास्ता एक डेटा फ्रेम, जो मुझे कॉलम अकेले निकालने के लिए, तो mapply() का उपयोग की अनुमति होगी में coeftest वस्तु का मांस चालू करने के लिए है। धन्यवाद!

संपादित करें: मैं पहले और दूसरे कॉलम के साथ मैट्रिस (या डेटा फ्रेम) के साथ समाप्त करना चाहता हूं।

[[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

यदि आप वांछित परिणाम प्रदान करते हैं तो शायद उत्तर देना आसान है। – kohske

+0

@ कोहस्के - अच्छी कॉल। धन्यवाद। –

उत्तर

12

[[ इस मामले में गलत सबसेट कार्य है। ध्यान दें कि जब आप lapply() किसी सूची में, आप जो काम कर रहे हैं वह सूची के घटक हैं, बिट्स आपको list[[i]] के साथ मिलेंगे जहां i ith घटक है।

इस तरह के रूप में, आप केवल lapply() कॉल में cts[[1]][, 1:2] की [, 1:2] बिट की जरूरत है। यह एक छोटा सा [ के लिए जटिल तर्क की वजह से है, लेकिन lapply() साथ आसानी से संभव है:

> 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 

नोट <space>,1:2 से पहले; यह [ , 1:2] के बराबर है।

+0

धन्यवाद! बहुत स्पष्ट स्पष्टीकरण। –

5

मुझे यकीन है कि अगर यह तुम क्या चाहते है नहीं कर रहा हूँ, लेकिन कैसे के बारे में:

> 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

@ कोहसे - धन्यवाद! एक अलग प्रश्न का सही जवाब (मैं वांछित आउटपुट प्रदान करने में धीमा था), लेकिन बाद में यह एक अच्छा उपकरण है। –

संबंधित मुद्दे