在包含TRUE / FALSE的向量中搜索TRUE

时间:2017-06-06 07:45:07

标签: r

A<-(FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE)

我想要一种有效的方法来查找A是否为TRUE并在找到TRUE时停止。

3 个答案:

答案 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实现之外)