R :: dexp的参数化

Jef*_*eff 1 r rcpp

我花了一些时间试图在我的代码中找到一个错误,这个错误对于R::dexp函数来说是一个不寻常的(至少对我而言)参数化.例如:

cppFunction("
  double my_dexp(double x, double lambda, double is_log) {
    return R::dexp(x, lambda, is_log);
  }
")

> my_dexp(4.5, 2.5, FALSE)
[1] 0.06611956
> dexp(4.5, 2.5, FALSE)
[1] 3.251824e-05
Run Code Online (Sandbox Code Playgroud)

这里我可以看到他们所使用的定义:

double R::dexp(double x, double sl, int lg)
Run Code Online (Sandbox Code Playgroud)

但我无法找出sl代表什么.我不确定这是否记录在任何地方 - 所以希望这篇文章能够警告那些使用了像我这样的功能的人,以及任何人可以帮助确定使用了什么参数化,以及为什么.

csg*_*pie 5

如果你看一下函数定义dexp,

R> dexp
function (x, rate = 1, log = FALSE) 
.Call(C_dexp, x, 1/rate, log)
Run Code Online (Sandbox Code Playgroud)

你会看到用参数dexp调用C函数.这就是镜像.在Rcp中,它们总是使用与R本身在C级别相同的参数化,这可能与R级别不同.C_dexp1/rateR::dexp

这意味着

R> my_dexp(4.5, 1/2.5, FALSE) - dexp(4.5, 2.5, FALSE)
[1] 0
Run Code Online (Sandbox Code Playgroud)

如果你看一下指数函数的维基百科页面,你会看到基于速率参数lambda的倒数的替代参数化.在该参数化中,参数beta=1/lambda扮演生存参数的角色.因此,系统的预期生存持续时间是beta时间单位.