R :: dexp的参数化

时间:2015-08-25 17:50:07

标签: 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

here我可以看到他们使用的定义是:

double R::dexp(double x, double sl, int lg)

但我还没有找到sl代表什么。我不确定这是否记录在任何地方 - 所以希望这篇帖子能够警告那些使用了像我这样的功能的人,以及是否有人可以帮助使用什么参数化,以及为什么。

1 个答案:

答案 0 :(得分:5)

如果查看dexp的函数定义,

R> dexp
function (x, rate = 1, log = FALSE) 
.Call(C_dexp, x, 1/rate, log)

您会看到dexp使用参数C_dexp调用C函数1/rate。这是R::dexp镜像的内容。在Rcp中,它们总是使用与R本身在C级别相同的参数化,这可能与R级别不同。

这意味着

R> my_dexp(4.5, 1/2.5, FALSE) - dexp(4.5, 2.5, FALSE)
[1] 0

如果你查看exponential function上的维基百科页面,你会看到基于速率参数lambda的倒数的替代参数化。在此参数化中,参数beta=1/lambda扮演生存参数的角色。因此,系统的预期生存期为beta个时间单位。