快速确定数字是否在R中的向量内

时间:2013-08-01 03:07:09

标签: r if-statement

我希望找出一种快速的方法来找出一个数字是否包含在一个向量中,以便将它传递给if语句。到目前为止,我提出的最好的是以下内容:

a = 5
b = 1:10

if(length(which(a==5)) > 0){

#Do something...

}

我确信有更快的方法可以做到这一点。

2 个答案:

答案 0 :(得分:3)

使用%in%

if (a %in% b) ...

这可能不一定比你所获得的更快(因为它只是match调用的语法糖)但它肯定更紧凑和透明。

答案 1 :(得分:2)

最快的方法是使用any(a == b)

library(microbenchmark)
options(digits = 3)

a <- 5
b <- 1:10

microbenchmark(
  length(which(a == b)) > 0, 
  a %in% b,
  any(a == b)
)
# Unit: nanoseconds
#                       expr  min   lq median   uq  max neval
#  length(which(a == b)) > 0 1328 1414   1472 1587 5765   100
#                   a %in% b 1519 1690   1773 1864 6665   100
#                any(a == b)  662  728    786  844 6205   100

但我同意a %in% b更清楚,并且保存1μs不太可能对您的代码产生明显影响。

另请注意,这些方法中的任何一种都只适用于字符和整数,而不适用于浮点数,并且仅在a是标量时才有效。