我需要NA
从使用 RcppEigen 实现的函数内的向量中有效地删除值。我当然可以使用for
循环来做到这一点,但我想知道是否有更有效的方法。
这是一个例子:
library(RcppEigen)
library(inline)
incl <- '
using Eigen::Map;
using Eigen::VectorXd;
typedef Map<VectorXd> MapVecd;
'
body <- '
const MapVecd x(as<MapVecd>(xx)), y(as<MapVecd>(yy));
VectorXd x1(x), y1(y);
int k(0);
for (int i = 0; i < x.rows(); ++i) {
if (x.coeff(i)==x.coeff(i) && y.coeff(i)==y.coeff(i)) {
x1(k) = x.coeff(i);
y1(k) = y.coeff(i);
k++;
};
};
x1.conservativeResize(k);
y1.conservativeResize(k);
return Rcpp::List::create(Rcpp::Named("x") = x1,
Rcpp::Named("y") = y1);
'
na.omit.cpp <- cxxfunction(signature(xx = "Vector", yy= "Vector"),
body, "RcppEigen", incl)
na.omit.cpp(c(1.5, NaN, 7, NA), c(7.0, 1, NA, 3))
#$x
#[1] 1.5
#
#$y
#[1] 7
在我的用例中,我需要在循环中执行大约一百万次(在 Rcpp 函数内),并且向量可能很长(假设有 1000 个元素)。
PS:我还调查了使用 查找所有NA
/NaN
值的路线x.array()==x.array()
,但无法找到使用 Eigen 子集的结果的方法。