R从列表列表中删除空(nchar = 0)元素

R remove empty (nchar = 0) elements from list of lists

我有一个列表 lists/vectors:

list(c("cat1", "cat6", ""), c("cat5", "cat3", "cat4"), c("cat6", 
"cat4", ""), c("cat5", "cat1", "cat2", "cat4"), c("cat6", "cat3", 
"cat2"))

我正在寻找一种优雅的方法来删除 nchar=0 的内部元素,例如第一个列表中的第三个元素(值为“”)。 我试过:

l[lapply(l,length)>0] 

但这不适用于内部元素长度,而是适用于外部列表元素长度。 预期输出为:

list(c("cat1", "cat6"), c("cat5", "cat3", "cat4"), c("cat6", 
    "cat4"), c("cat5", "cat1", "cat2", "cat4"), c("cat6", "cat3", 
    "cat2")) 

感谢任何帮助

我们可以使用 nzchar 为 non-blank/blank 元素创建 TRUE/FALSE 的逻辑索引,然后对 list 元素进行子集化。

lapply(l, function(x) x[nzchar(x)])

或者另一种选择是 setdiff 从每个 list 元素中删除属于 '' 的元素。

lapply(l, setdiff, '')

length函数会算'',所以对去掉''.

帮助不大