我花了一些时间试图在我的代码中找到一个错误,这个错误对于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代表什么.我不确定这是否记录在任何地方 - 所以希望这篇文章能够警告那些使用了像我这样的功能的人,以及任何人可以帮助确定使用了什么参数化,以及为什么.
如果你看一下函数定义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时间单位.