如果长度,从列表中的列表中删除列表

cha*_*isz 3 if-statement r list remove-if

我有这个清单:

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")))
Run Code Online (Sandbox Code Playgroud)

我想删除长度小于三(<3)的元素(列表).我尝试了双重lapply来获得[[i]] [[j]]和< - NULL,但是我只获得了带有NULL的列表.像这样:

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

感谢您的任何帮助...

Aru*_*run 7

这个怎么样?

lapply(a, function(x) x[sapply(x, length) >= 3])
Run Code Online (Sandbox Code Playgroud)

要么

lapply(a, Filter, f = function(x) length(x) >= 3)
Run Code Online (Sandbox Code Playgroud)