2016-10-17 31 views
6

Tôi đang tìm cách chuyển tiếp thẳng để có được các lớp duy nhất của các phần tử cấp đầu tiên trong danh sách lồng nhau.Các lớp duy nhất trong danh sách lồng nhau

tái sản xuất ví dụ:

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')) 

Trả lời

6

này hoạt động

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

lapply(x, list_classes) 

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

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

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

Edit: phiên bản đệ quy

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

Vẫn không giống với đầu ra mong muốn. – 989

+0

Đúng, tôi vừa mới nhận ra, cần phải giải nén một số danh sách – BonStats

+1

@BonStats Một công việc xung quanh sẽ là làm cho hàm của bạn đệ quy. – 989

Các vấn đề liên quan