检查元素是否属于向量并在R中获取其索引

时间:2014-05-20 06:56:05

标签: r vector element

我想知道一个元素是否属于R中的向量。我可以用%in%来做,对吧?但是,我也想知道这个元素的所有例子的索引,我也想把这些索引作为一个向量。例如,

x<-c(1,3,5,5,7,5,8,9,0,5)

y< - myCoolFunction (x, 5)

y应该相等[3,4,6,10],因为其中5是x。

我知道怎么做算法明智(有ifs和循环等),我的问题是:有没有一个优雅的R风格的功能呢?还是两个人的组合?

2 个答案:

答案 0 :(得分:4)

您可以使用which

x <- c(1,3,5,5,7,5,8,9,0,5)
which(x == 5)
# [1]  3  4  6 10

或使用%in%表示多个值:

which(x %in% c(1,3))
# [1] 1 2

在一个功能中:

myCoolFunction = function(vec, value) which(vec %in% value)
myCoolFunction(x, 5)

虽然这实际上使myCoolFunction成为which的别名(语法略有不同)。

答案 1 :(得分:2)

信不信由你,你也可以使用grep,不需要引号。但是,它比大型矢量慢得多。对于短暂的人来说很不错......

> x <- c(1, 3, 5, 5, 7, 5, 8, 9, 0, 5)
> grep(5, x)
## [1]  3  4  6 10

which方法的另一个变体使用is.element。可能更容易阅读。

> which(is.element(x, 5))
## [1]  3  4  6 10