if ステートメントに数値を渡す目的で、数値がベクター内に含まれているかどうかをすばやく確認する方法を見つけたいと考えていました。これまでのところ、私が思いついた最高のものは次のとおりです。
a = 5
b = 1:10
if(length(which(a==5)) > 0){
#Do something...
}
これを行うより速い方法があると確信しています。
if ステートメントに数値を渡す目的で、数値がベクター内に含まれているかどうかをすばやく確認する方法を見つけたいと考えていました。これまでのところ、私が思いついた最高のものは次のとおりです。
a = 5
b = 1:10
if(length(which(a==5)) > 0){
#Do something...
}
これを行うより速い方法があると確信しています。
最も速い方法は、次を使用すること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
がスカラーの場合にのみ機能することに注意してください。