Unique classes in a nested list

I am looking for a direct way to get unique first level element classes in a nested list.

Playable example:

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
source share
1 answer

It works

 list_classes <- function(ls) { unique(sapply(ls, class)) } lapply(x, list_classes) #[[1]] #[1] "numeric" "character" #[[2]] #[1] "numeric" #[[3]] #[1] "numeric" "list" 

Edit: Recursive version

 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" 
+6
source

All Articles