我有一个如下列表:
l <- list(c(1,2,3), integer(), c(4,5), integer(), 7)
作为回报我想要一个如下的矢量:
c(2, 4)
列表l
没有元素的位置。我可以通过以下方式解决这个问题:
which(unlist(lapply(c(1:(length(l))), function(x) { length(l[[x]]) })) == 0)
甚至是:
as.vector(which(unlist(lapply(l, length)) == 0))
但我觉得我有点复杂。有没有使用这么多函数的简单方法来获取此列表中空位置的索引?
答案 0 :(得分:3)
您应该使用lengths
函数,该函数给出列表中所有元素的长度:
which(lengths(l)==0)
#[1] 2 4
lengths
功能有点&#34;新&#34; (如果我没记错的话,从R 3.2.0起可用)。如果您有较旧的R版本,这也有效(但速度较慢):
which(sapply(l,length)==0)