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
函数会算''
,所以对去掉''
.
帮助不大
我有一个列表 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
函数会算''
,所以对去掉''
.