如何在列表中找到长度为1的对象的索引?

时间:2018-02-05 17:39:09

标签: r

我有一个对象列表,每个对象的长度各不相同(包含1到n个元素)。如何找到长度为1的对象的索引?

我试过了:

lapply(list,function(x) x[which(length(x)==1)])

这可以正确识别长度为1的对象,但不会在列表中给出表示其索引的数值。

2 个答案:

答案 0 :(得分:3)

您可以使用lengths()函数获取列表中每个元素的长度,将结果与逻辑索引的结果进行比较,然后用which()换行以获取数字索引。

which(lengths(list) == 1)

可重复的例子:

set.seed(1)
(x <- replicate(3, sample(5, sample(3))))
# [[1]]
# [1] 5
#
# [[2]]
# [1] 4
#
# [[3]]
# [1] 1 3

which(lengths(x) == 1)
# [1] 1 2

答案 1 :(得分:0)

可能会有轻微的语法错误,但一般来说这就是你可以做的:

#instantiate indexes vector here
list.length <- length(list)
for (i in 1:list.length) {
    if (length(list[i])==1) {
        indexes <- c(indexes, i)
    }
}