आर

2012-12-06 14 views
7

में सूची तत्वों से वेक्टर बनाना मुझे आर में लिखा गया एक फ़ंक्शन से बूटस्ट्रैप आंकड़ों की सूचियों की एक सूची मिली है। मुख्य सूची में 1000 बूटस्ट्रैप पुनरावृत्तियों हैं। सूची के भीतर प्रत्येक तत्व स्वयं चार चरों में से प्रत्येक के लिए फिट मान सहित तीन चीजों की एक सूची है ("fvboot" - एक 501x4 मैट्रिक्स)।आर

मैं 1 मानों के ग्रिड पर प्रत्येक स्थिति के लिए मानों का वेक्टर बनाना चाहता हूं, 1: 501 से, और प्रत्येक चर के लिए, 1: 4 से।

 vec = bootfits$fvboot[[1:1000]][i,j] 

लेकिन जब मैं यह करते हैं, मैं:

recursive indexing failed at level 2 

उदाहरण के लिए, JTH चर के xgrid पर ith बिंदु के लिए, मैं निम्नलिखित की तरह एक वेक्टर बनाना चाहते

चारों ओर घूमते हुए, मुझे लगता है कि मैं समझता हूं कि आर ऐसा क्यों कर रहा है। लेकिन मुझे जवाब नहीं मिल रहा है कि मैं प्रत्येक fvboot मैट्रिक्स के ijth तत्व को 1000x1 वेक्टर में कैसे प्राप्त कर सकता हूं।

सहायता की बहुत सराहना की जाएगी।

+0

'लंबाई (bootfits)' क्या है? यदि यह 3 है तो आपका पहला अनुच्छेद पूरी तरह से भ्रामक है। यदि यह 1000 है, तो आप 'bootfits $ fvboot' नहीं कर सकते हैं। – flodel

उत्तर

4

यदि आप न्यूनतम उदाहरण वस्तु देते हैं तो यह आसान होगा। आम तौर पर, आप [[1:1000]] जैसे वैक्टरों के साथ सूचियों को सूचीबद्ध नहीं कर सकते हैं। मैं plyr कार्यों का उपयोग करूंगा। यह यह करना चाहिए (हालांकि मैं यह परीक्षण नहीं किया):

require("plyr") 
laply(bootfits$fvboot,function(l) l[i,j]) 

आप plyr साथ परिचित नहीं हैं: मैं हमेशा हैडली विकहैम के लेख 'The split-apply-combine strategy for data analysis' बहुत उपयोगी पाया।

+0

अनलिस्ट() के अतिरिक्त, जो बहुत अच्छा काम करता है, धन्यवाद! –

1

आप एक समय में एक वेक्टर निकालने का उपयोग कर सकते हैं, उदा। के लिए मैं = 1 और जे = 1:

i <- 1 
j <- 1 
vec <- sapply(bootfits, function(x){x$fvboot[i,j]}) 

sapply बाहर समारोह (एक इनलाइन समारोह हम लिखा है कि इस मामले में) सूची bootfits के प्रत्येक तत्व के लिए किया जाता है, और परिणाम को सरल यदि संभव हो तो (यानी यह धर्मान्तरित एक सूची से एक वेक्टर तक)।

एक मैट्रिक्स के रूप में मूल्यों के एक पूरे सेट को निकालने के लिए (उदाहरण के लिए सब कुछ खत्म हो मैं के) यदि आप किसी अन्य sapply में इस लपेट सकते हैं, लेकिन एक निर्दिष्ट जे के लिए मैं खत्म हो चुका है इस समय:

j <- 1 
mymatrix <- sapply(1:501, function(i){ 
    sapply(bootfits, function(x){x$fvboot[i,j]}) 
}) 

चेतावनी: मैं इस कोड का परीक्षण नहीं किया है, लेकिन मुझे लगता है कि इसे काम करना चाहिए।

4

उपयोग असूचीबद्ध() आर में समारोह example(unlist) से,

unlist(options()) 
unlist(options(), use.names = FALSE) 

l.ex <- list(a = list(1:5, LETTERS[1:5]), b = "Z", c = NA) 
unlist(l.ex, recursive = FALSE) 
unlist(l.ex, recursive = TRUE) 

l1 <- list(a = "a", b = 2, c = pi+2i) 
unlist(l1) # a character vector 
l2 <- list(a = "a", b = as.name("b"), c = pi+2i) 
unlist(l2) # remains a list 

ll <- list(as.name("sinc"), quote(a + b), 1:10, letters, expression(1+x)) 
utils::str(ll) 
for(x in ll) 
    stopifnot(identical(x, unlist(x)))