2013-09-26 14 views
34

मैं कैसे एक सूची से खाली तत्वों कि character(0), integer(0) आदि के रूप में शून्य लंबाई pairlist शामिल निकाल सकते हैं ...चरित्र के साथ सूची से खाली तत्वों को निकालें (0)

list2 
# $`hsa:7476` 
# [1] "1","2","3" 
# 
# $`hsa:656` 
# character(0) 
# 
# $`hsa:7475` 
# character(0) 
# 
# $`hsa:7472` 
# character(0) 

मैं कैसे पता नहीं है उनके साथ निपटना। मेरा मतलब है कि NULL यह बहुत आसान है। मैं इन तत्वों को कैसे हटा सकता हूं जैसे कि hsa:7476 सूची में बना हुआ है।

उत्तर

19

एक संभव दृष्टिकोण:

l <- list(1:3, "foo", character(0), integer(0)) 
Filter(length, l) 
# [[1]] 
# [1] 1 2 3 
# 
# [[2]] 
# [1] "foo" 
+2

+1, मैं हमेशा 'फ़िल्टर' के बारे में भूल जाओ। आप 'फ़िल्टर (फ़ंक्शन (एक्स)! समान (वर्ण (0), x), l) भी कर सकते हैं,' यदि आप केवल 'वर्ण (0) ' – juba

+0

के खिलाफ जांचना चाहते हैं तो इसके बारे में क्या बढ़िया है यह सबसेट को होने की अनुमति देता है ऑनलाइन किया! 'लम्बाई' दृष्टिकोण को 'एल' लंबाई (एल)> 0] करने के लिए पहले स्थान पर 'एल' होना आवश्यक है। मैं इसे अपना सबसेट बनाने की प्रक्रिया में लागू कर सकता हूं। – MichaelChirico

22

एक अन्य विकल्प (मैं और अधिक कुशल लगता है) सूचकांक रखकर जहां तत्व लंबाई> 0:

l[lapply(l,length)>0] ## you can use sapply,rapply 

[[1]] 
[1] 1 2 3 

[[2]] 
[1] "foo" 
8

उपयोग lengths() सूची तत्वों की लंबाई को परिभाषित करने के:

l <- list(1:3, "foo", character(0), integer(0)) 
l[lengths(l) > 0L] 
#> [[1]] 
#> [1] 1 2 3 
#> 
#> [[2]] 
#> [1] "foo" 
#> 
4

पूर्णता के लिए, purrr पैकेज के लिए m लोकप्रिय tidyverse सूचियों के साथ काम करने के लिए कुछ उपयोगी कार्य करता है - compact (introduction) करता है चाल, भी, और ठीक magrittr के %>% पाइप के साथ काम करता है:

l <- list(1:3, "foo", character(0), integer(0)) 
library(purrr) 
compact(l) 
# [[1]] 
# [1] 1 2 3 
# 
# [[2]] 
# [1] "foo" 

या

list(1:3, "foo", character(0), integer(0)) %>% compact 
संबंधित मुद्दे