有没有一种更快的方法可以使用基数 R 找到大向量中第一个不是 NA 的值?

问题描述 投票:0回答:1

就像问题所说的那样。当向量大小非常大(> 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
r performance bigdata na
1个回答
1
投票

即使第一个非

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
© www.soinside.com 2019 - 2024. All rights reserved.