2

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

a = 5
b = 1:10

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

#Do something...

}

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

4

2 回答 2

3

使用%in%

if (a %in% b) ...

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

于 2013-08-01T04:09:40.923 回答
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于标量。

于 2013-08-01T11:59:39.320 回答