哪个()函数用于R中的列表

时间:2014-06-07 15:40:42

标签: r text-mining

这应该很简单,但我希望找到如何返回包含一个元素的列表的索引。例如,在下面的列表中,我们想要找到所有索引,其中" a"是一个元素。我希望函数返回索引1.

> x = list(c("a", "b"), "c")

> x
[[1]]
[1] "a" "b"

[[2]]
[1] "c"

> which(x=="a")

integer(0)

当然,哪个()在这里不起作用。任何帮助将不胜感激!

2 个答案:

答案 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表达式返回一个逻辑向量,表示列表中每个元素都存在awhich返回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