这应该很简单,但我希望找到如何返回包含一个元素的列表的索引。例如,在下面的列表中,我们想要找到所有索引,其中" a"是一个元素。我希望函数返回索引1.
> x = list(c("a", "b"), "c")
> x
[[1]]
[1] "a" "b"
[[2]]
[1] "c"
> which(x=="a")
integer(0)
当然,哪个()在这里不起作用。任何帮助将不胜感激!
答案 0 :(得分:4)
您需要遍历列表元素并检查每个集合中的元素。
sapply(x, function(e) is.element('a', e))
## [1] TRUE FALSE
which(sapply(x, function(e) is.element('a', e)))
## [1] 1
sapply
表达式返回一个逻辑向量,表示列表中每个元素都存在a
,which
返回TRUE
元素的索引。
答案 1 :(得分:0)
我不清楚你想要如何格式化结果。由于有两个列表元素,如果您只需要将索引作为向量,则很难确定当您有更长的列表时匹配来自哪个列表元素。你可以在这里使用which
。只需写下
sapply(x, function(y) which(y == "a"))
或者您可以使用grep
,它返回匹配模式的索引。在这里,我将在未列出的列表中显示它,然后在列表上进行迭代。
> grep("a", unlist(x))
# [1] 1
> sapply(x, function(y) grep("a", y))
# [[1]]
# [1] 1
# [[2]]
# integer(0)
您还可以使用%in%
查看"a"
出现的确切位置。这将返回一个逻辑向量。
> lapply(x, `%in%`, "a") ## or lapply(x, `==`, "a")
# [[1]]
# [1] TRUE FALSE
# [[2]]
# [1] FALSE