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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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
Rcpp程序中的最小值和最大值_R_Rcpp - Fatal编程技术网

Rcpp程序中的最小值和最大值

Rcpp程序中的最小值和最大值,r,rcpp,R,Rcpp,我正在把一个R函数转换成Rcpp函数。这一切都很好,但我在使用标准的最大值和最小值函数时有困难。代码如下: #include <math.h> #include <RcppArmadillo.h> #include <algorithm> #include <iostream> // [[Rcpp::depends(RcppArmadillo)]] using namespace Rcpp; using namespace arma; usin

我正在把一个R函数转换成Rcpp函数。这一切都很好,但我在使用标准的最大值和最小值函数时有困难。代码如下:

#include <math.h>
#include <RcppArmadillo.h>
#include <algorithm>
#include <iostream>

// [[Rcpp::depends(RcppArmadillo)]]

using namespace Rcpp;
using namespace arma;
using namespace std;

double f4RandomC(double x, double a, double b) {
  double out, temp;

  temp=(log( (a*(1-x)) / (a+x) )) /log(b) ;
  out= std::min(1,temp );
  return out;
}
#包括
#包括
#包括
#包括
//[[Rcpp::depends(RcppArmadillo)]]
使用名称空间Rcpp;
使用arma;
使用名称空间std;
双C(双x,双a,双b){
双输出,温度;
温度=(对数((a*(1-x))/(a+x))/log(b);
输出=标准::最小值(1,温度);
返回;
}
返回错误“没有用于调用min(int,&double)的匹配inf函数。如果可能,我希望使用std::library min函数

只需将std::min(1,temp)更改为
std::min(1.0,temp)

它仅定义为一种类型(
T
),而您传递给它的是两种数据类型(
int
double

或者,由于您只是比较两个值,因此可以通过使用三元运算符(
?:
)替换
std::min
)来更简洁地进行比较:

虽然在这种情况下,将
1
更改为
1.0
肯定比(不必要地)定义
intz
要容易得多,以后再将其转换为双精度

通过阅读函数/类定义(与大多数编程语言一样),您可以学到很多东西,而且这些定义都是非常标准的源代码,这通常会使编译器错误看起来不那么神秘

#include <cmath>
#include <Rcpp.h>
// [[Rcpp::export]]
double f4RandomC(double x, double a, double b) {
  double out, temp;

  temp =(log( (a*(1-x)) / (a+x) )) /log(b) ;
  out = std::min(1.0,temp );
  return out;
}
template <class T> const T& min (const T& a, const T& b);
double f4RandomC(double x, double a, double b) {
  double temp;

  temp =(log( (a*(1-x)) / (a+x) )) /log(b) ;
  return temp < 1 ? temp : 1;
}
// [[Rcpp::export]]
double f4RandomC2(double x, double a, double b) {
  double out, temp;
  int z = 1;
  temp =(log( (a*(1-x)) / (a+x) )) /log(b) ;
  out = std::min( static_cast<double>(z),temp );
  return out;
}

// [[Rcpp::export]]
double f4RandomC3(double x, double a, double b) {
  double out, temp;
  int z = 1;
  temp =(log( (a*(1-x)) / (a+x) )) /log(b) ;
  out = std::min<double>( z,temp );
  return out;
}