आर

2013-02-13 30 views
35

मैं मुद्दों की एक सूची है जो एक सूची प्रारूप में पहले से ही है करने के लिए डेटा जोड़कर आ रही है में सूचियों की एक सूची के लिए एक सूची में जोड़ देने। मेरे पास एक प्रोग्राम है जो सिमुलेशन लूप के दौरान परिणाम ऑब्जेक्ट्स निर्यात करेगा। डेटा स्वयं matrices की एक सूची के रूप में संग्रहीत किया जाता है। मेरा विचार है कि उन सूचियों को एक सूची में संग्रहीत करना है, और फिर बाद में विश्लेषण के लिए आर ऑब्जेक्ट के रूप में सूचियों की इस सूची को सहेजना है, हालांकि मुझे कुछ सही तरीके से इसे प्राप्त करने में कुछ समस्याएं हैं। मैं दिखाता हूँ कि मैं क्या छोटे सार उदाहरण बस अपना अनुकरण से मैट्रिक्स डेटा के बजाय मानों का उपयोग कर के साथ किया है:आर

कहो मैं 3 बार के लिए सिमुलेशन पाश दौड़े हैं।

सूची अन्य सूचियों को रोकने के लिए और बचाया जा: पुनरावृत्तियों के दौरान, परिणामों की सूची की जरूरत सूचियों में से एक सूची है कि मैं एक अनुसंधान वस्तु के रूप में बचत होगी में एकत्र होने के लिए outlist1 <- list()

प्रथम यात्रा: resultsa <- list(1,2,3,4,5)

outlist <- append(outlist1,resultsa)

दूसरा पुनरावृत्ति: resultsb <- list(6,7,8,9,10)

outlist <- append(outlist1,b)

तीसरा पुनरावृत्ति: resultsc <- list(11,12,13,14,15)

outlist <- list(outlist2,c)

हालांकि, इस समाधान सूचियों इस तरह से युक्त एक सूची से बढ़ के साथ काम नहीं करता है, वांछित परिणाम है:

>outlist 
[[1]] 
[[1]][[1]] 
[1] 1 

[[1]][[2]] 
[1] 2 

[[1]][[3]] 
[1] 3 

[[1]][[4]] 
[1] 4 

[[1]][[5]] 
[1] 5 


[[2]] 
[[2]][[1]] 
[1] 6 

[[2]][[2]] 
[1] 7 

[[2]][[3]] 
[1] 8 

[[2]][[4]] 
[1] 9 

[[2]][[5]] 
[1] 10 


[[3]] 
[[3]][[1]] 
[1] 11 

[[3]][[2]] 
[1] 12 

[[3]][[3]] 
[1] 13 

[[3]][[4]] 
[1] 14 

[[3]][[5]] 
[1] 15 

हालांकि , मैं बजाय क्या मिलता है:

> outlist3 
[[1]] 
[[1]][[1]] 
[[1]][[1]][[1]] 
[1] 1 

[[1]][[1]][[2]] 
[1] 2 

[[1]][[1]][[3]] 
[1] 3 

[[1]][[1]][[4]] 
[1] 4 

[[1]][[1]][[5]] 
[1] 5 


[[1]][[2]] 
[[1]][[2]][[1]] 
[1] 6 

[[1]][[2]][[2]] 
[1] 7 

[[1]][[2]][[3]] 
[1] 8 

[[1]][[2]][[4]] 
[1] 9 

[[1]][[2]][[5]] 
[1] 10 

मैं कोई सूची कैसे हो जाना है, ऐसा है कि स्वरूपित जिसके परिणामस्वरूप सूची वांछित परिणाम की तरह है? यदि मैं इन सूचीओं पर और विश्लेषण करता हूं तो मुझे तत्वों तक आसानी से पहुंचने में सक्षम होना चाहिए।

+0

आप हर बार 'आउटलिस्ट' ओवरराइट कर रहे हैं। ध्यान दें कि आपके द्वारा जोड़े जाने पर आपके दूसरे तर्क में 'आउटलिस्ट' नहीं है। – kmace

उत्तर

54

यह इस हो सकता है, आप क्या करना चाहते हैं:

# Initial list: 
myList <- list() 

# Now the new experiments 
for(i in 1:3){ 
    myList[[length(myList)+1]] <- list(sample(1:3)) 
} 

myList 
+0

