Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Rcpp中检测和省略std向量中的na值_C++_R_Rcpp - Fatal编程技术网

C++ 在Rcpp中检测和省略std向量中的na值

C++ 在Rcpp中检测和省略std向量中的na值,c++,r,rcpp,C++,R,Rcpp,我有一个std::向量;在检查其中是否存在Na值(如果存在Na值,则明显移除Na值)之后,需要对其元素进行求和。我必须在Rcpp里做。现在,对于Rcpp中的数值向量(NumericVector);这非常简单,代码如下所示: cppFunction(" double res ( NumericVector x){ NumericVector v = x[! is_na(x)]; return sum(v); }

我有一个std::向量;在检查其中是否存在Na值(如果存在Na值,则明显移除Na值)之后,需要对其元素进行求和。我必须在Rcpp里做。现在,对于Rcpp中的数值向量(NumericVector);这非常简单,代码如下所示:

    cppFunction("
       double res ( NumericVector x){
         NumericVector v = x[! is_na(x)];
         return sum(v);
        }
        ")
。所以对于向量“x”,它很容易得出如下的和:

       x<- c(NaN,1,2)
       res(x)
       [1] 3
x您应该能够使用(也可以打开)将Rcpp Sugar的向量化习惯用法(它与R一样对NA测试进行了向量化)带到任何iterable容器中,因此也可以使用STL容器

有关将不同向量类型和类组合成单个标量表达式的示例,请参见示例:

// [[Rcpp::export]]
Rcpp::NumericVector example_manually_hooked() {

    // We manually hooked std::list in to RcppHoney so we'll create one
    std::list< int > l;
    l.push_back(1); l.push_back(2); l.push_back(3); l.push_back(4); l.push_back(5);

    // std::vector is already hooked in to RcppHoney in default_hooks.hpp so
    // we'll create one of those too
    std::vector< int > v(l.begin(), l.end());

    // And for good measure, let's create an Rcpp::NumericVector which is
    // also hooked by default
    Rcpp::NumericVector v2(v.begin(), v.end());

    // Now do some weird operations incorporating std::vector, std::list,
    // Rcpp::NumericVector and some RcppHoney functions and return it.  The
    // return value will be equal to the following R snippet:
    //     v <- 1:5
    //     result <- 42 + v + v + log(v) - v - v + sqrt(v) + -v + 42

    // We can store our result in any of RcppHoney::LogicalVector,
    // RcppHoney::IntegerVector, or RcppHoney::NumericVector and simply return
    // it to R.  These classes inherit from their Rcpp counterparts and add a
    // new constructor.  The only copy of the data, in this case, is when we
    // assign our expression to retval.  Since it is then a "native" R type,
    // returning it is a shallow copy.  Alternatively we could write this as:
    //     return Rcpp::wrap(1 + v + RcppHoney::log(v) - v - 1
    //         + RcppHoney::sqrt(v) + -v2);

    RcppHoney::NumericVector retval
        =  42 + l + v + RcppHoney::log(v) - v - l + RcppHoney::sqrt(v) + -v2
            + 42;
    return retval;
}
/[[Rcpp::export]]
Rcpp::NumericVector示例\u手动\u钩住(){
//我们手动将std::list连接到RcppHoney,因此我们将创建一个
标准::列表l;
l、 推回(1);l.推回(2);l.推回(3);l.推回(4);l.推回(5);
//std::vector已经挂接到默认的\u hooks.hpp中的RcppHoney,所以
//我们也将创建其中一个
向量v(l.begin(),l.end());
//为了更好地衡量,让我们创建一个Rcpp::NumericVector,它是
//默认情况下也挂接
Rcpp::NumericVector v2(v.begin(),v.end());
//现在结合std::vector、std::list做一些奇怪的操作,
//Rcpp::NumericVector和一些RcppHoney函数并返回它
//返回值将等于以下R代码段:
//v您应该能够使用(也启用)将Rcpp Sugar的向量化习惯用法(与R一样,它将NA测试向量化)带到任何可移植容器中,因此也可以使用STL容器

有关将不同向量类型和类组合成单个标量表达式的示例,请参见示例:

// [[Rcpp::export]]
Rcpp::NumericVector example_manually_hooked() {

    // We manually hooked std::list in to RcppHoney so we'll create one
    std::list< int > l;
    l.push_back(1); l.push_back(2); l.push_back(3); l.push_back(4); l.push_back(5);

    // std::vector is already hooked in to RcppHoney in default_hooks.hpp so
    // we'll create one of those too
    std::vector< int > v(l.begin(), l.end());

    // And for good measure, let's create an Rcpp::NumericVector which is
    // also hooked by default
    Rcpp::NumericVector v2(v.begin(), v.end());

    // Now do some weird operations incorporating std::vector, std::list,
    // Rcpp::NumericVector and some RcppHoney functions and return it.  The
    // return value will be equal to the following R snippet:
    //     v <- 1:5
    //     result <- 42 + v + v + log(v) - v - v + sqrt(v) + -v + 42

    // We can store our result in any of RcppHoney::LogicalVector,
    // RcppHoney::IntegerVector, or RcppHoney::NumericVector and simply return
    // it to R.  These classes inherit from their Rcpp counterparts and add a
    // new constructor.  The only copy of the data, in this case, is when we
    // assign our expression to retval.  Since it is then a "native" R type,
    // returning it is a shallow copy.  Alternatively we could write this as:
    //     return Rcpp::wrap(1 + v + RcppHoney::log(v) - v - 1
    //         + RcppHoney::sqrt(v) + -v2);

    RcppHoney::NumericVector retval
        =  42 + l + v + RcppHoney::log(v) - v - l + RcppHoney::sqrt(v) + -v2
            + 42;
    return retval;
}
/[[Rcpp::export]]
Rcpp::NumericVector示例\u手动\u钩住(){
//我们手动将std::list连接到RcppHoney,因此我们将创建一个
标准::列表l;
l、 推回(1);l.推回(2);l.推回(3);l.推回(4);l.推回(5);
//std::vector已经挂接到默认的\u hooks.hpp中的RcppHoney,所以
//我们也将创建其中一个
向量v(l.begin(),l.end());
//为了更好地衡量,让我们创建一个Rcpp::NumericVector,它是
//默认情况下也挂接
Rcpp::NumericVector v2(v.begin(),v.end());
//现在结合std::vector、std::list做一些奇怪的操作,
//Rcpp::NumericVector和一些RcppHoney函数并返回它
//返回值将等于以下R代码段:

//v分配一些中间向量很容易,但效率不高。最好使用循环,它也适用于std::vector。这里有一些替代想法:分配一些中间向量很容易,但效率不高。最好使用循环,它也适用于std::vector。一些替代方案这里有一些积极的想法: