2016-05-07 4 views
2

Вот мой список называется Dico:получить длину элемента списков списка в R

dico <- list(list(list(c("dim.", "dimension", "dimensions", "mesures" 
), c("45 cm", "45", "45 CM", "0.45m")), list(c("tamano", "volumen", 
"dimension", "talla"), c("45 cm", "45", "0.45 M", "45 centimiento" 
)), list(c("measures", "dimension", "measurement"), c("45 cm", 
"0.45 m", "100 inches", "100 pouces"))), list(list(c("poids", 
"poid", "poids net"), c("100 grammes", "100 gr", "100")), list(
    c("peso", "carga", "peso especifico"), c("100 gramos", "100g", 
    "100", "100 g")), list(c("weight", "net wieght", "weight (grammes)" 
), c("100 grams", "100", "100 g"))), list(list(c("Batterie oui/non", 
"batterie", "présence batterie"), c("Oui", "batterie", "OUI" 
)), list(c("bateria", "bateria si or no", "bateria disponible" 
), c("si", "bateria furnindo", "1")), list(c("Battery available", 
"battery", "battery yes or no"), c("yes", "Y", "Battery given" 
)))) 

визуально выглядит следующим образом:

[[1]] 
[[1]][[1]] 
[[1]][[1]][[1]] 
[1] "dim."  "dimension" "dimensions" "mesures" 

[[1]][[1]][[2]] 
[1] "45 cm" "45" "45 CM" "0.45m" 


[[1]][[2]] 
[[1]][[2]][[1]] 
[1] "tamano" "volumen" "dimension" "talla"  

[[1]][[2]][[2]] 
[1] "45 cm"   "45"    "0.45 M"   "45 centimiento" 


[[1]][[3]] 
[[1]][[3]][[1]] 
[1] "measures" "dimension" "measurement" 

[[1]][[3]][[2]] 
[1] "45 cm"  "0.45 m"  "100 inches" "100 pouces" 



[[2]] 
[[2]][[1]] 
[[2]][[1]][[1]] 
[1] "poids"  "poid"  "poids net" 

[[2]][[1]][[2]] 
[1] "100 grammes" "100 gr"  "100"   


[[2]][[2]] 
[[2]][[2]][[1]] 
[1] "peso"   "carga"   "peso especifico" 

[[2]][[2]][[2]] 
[1] "100 gramos" "100g"  "100"  "100 g"  


[[2]][[3]] 
[[2]][[3]][[1]] 
[1] "weight"   "net wieght"  "weight (grammes)" 

[[2]][[3]][[2]] 
[1] "100 grams" "100"  "100 g" 
... 

Я хочу, чтобы получить все длины всех элементы моего списка. Поэтому я хочу, выход, который будет выглядеть следующим образом:

[[1]] 
[[1]][[1]] 
[[1]][[1]][[1]] 
[1] 3 

[[1]][[1]][[2]] 
[1] 4 


[[1]][[2]] 
[[1]][[2]][[1]] 
[1] 4 

[[1]][[2]][[2]] 
[1] 4 


[[1]][[3]] 
[[1]][[3]][[1]] 
[1] 3 

[[1]][[3]][[2]] 
[1] 4 



[[2]] 
[[2]][[1]] 
[[2]][[1]][[1]] 
[1] 3 

[[2]][[1]][[2]] 
[1] 3  


[[2]][[2]] 
[[2]][[2]][[1]] 
[1] 3 

[[2]][[2]][[2]] 
[1] 4 


[[2]][[3]] 
[[2]][[3]][[1]] 
[1] 3 

[[2]][[3]][[2]] 
[1] 3 
... 

Я знаю, что я должен использовать lapply, sapply и прочее, но я застрял в течение нескольких часов. Как бы вы это сделали?

+0

Вам может понадобиться 'lapply (Дико, функция (х) lapply (х, функция (у) lapply (у, длина)))' в получить ожидаемый формат. BTW для первого элемента, длина должна быть 4 '[1]" dim ". «размерность» «размеры» «mesures» ' – akrun

ответ

4

Мы можем использовать рекурсивную версию lapply т.е. rapply

rl <- rapply(dico, length, how="list") 
rl 
#[[1]] 
#[[1]][[1]] 
#[[1]][[1]][[1]] 
#[1] 4 

#[[1]][[1]][[2]] 
#[1] 4 


#[[1]][[2]] 
#[[1]][[2]][[1]] 
#[1] 4 

#[[1]][[2]][[2]] 
#[1] 4 
#--- 
+1

Замечательный ответ. Это работало как шарм! –

+1

Огромное вам спасибо, вы сделали мой день настоящим –