2013-07-23 1 views
3

Je cette liste:liste Supprimer des listes dans la liste si la longueur

a <- list(list(c("sam1", "control"), c("sam1", "latanoprost free acid", "GSM6683", "GSM6684"), c("sam1", "prostaglandin F2alpha", "GSM6687", "GSM6688")), list(c("sam2", "control"), c("sam2", "latanoprost free acid", "GSM6681", "GSM6682"), c("sam2", "prostaglandin F2alpha", "GSM6685", "GSM6686"))) 

Je voudrais supprimer les éléments (listes), dont la longueur est inférieure à trois (3 <). J'ai essayé deux lapply pour obtenir un [[i]] [[j]] et - NULL, mais j'ai eu des listes seulement avec NULL. Comme ceci:

b <- lapply(seq(length(a)),function(i){ 
    lapply(seq(length(a[[1]])),function(j){ 
    if(length(a[[i]][[j]]) < 3) {a[[i]][[j]] <- NULL} 
    }) 
}) 

Merci pour toute aide ...

Répondre

7

Comment cela?

lapply(a, function(x) x[sapply(x, length) >= 3]) 

ou

lapply(a, Filter, f = function(x) length(x) >= 3) 
+0

+1 Merci, tous deux fonctionne parfaitement. Je vais utiliser le second, c'est très bien. THX. – charisz

Questions connexes