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

5
我有一个列表,其中包含多个列表/向量:
list(c("cat1", "cat6", ""), c("cat5", "cat3", "cat4"), c("cat6", 
"cat4", ""), c("cat5", "cat1", "cat2", "cat4"), c("cat6", "cat3", 
"cat2"))

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

我已经尝试过:

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

希望能得到您的帮助


2
你可以尝试使用sapply(l, function(x) x[nchar(x) > 0]) - Gopala
1个回答

6

我们可以使用 nzchar 函数创建逻辑索引,用于判断非空/空元素并对 list 元素进行子集操作。

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

另一个选项是使用setdiff从每个list元素中删除''元素。
lapply(l, setdiff, '')

length函数会计算'',因此在删除''方面并没有太大帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接