我希望找到一种快速的方法来确定一个数字是否包含在一个向量中,以便将它传递给一个 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...
}
我确信有一种更快的方法可以做到这一点。
使用%in%
:
if (a %in% b) ...
这可能不一定比你得到的更快match
(因为它只是一个调用的语法糖),但它肯定更紧凑和透明。
最快的方法是使用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
于标量。