Take the 2-minute tour ×

I have this list:

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

I'd like to remove the elements (lists), which length are less than three (<3). I tried double lapply to get a[[i]][[j]] and <- NULL, but I got lists only with NULL. Like this:

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

Thank you for any help...

share|improve this question
add comment

1 Answer

up vote 3 down vote accepted

How about this?

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


lapply(a, Filter, f = function(x) length(x) >= 3)
share|improve this answer
+1 @flodel. very nice use of Filter. –  Arun Jul 23 '13 at 22:42
+1 Thank you, both works perfectly. I'll use the second one, it's very nice. THX. –  charisz Jul 24 '13 at 7:27
add comment

Your Answer


