नेस्टेड सूची के पहले तत्व का चयन करें


86

मान लीजिए कि मेरे पास इस तरह की एक सूची है:

x = list(list(1,2), list(3,4), list(5,6))

मुझे एक सूची चाहिए, जिसमें नेस्टेड सूची के केवल पहले तत्व शामिल हों। मैं इस तरह की एक और सूची वापस करके ऐसा कर सकता हूं

x1 = lapply(x, function(l) l[[1]])

क्या इसके लिए शॉर्टकट नोटेशन है?

जवाबों:


137

अधिक शॉर्टकट नहीं, लेकिन आप ऐसा कर सकते हैं:

lapply(x, `[[`, 1)
# [[1]]
# [1] 1
#
# [[2]]
# [1] 3
#
# [[3]]
# [1] 5

1
मैं मानता हूँ कि यह बहुत अच्छा लग रहा है। मैं उम्मीद कर रहा था कि ऐसा करने का एक छोटा तरीका होगा लेकिन मैं एक शानदार तरीके से काम करूंगा!
एलेक्स

@ A5C1D2H2I1M1N2O1R2T1 मैं स्वच्छता और लघुता की सराहना करता हूं, लेकिन क्या आप "[[" समझा सकते हैं? मैं कुछ भी नहीं उपयोगी में मिला lapply?
Mehrad Mahmoudian

2
@MehradMahmoudian, देखने के लिए एक बेहतर स्थान "अर्क" ( स्टेट.थेज़ .ch/R-manual/R-devel/library/base/html/ Extract.html ) होगा।
A5C1D2H2I1M1N2O1R2T1

43

एक और संभावना अच्छी purrrलाइब्रेरी का उपयोग करती है:

library(purrr)
map(x, 1)

5
जो लोग सोच रहे हैं, यह mapनिकालने के रूप में संख्यात्मक मूल्यों की व्याख्या के बाद से काम करता है , जैसे[[
qwr

11

अपनी उदाहरण सूची के लिए आप बस कर सकते हैं:

unlist(x)[ c(TRUE,FALSE) ]

लेकिन यह प्रत्येक 2 सूची वाले तत्वों पर निर्भर करता है।

यदि तत्वों की अलग-अलग संख्याएँ हैं, तो आप पहले sapplyलंबाई की गणना करने के लिए कर सकते हैं , फिर संबंधित 1 तत्व पदों की गणना करें (देखें cumsum), फिर unlistएड सूची से उन मानों का चयन करें । लेकिन उस समय तक स्वीकृत उत्तर संभवतः बहुत सरल है।

यदि सभी सब्लिस्ट की लंबाई समान है (लेकिन 2 से भिन्न हो सकती है) तो आप कुछ ऐसा कर सकते हैं:

do.call( rbind, x)[,1]

या कोई अन्य वस्तु किसी सामान्य वस्तु से। लेकिन मुझे संदेह है कि यह lapplyदृष्टिकोण जितना ही कुशल होगा ।


2

हम उपयोग कर सकते हैं pluckसे rvestजो प्रत्येक नेस्टेड सूची से 1 तत्व का चयन करता है

rvest::pluck(x, 1)
#[[1]]
#[1] 1

#[[2]]
#[1] 3

#[[3]]
#[1] 5

ध्यान दें कि यह अलग-अलग परिणाम देता pluckहै purrrजिसमें से 1 तत्व ( x[[1]]) का चयन करता है

purrr::pluck(x, 1)

#[[1]]
#[1] 1

#[[2]]
#[1] 2

0

बिल्कुल ठीक संकेतन नहीं, लेकिन यह भी एक गुना के साथ किया जा सकता है:

Reduce(function(a, b) c(a, b[1]), x, init = c()) 

# [[1]]
# [1] 1
# 
# [[2]]
# [1] 3
# 
# [[3]]
# [1] 5
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.