2013-07-23 132 views
3

我有这样的列表:从列表中列表中删除列表中,如果长度

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

我想移除的元素(列表),其长度小于3(< 3)。我尝试了两次获得一个[[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} 
    }) 
}) 

感谢您的帮助......

回答

7

这个怎么样?

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

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

+1谢谢你,都完美的作品。我会用第二个,非常好。谢谢。 – charisz