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

R从列表列表中删除空(nchar=0)元素,r,list,nested-lists,sapply,R,List,Nested Lists,Sapply,我有一个列表/向量列表: 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"))
我正在寻找一种优雅的方法来删除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")) 

我们可以使用
nzhar
为非空白/空白元素创建TRUE/FALSE逻辑索引,然后将
列表
元素子集

lapply(l, function(x) x[nzchar(x)])
lapply(l, setdiff, '')
或者另一个选项是
setdiff
,从每个
列表
元素中删除
'
元素

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

length
函数将计数
'
,因此它在删除
'

时不会有太大帮助。您可以尝试
sapply(l,函数(x)x[nchar(x)>0])