Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.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中的非有限值_C++_R_Rcpp - Fatal编程技术网

C++ 在不创建向量的情况下检查Rcpp中的非有限值

C++ 在不创建向量的情况下检查Rcpp中的非有限值,c++,r,rcpp,C++,R,Rcpp,我还没有编写Rcpp代码来执行与时间序列相关的计算: #include <RcppArmadillo.h> // [[Rcpp::depends(RcppArmadillo)]] // [[Rcpp::export]] double AmiA(arma::vec ts, int n, double cf, double h, double g) { double sumA = log(cf); double temp; for (int i=1; i <

我还没有编写Rcpp代码来执行与时间序列相关的计算:

#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]

// [[Rcpp::export]]
double AmiA(arma::vec ts, int n, double cf, double h, double g) {


  double sumA = log(cf);
  double temp;


  for (int i=1; i < n; i++) {
    temp = cf;
    for (int j=0; j<i; j++) {
      temp +=  pow(ts[i]-ts[j]+h, g);

    }
    sumA += log(temp);

  }

  return(sumA);
}


如何在不创建向量并检查该向量的值的情况下检查这些值?任何想法都将受到欢迎。

简而言之,您可以使用
arma::is_finite()
检查值是否是有限的,例如非
NaN
Inf
-Inf
注意:如果只使用Rcpp,请使用
bool finiteness=Rcpp::is_finite(x)[0]
as
Rcpp::is_finite()
返回一个
LogicalVector

示例实现:

#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]

// [[Rcpp::export]]
double AmiA(arma::vec ts, int n, double cf, double h, double g) {


    double sumA = log(cf);
    double temp;


    for (int i=1; i < n; i++) {
        temp = cf;
        for (int j=0; j<i; j++) {

            // Compute value
            result = pow(ts[i]-ts[j]+h, g);

            // Guard against non-finite values
            if(arma::is_finite(result)){
                temp +=  result
            }

        }
        sumA += log(temp);

    }

    return(sumA);
}
#包括
//[[Rcpp::depends(RcppArmadillo)]]
//[[Rcpp::导出]]
双AmiA(arma::向量ts,整数n,双cf,双h,双g){
双sumA=对数(cf);
双温;
对于(int i=1;i对于(int j=0;j@coatless这里,ts=sort(runif(100));cf=1.4;h=0.5;g=2。3@coatless,为了产生一个可复制的例子,我给出了那个例子。但是如果我得到NaN值,我怎么能在不创建向量的情况下检查它呢,如果数据中缺少值或
x
log()中为负值,则会触发此操作
@coatless,您是否建议创建一个向量并填充每个条目,检查它是否给出了有限值,然后只对有限值求和?您可以在将结果添加到缩减变量之前检查结果,例如
result=pow(ts[i]-ts[j]+h,g);if(is_finite(result)){temp+=result;}
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]

// [[Rcpp::export]]
double AmiA(arma::vec ts, int n, double cf, double h, double g) {


    double sumA = log(cf);
    double temp;


    for (int i=1; i < n; i++) {
        temp = cf;
        for (int j=0; j<i; j++) {

            // Compute value
            result = pow(ts[i]-ts[j]+h, g);

            // Guard against non-finite values
            if(arma::is_finite(result)){
                temp +=  result
            }

        }
        sumA += log(temp);

    }

    return(sumA);
}