दिलचस्प पोस्ट
ऐसा क्यों लगता है कि मेरा यादृच्छिक संख्या जनरेटर सी # में यादृच्छिक नहीं है? एक एकल अक्षर स्ट्रिंग के रूप में टेक्स्ट फ़ाइल आयात करें मैं एक विधि कैसे वापस कर सकता हूँ एक तर्क है कि इसे पारित किया गया था? मैं log4net के आसपास कैसे काम कर रहा हूँ अपरिवर्तनीय उल्लंघन: _registerComponent (…): लक्ष्य कंटेनर एक DOM तत्व नहीं है एंड्रॉइड – घर या इतिहास से आवेदन प्रक्षेपण का पता लगाने लाइन-लपेटें ढूँढना 100% चौड़ाई चहचहाना बूटस्ट्रैप 3 टेम्पलेट पोस्टग्रेएसक्यूएल सॉर्ट, डेटटाइम एस्क, नल पहले? एकाधिक रेडिस डाटाबेस का क्या मतलब है? क्या Google App Engine सर्वर पर फाइलों और फ़ोल्डरों के निर्माण की अनुमति देता है? ग्रेडल बिल्ड.ग्रॅडल टू मेवेन पॉम.एक्सएमएल XSLT में एक HTML इकाई का उपयोग करना (जैसे & nbsp;) क्या जावा में स्थिर तरीके से विरासत मिली है? MYSQL तालिका में नया कॉलम कैसे जोड़ें

आर में इंटरलीव सूची

मान लीजिए कि मेरे पास आर में दो सूचियां हैं, जरूरी नहीं कि समान लंबाई की तरह, जैसे:

a <- list('a.1','a.2', 'a.3') b <- list('b.1','b.2', 'b.3', 'b.4') 

इंटरलीवुड तत्वों की एक सूची तैयार करने का सबसे अच्छा तरीका क्या है, जब एक बार छोटी सूची का तत्व जोड़ा गया था, तो अब लंबी सूची के शेष तत्व अंत में संलग्न हैं? जैसे:

 interleaved <- list('a.1','b.1','a.2', 'b.2', 'a.3', 'b.3','b.4') 

एक लूप का उपयोग किए बिना मुझे पता है कि मामले के लिए mapply काम करता है जहां दोनों सूचियों की समान लंबाई है

वेब के समाधान से एकत्रित समाधान "आर में इंटरलीव सूची"

यहां एक तरीका है:

 idx <- order(c(seq_along(a), seq_along(b))) unlist(c(a,b))[idx] # [1] "a.1" "b.1" "a.2" "b.2" "a.3" "b.3" "b.4" 

जैसा कि @जम्स बताते हैं, क्योंकि आपको एक सूची की ज़रूरत है, आपको करना चाहिए:

 (c(a,b))[idx] 

एक समान प्रश्न की जांच करते समय, मुझे कुछ सुंदर मामलों में गॉबर ग्रोथेंडिक (यानी @ ग्रेरोन्डेक्स ) के इस खूबसूरत हल से आया था:

 c(rbind(a,b)) 

यह समान रूप से अच्छी तरह से काम करता है जब a और b दोनों सूचियां होती हैं, या जब a और b वैक्टर होते हैं यह ओपी के प्रश्न का एक सटीक समाधान नहीं है, क्योंकि जब a और b की अलग-अलग लंबाई होती है, तो यह एक छोटी सी अनुक्रम के तत्वों को पुनरावृत्ति करेगा, एक चेतावनी छापती है। हालांकि, चूंकि यह समाधान सरल और सुरुचिपूर्ण है, और एक बहुत ही इसी तरह के प्रश्न का उत्तर प्रदान करता है – कुछ लोगों (जैसे मेरे) के एक प्रश्न जो परिणाम के रूप में इस पृष्ठ पर अपना रास्ता खोजते हैं – यह एक उत्तर के रूप में जोड़ने लायक लग रहा था

 interleave(a, b) # unlist(interleave(a, b)) # [1] "a.1" "b.1" "a.2" "b.2" "a.3" "b.3" "b.4" interleave <- function(a, b) { shorter <- if (length(a) < length(b)) a else b longer <- if (length(a) >= length(b)) a else b slen <- length(shorter) llen <- length(longer) index.short <- (1:slen) + llen names(index.short) <- (1:slen) lindex <- (1:llen) + slen names(lindex) <- 1:llen sindex <- 1:slen names(sindex) <- 1:slen index <- c(sindex, lindex) index <- index[order(names(index))] return(c(a, b)[index]) } 

Ggplot2 से इंटरलीव फ़ंक्शन का उपयोग करने वाला यह एक विकल्प है मुझे यकीन है कि इस पर सुधार किया जा सकता है, लेकिन यह एक शुरुआत है:

 require(ggplot2) Interleave <- function(x,y){ v <- list(x,y) lengths <- sapply(v,length) mn <- min(lengths) v <- v[order(lengths)] c(ggplot2:::interleave(v[[1]],v[[2]][seq_len(mn)]),v[[2]][(mn+1):length(v[[2]])]) } Interleave(a,b) Interleave(b,a) 

विशेष रूप से, यह अजीब चीजें कर देगा यदि सूचियां वास्तव में एक समान लंबाई हैं शायद किसी ने अंतिम पंक्ति में v[[2]] लिए इंडेक्सिंग करने के लिए बेहतर तरीके से चर्चा की है जो कि खराब स्थिति से बचा जाता है।