Pregunta

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...

¿Fue útil?

Solución

How about this?

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

or

lapply(a, Filter, f = function(x) length(x) >= 3)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top