R从列表列表

时间:2016-02-17 07:31:56

标签: 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,就像第一个列表中的第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")) 

任何帮助表示赞赏

1 个答案:

答案 0 :(得分:3)

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

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

或其他选项setdiff可从每个''元素中删除list元素。

lapply(l, setdiff, '')

length功能会计算'',因此在删除''时没有多大帮助。