我希望找出一种快速的方法来找出一个数字是否包含在一个向量中,以便将它传递给if语句。到目前为止,我提出的最好的是以下内容:
a = 5
b = 1:10
if(length(which(a==5)) > 0){
#Do something...
}
我确信有更快的方法可以做到这一点。
答案 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
是标量时才有效。