Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove list from lists in list if length

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){
  lapply(seq(length(a[[1]])),function(j){
    if(length(a[[i]][[j]]) < 3) {a[[i]][[j]] <- NULL}
  })
})

Thank you for any help...

like image 716
charisz Avatar asked Feb 16 '23 19:02

charisz


1 Answers

How about this?

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

or

lapply(a, Filter, f = function(x) length(x) >= 3)
like image 75
Arun Avatar answered Feb 23 '23 12:02

Arun