A<-(FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE)
我想要一种有效的方法来查找A是否为TRUE并在找到TRUE时停止。
答案 0 :(得分:2)
如果您只是想知道A
是否包含任何TRUE
值,您可以使用any()
:
> A <- c(FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE)
> any(A)
[1] TRUE
答案 1 :(得分:1)
我们可以使用which
查找TRUE的元素,选择第一个,对其进行排序并将“A”的子集
A[seq_len(which(A)[1])]
A <- c(FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE)
答案 2 :(得分:0)
我的第一个反应是考虑sum(A) != 0
,但后来去了microbenchmark
,结果是:
# install.packages("microbenchmark")
require(microbenchmark)
microbenchmark("sum" = {A <- sample(c(TRUE, FALSE), 1e6, TRUE); sum(A) != 0}, "any" = {A <- sample(c(TRUE, FALSE), 1e6, TRUE); any(A)}, "seq_len" = {A <- sample(c(TRUE, FALSE), 1e6, TRUE); A[seq_len(which(A)[1])]}, times = 100L)
Unit: milliseconds
expr min lq mean median uq max neval
sum 72.98672 75.10716 86.33333 76.88114 78.57807 216.4087 100
any 68.59519 72.35810 78.29730 72.50796 72.83563 229.6932 100
seq_len 80.41055 84.41244 104.30460 87.82726 90.15668 223.8297 100
所以肯定any
似乎是最有效的(除了Rcpp实现之外)