无法使用标量调用Rcpp的阶乘函数

Lin*_*Lin 2 r rcpp

我在R中定义了一个c ++函数,它是:

library(Rcpp)
cppFunction(
'double foo(double t, int k) {
    double x = t/factorial(k);
}')
Run Code Online (Sandbox Code Playgroud)

当我在R中运行此函数时,收到错误:

file59b051c6b334.cpp:7:25:错误:没有匹配函数来调用'factorial'

NumericVector x = t/factorial(k);

                    ^~~~~~~~~ 
Run Code Online (Sandbox Code Playgroud)

/Library/Frameworks/R.framework/Versions/3.3/Resources/library/Rcpp/include/Rcpp/sugar/functions/math.h:59:19:

注意:候选函数并不可行:没有已知的转换,从"诠释"到"SEXP"(又名"SEXPREC*")的第一个参数VECTORIZED_MATH_1(阶乘,:: RCPP ::内部::阶乘)

/Library/Frameworks/R.framework/Versions/3.3/Resources/library/Rcpp/include/Rcpp/sugar/block/Vectorized_Math.h:91:9:

注意:从宏'VECTORIZED_MATH_1'扩展

    __NAME__( SEXP x){ return __NAME__( NumericVector( x ) ) ; }
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解决这个问题吗?谢谢!

coa*_*ess 5

问题有两个:

  1. factorial功能是VECTORIZED_MATH_1需要Rcpp::NumericVector参数的一部分.
  2. 你错过了一个return陈述.

使用:

Rcpp::cppFunction(
    'Rcpp::NumericVector foo(double t, Rcpp::NumericVector k) {
      Rcpp::NumericVector x = t/factorial(k);
      return x;
    }')
Run Code Online (Sandbox Code Playgroud)