2016-10-17 15 views
6

मैं नेस्टेड सूची में प्रथम-स्तर के तत्वों के अद्वितीय वर्ग प्राप्त करने के लिए सीधे आगे बढ़ने की तलाश में हूं।नेस्टेड सूची में अद्वितीय वर्ग

प्रतिलिपि प्रस्तुत करने योग्य उदाहरण:

x = list(list(1,"A"), # Unique classes: character, numeric 
     4, # Unique classes: numeric 
     list(1,2,list(4,5, list(6)))) # Unique classes: numeric 

# Expected return: list(c('character', 'numeric'), c('numeric'), c('numeric')) 

उत्तर

6

यह काम करता है

list_classes <- function(ls) { 
    unique(sapply(ls, class)) 
} 

lapply(x, list_classes) 

#[[1]] 
#[1] "numeric" "character" 

#[[2]] 
#[1] "numeric" 

#[[3]] 
#[1] "numeric" "list" 

संपादित करें: रिकर्सिव संस्करण वांछित उत्पादन के लिए

list_classes <- function(ls) { 

    # get classes of list 
    cls <- sapply(ls, class) 

    # which are lists themselves 
    which_ls <- cls == "list" 
    lists <- ls[which_ls] 

    # which are non lists 
    non_lists <- cls[!which_ls] 

    # recursively evaluate contents of list for their classes 
    return(
    unique(
     c(non_lists, sapply(lists, list_classes), recursive = T) 
    ) 
) 

} 

lapply(x, list_classes) 


#[[1]] 
#[1] "numeric" "character" 

#[[2]] 
#[1] "numeric" 

#[[3]] 
#[1] "numeric" 
+2

फिर भी समान नहीं। – 989

+0

सच है, मुझे अभी एहसास हुआ है, कुछ सूचियों को अनपैक करने की आवश्यकता है – BonStats

+1

@ बोनस्टैट्स आपके काम को रिकर्सिव बनाने के लिए एक काम होगा। – 989

संबंधित मुद्दे