मैं पहली "लंबी" सूची l को कैसे बदल सकता हूं:

l <- list()
n=1
for (i in 1:9) {
  l[[length(l)+1]] <- n:(n+2)
  n=n+3
}

सूचियों की एक विस्तृत लेकिन छोटी सूची में योग्य: अगले कोड खंड में l के प्रत्येक 3 तत्वों के बाद मैं टूट रहा हूं।

lol <- list()
lol[[1]] <- list(1:3,4:6,7:9)
lol[[2]] <- list(10:12,13:15,16:18)
lol[[3]] <- list(19:21,22:24,25:27)

कोई विचार? क्या होगा अगर मैं एल के हर 2 तत्वों के बाद तोड़ना चाहता हूं।

2
Andre Elrico 18 जिंदा 2017, 20:59

1 उत्तर

सबसे बढ़िया उत्तर

आप इसे एक वेक्टर 1,1,1,2,2,2,3,3,3 से विभाजित कर सकते हैं:

n = 3                                     # the length of each sub list
split(l, (seq_along(l) - 1) %/% n)

identical(lol, setNames(split(l, (seq_along(l) - 1) %/% 3), NULL))
# [1] TRUE
2
Psidom 18 जिंदा 2017, 21:12
1
यह identical चेक पास नहीं करता, बल्कि दूसरा तरीका है: tapply(l, rep(1:3, each=3), FUN = c)
 – 
Frank
18 जिंदा 2017, 21:17
सही समाधान!
 – 
Andre Elrico
19 जिंदा 2017, 14:02
1
मुझे विश्वास है कि यह सूची तत्वों के नामों के कारण है। आपका समाधान पर्याप्त सामान्य नहीं है। उदाहरण के लिए यदि आप 2 से विभाजित करते हैं तो यह काम नहीं करता है। वैसे भी Tapply का अच्छा उपयोग!
 – 
Andre Elrico
19 जिंदा 2017, 14:07