Rcpp函数检查是否缺少值

 Shirley韻 发布于 2022-12-18 08:08

我正在将基于R的代码转换为基于Rcpp的代码.我的职责是:

NumericMatrix createMatrixOfLinkRatiosC(NumericMatrix matr, double threshold4Clean) {
int i,j; 
NumericMatrix myMatr(matr.nrow(),matr.ncol());
myMatr=matr;
....;

}

我想处理对threshold4Clean缺失的函数的调用,但我没有找到怎么办...任何帮助将不胜感激.

2 个回答
  • R有两个NaNNA(实际上是一种特殊的NaN)用于表示缺失值.这一点很重要,因为有许多函数可以检查值是否为NaN-y(NANaN):

    来自R/C API的函数的一些真值表(注意令人沮丧的缺乏一致性)

    +---------------------+
    | Function | NaN | NA |
    +---------------------+
    | ISNAN    |  t  | t  |
    | R_IsNaN  |  t  | f  |
    | ISNA     |  f  | t  |
    | R_IsNA   |  f  | t  |
    +---------------------+
    

    和Rcpp:

    +-------------------------+
    | Function     | NaN | NA |
    +-------------------------+
    | Rcpp::is_na  |  t  | t  |
    | Rcpp::is_nan |  t  | f  |
    +-------------------------+
    

    并从R解释器(注意:Rcpp尝试匹配此,而不是R/C API):

    +---------------------+
    | Function | NaN | NA |
    +---------------------+
    | is.na    |  t  | t  |
    | is.nan   |  t  | f  |
    +---------------------+
    

    不幸的是,这是一个令人困惑的景观,但这应该给你一些权力.

    2022-12-18 08:11 回答
  • 既RCPP和RcppArmadillo具有谓词来测试NA,NaN(的R扩展)和Inf.

    这是一个简短的RcppArmadillo示例:

    #include <RcppArmadillo.h>
    
    // [[Rcpp::depends(RcppArmadillo)]]
    
    // [[Rcpp::export]]
    arma::mat foo(int n, double threshold=NA_REAL) {
      arma::mat M = arma::zeros<arma::mat>(n,n);
      if (arma::is_finite(threshold)) M = M + threshold;
      return M;
    }
    
    /*** R
    foo(2)
    foo(2, 3.1415)
    ***/
    

    我们初始化一个零矩阵,并测试参数.如果它是有限的(即不是NAInfNaN),那么我们添加该值.如果您愿意,您也可以单独测试各种可能性.

    这会产生所需的结果:没有第二个参数的默认值NAapply,我们得到一个零的矩阵.

    R> Rcpp::sourceCpp("/tmp/giorgio.cpp")
    
    R> foo(2)
         [,1] [,2]
    [1,]    0    0
    [2,]    0    0
    
    R> foo(2, 3.1415)
           [,1]   [,2]
    [1,] 3.1415 3.1415
    [2,] 3.1415 3.1415
    R> 
    

    2022-12-18 08:11 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有