就像问题所说的那样。当向量大小非常大(> 10M 条目)时,使用基本 R 是否有更快的方法来执行下面的操作?
下面的代码可以工作,但是当向量大小增大时,由于显而易见的原因,它会变得很慢。在这个特定的示例中,for 循环可能会更快,但如果第一个 NA 值距离向量的开头很远,则可能不会...
set.seed(1)
x <- c(rep(NA, 3), sample(c(T,F), size=5e7, replace=T))
min(which(!is.na(x))) #4
即使第一个非
Rcpp
值不是特别接近开始,NA
for 循环也应该很快:
Rcpp::cppFunction("
int which_non_na(NumericVector x) {
int n = x.size();
for (int i = 0; i < n; ++i) {
if (!NumericVector::is_na(x[i])) {
return i + 1; // +1 for 1-indexing in R
}
}
return NA_INTEGER; // if no non-NA values are found
}
")
which_non_na(x) # 4