दिलचस्प पोस्ट
जीआईटी में कमानों की एक श्रेणी को वापस लाएं क्यों malloc + मेकसेट कॉलोक की तुलना में धीमी है? MySQL: किसी तालिका से पंक्तियों का चयन करें जो दूसरे में नहीं हैं स्विफ्ट में एक वैकल्पिक मूल्य क्या है? पायथन में स्ट्रिंग को जोड़ने का पसंदीदा तरीका कौन सा है? 'का प्रयोग' कथन नामस्थान के अंदर या बाहर होना चाहिए? कैसे नोड। Js के कंसोल फ़ॉन्ट रंग को बदलना है? Servlet को फ़ॉर्म सबमिट करने के बाद मैं जेएसएपी में HTML प्रपत्र फ़ील्ड वैल्यू कैसे बना सकता हूं? SQL सर्वर में तालिका नाम "dbo" से क्यों शुरू होते हैं? एक मिलान पैटर्न के बाद sed या awk लाइन के साथ मुद्रण जावा में विरासत – उप-वर्ग का उद्देश्य बनाने से सुपरक्लास के निर्माता भी आमंत्रित करता है क्यों बिल्कुल? टर्नरी ऑपरेटर के परिणामस्वरूप अप्रत्याशित प्रकार परिणामी पूर्णांक दृश्यों के अंतराल का पता लगाएं Google क्रोम / फ़ायरफ़ॉक्स कंसोल में एक्सटेंशन आउटपुट नहीं दिखता है पायथन एलिप्सिस ऑब्जेक्ट क्या करता है?

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

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

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]] लिए इंडेक्सिंग करने के लिए बेहतर तरीके से चर्चा की है जो कि खराब स्थिति से बचा जाता है।