2

if ステートメントに数値を渡す目的で、数値がベクター内に含まれているかどうかをすばやく確認する方法を見つけたいと考えていました。これまでのところ、私が思いついた最高のものは次のとおりです。

a = 5
b = 1:10

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

#Do something...

}

これを行うより速い方法があると確信しています。

4

2 に答える 2

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 に答える