在Rcpp中使用用户定义的函数(cppFunction)

时间:2013-02-18 23:29:56

标签: r rcpp

我在r:

中有一个用户定义的函数
blacksch<-function(s_0,k,sigma,r,t)
{
  d1=(log(s_0/k) + (r + (sigma^2)/2)*(t))/(sigma*sqrt(t))
  d2=(log(s_0/k) + (r - (sigma^2)/2)*(t))/(sigma*sqrt(t))

  p=(pnorm(-d2)*k*exp(-r*t))-pnorm(-d1)*s_0
}

我想在使用Rcpp和cppFunction编写的c ++代码中使用此函数。我已经阅读了几次文档和示例,但没有成功。

bs_martin<-cppFunction('NumericMatrix compMartin (NumericMatrix st, NumericMatrix dv, double s_0, double k, 
                       double t, double sigma, double r, int steps, int paths, Function blacksch(fun)) {

                       // Ensure RNG scope set
                       RNGScope scope;


        int min_bs_step=0;
        double minbsvalue=0;
        vector<double> u[0]=100.0;
        for(int i=1;i<=paths; i++)
        {
          min_bs_step=0;
          for(int j=1;j<=steps;j++)
          {
            if (dv[i,j]>0 && min_bs_step==0)
            {
                min_bs_step=i;
                minbsvalue=blacksch(s_0,k,sigma,r,t);
            }
            else if (min_bs_step!=0)
            {
                dv[i,j]=1 - minbsvalue;
            }
          }

        }
      return dv;
                       }')

1 个答案:

答案 0 :(得分:1)

我建议如下:

  • 研究我们的文档和示例。我们展示了如何传递函数,即使我们不推荐它(出于明显的性能原因,从C ++调用R并不是很快)。

  • 如果您的某些复杂示例不起作用,请尝试较小的示例。在一天结束时,您可能只想要一个接收两个数字的测试人员并将其传递给提供的功能。

  • 最后:你真的想在C ++中使用blacksch。所有统计函数都以相同的名称提供。