यह बिल्कुल है। सूची ब्रैकेट में संलग्न दूसरा भाग सभी अंतर बनाता है। मुझे आवश्यक स्वरूप देता है और ऑब्जेक्ट की लंबाई के गुणकों के बारे में चेतावनी को रोकता है। मेरे पास पहले था जब मैंने 'सूची [[लंबाई (सूची) +1] के समतुल्य प्रयास किया] <- नमूना (1: 3)' समाधान का प्रयास करने और पहुंचने के लिए। धन्यवाद! – Ward9250

+8

आप "सूचियों की सूची" को दोबारा जोड़ने के लिए सी (.., ..) का भी उपयोग कर सकते हैं। आपको बस यह सुनिश्चित करना होगा कि सी() दोनों तर्क दोनों सूचियों की सूचियां हैं। –

+0

बढ़िया! मुझे मिला एकमात्र उपयोगी उदाहरण, हालांकि यह दिखा रहा है कि आर एक भयंकर भाषा है! – chao

13
outlist <- list(resultsa) 
outlist[2] <- list(resultsb) 
outlist[3] <- list(resultsc) 

append की मदद फ़ाइल का कहना है वैक्टर के लिए है। लेकिन इसका इस्तेमाल यहां किया जा सकता है। मैंने सोचा कि मैं उससे पहले की कोशिश की थी लेकिन वहाँ ओपी के कोड में कुछ अजीब विसंगतियों मुझे गुमराह हो सकता है इस प्रकार थे:

outlist <- list(resultsa) 
outlist <- append(outlist,list(resultsb)) 
outlist <- append(outlist,list(resultsc)) 

एक ही परिणाम है।

+3

नाइटपिक: 'is.vector (सूची()) 'सत्य लौटाता है :) –

9

दो अन्य समाधान है जो एक सूचकांक एक के लिए बताए शामिल सूची के अंत में पिछले रहे हैं। यहां एक समाधान है जो append का उपयोग करता है।

resultsa <- list(1,2,3,4,5) 
resultsb <- list(6,7,8,9,10) 
resultsc <- list(11,12,13,14,15) 

outlist <- list(resultsa) 
outlist <- append(outlist, list(resultsb)) 
outlist <- append(outlist, list(resultsc)) 

जो आपके अनुरोध प्रारूप

> str(outlist) 
List of 3 
$ :List of 5 
    ..$ : num 1 
    ..$ : num 2 
    ..$ : num 3 
    ..$ : num 4 
    ..$ : num 5 
$ :List of 5 
    ..$ : num 6 
    ..$ : num 7 
    ..$ : num 8 
    ..$ : num 9 
    ..$ : num 10 
$ :List of 5 
    ..$ : num 11 
    ..$ : num 12 
    ..$ : num 13 
    ..$ : num 14 
    ..$ : num 15 
4

देता है पर सूची का एक काम डाल करके एक चर पहले

myVar <- list() 

यह

myVar[[1]] <- list() 
myVar[[2]] <- list() 
द्वारा hiearchial कार्य करने की संभावना को खोलता है

और इतने पर ... तो अब यह

myVar[[1]][[1]] <- c(...) 
myVar[[1]][[2]] <- c(...) 

या

myVar[[1]][['subVar']] <- c(...) 

और इतने

पर यह भी सीधे नाम ($ के बजाय) आवंटित करने के लिए संभव है करना संभव नहीं है

myVar[['nameofsubvar]] <- list() 

और फिर

myVar[['nameofsubvar]][['nameofsubsubvar']] <- c('...') 

याद रखना महत्वपूर्ण हमेशा प्रणाली काम करने के लिए डबल कोष्ठक का उपयोग करने के

तो जानकारी सरल है पाने के लिए है

myVar$nameofsubvar$nameofsubsubvar 

और इतने पर ...

उदाहरण:

a <-list() 
a[['test']] <-list() 
a[['test']][['subtest']] <- c(1,2,3) 
a 
$test 
$test$subtest 
[1] 1 2 3 


a[['test']][['sub2test']] <- c(3,4,5) 
a 
$test 
$test$subtest 
[1] 1 2 3 

$test$sub2test 
[1] 3 4 5 

इसकी हार्दिक परिभाषा में आर भाषा की एक अच्छी विशेषता ...

मैंने इसे जटिल कार्यान्वयन (दो से अधिक स्तरों के साथ) के लिए उपयोग किया और यह काम करता है!

6

यह उत्तर स्वीकृत एक के समान है, लेकिन थोड़ा कम संकलित है।

L<-list() 
for (i in 1:3) { 
L<-c(L, list(list(sample(1:3)))) 
}