我想知道一个元素是否属于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风格的功能呢?还是两个人的组合?
答案 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