diff --git a/src/focal_fun.cpp b/src/focal_fun.cpp index b1a0309f..05c7a312 100644 --- a/src/focal_fun.cpp +++ b/src/focal_fun.cpp @@ -46,7 +46,9 @@ std::vector do_focal_fun(std::vector d, Rcpp::NumericMatrix w, s size_t q = 0; for (int j = -wr; j <= wr; j++) { for (int k = -wc; k <= wc; k++) { - x[q] = d[j * ncol + k + i] * w[q]; + if (!std::isnan(w[q])) { + x[q] = d[j * ncol + k + i] * w[q]; + } q++; } } @@ -80,7 +82,9 @@ std::vector do_focal_fun(std::vector d, Rcpp::NumericMatrix w, s size_t q = 0; for (int j = -wr; j <= wr; j++) { for (int k = -wc; k <= wc; k++) { - x[q] = d[j * ncol + k + i] * w[q]; + if (!std::isnan(w[q])) { + x[q] = d[j * ncol + k + i] * w[q]; + } q++; } } diff --git a/src/focal_sum.cpp b/src/focal_sum.cpp index 7311eeba..0be5d897 100644 --- a/src/focal_sum.cpp +++ b/src/focal_sum.cpp @@ -46,12 +46,14 @@ std::vector do_focal_sum(std::vector d, Rcpp::NumericMatrix w, s size_t p = 0; for (int j = -wr; j <= wr; j++) { for (int k = -wc; k <= wc; k++) { - double a = d[j * ncol + k + i]; - if ( !std::isnan(a) ) { - val[i] += a * w[q]; - p++; + if (!std::isnan(w[q])) { + double a = d[j * ncol + k + i]; + if ( !std::isnan(a) ) { + val[i] += a * w[q]; + p++; + } + q++; } - q++; } } if (p==0) { @@ -85,10 +87,12 @@ std::vector do_focal_sum(std::vector d, Rcpp::NumericMatrix w, s val[i] = 0; for (int j = -wr; j <= wr; j++) { for (int k = -wc; k <= wc; k++) { - double a = d[j * ncol + k + i]; - if ( !std::isnan(a) ) { - val[i] += a * w[q]; - p++; + if (!std::isnan(w[q])) { + double a = d[j * ncol + k + i]; + if ( !std::isnan(a) ) { + val[i] += a * w[q]; + p++; + } } q++; } @@ -130,8 +134,10 @@ std::vector do_focal_sum(std::vector d, Rcpp::NumericMatrix w, s for (int j = -wr; j <= wr; j++) { bool jnot0 = j != 0; for (int k = -wc; k <= wc; k++) { - if (jnot0 && (k != 0)) { - val[i] += d[j * ncol + k + i] * w[q]; + if (!std::isnan(w[q])) { + if (jnot0 && (k != 0)) { + val[i] += d[j * ncol + k + i] * w[q]; + } q++; } } @@ -139,7 +145,9 @@ std::vector do_focal_sum(std::vector d, Rcpp::NumericMatrix w, s } else { for (int j = -wr; j <= wr; j++) { for (int k = -wc; k <= wc; k++) { - val[i] += d[j * ncol + k + i] * w[q]; + if (!std::isnan(w[q])) { + val[i] += d[j * ncol + k + i] * w[q]; + } q++; } } @@ -170,7 +178,9 @@ std::vector do_focal_sum(std::vector d, Rcpp::NumericMatrix w, s size_t q = 0; for (int j = -wr; j <= wr; j++) { for (int k = -wc; k <= wc; k++) { - val[i] += d[j * ncol + k + i] * w[q]; + if (!std::isnan(w[q])) { + val[i] += d[j * ncol + k + i] * w[q]; + } q++; } }