-
-
Notifications
You must be signed in to change notification settings - Fork 209
/
Rmath.h
241 lines (203 loc) · 15.6 KB
/
Rmath.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*-
//
// Rmath.h: Rcpp R/C++ interface class library -- Wrappers for R's Rmath API
//
// Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois
//
// This file is part of Rcpp.
//
// Rcpp is free software: you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 2 of the License, or
// (at your option) any later version.
//
// Rcpp is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Rcpp. If not, see <http://www.gnu.org/licenses/>.
#ifndef Rcpp_Rmath_h
#define Rcpp_Rmath_h
namespace R {
// see R's Rmath.h as well as Writing R Extension
/* Random Number Generators */
inline double norm_rand(void) { return ::norm_rand(); }
inline double unif_rand(void) { return ::unif_rand(); }
inline double exp_rand(void) { return ::exp_rand(); }
/* Normal Distribution */
inline double dnorm(double x, double mu, double sigma, int lg) { return ::Rf_dnorm4(x, mu, sigma, lg); }
inline double pnorm(double x, double mu, double sigma, int lt, int lg) { return ::Rf_pnorm5(x, mu, sigma, lt, lg); }
inline double qnorm(double p, double mu, double sigma, int lt, int lg) { return ::Rf_qnorm5(p, mu, sigma, lt, lg); }
inline double rnorm(double mu, double sigma) { return ::Rf_rnorm(mu, sigma); }
inline void pnorm_both(double x, double *cum, double *ccum, int lt, int lg) { return ::Rf_pnorm_both(x, cum, ccum, lt, lg); }
/* Uniform Distribution */
inline double dunif(double x, double a, double b, int lg) { return ::Rf_dunif(x, a, b, lg); }
inline double punif(double x, double a, double b, int lt, int lg) { return ::Rf_punif(x, a, b, lt, lg); }
inline double qunif(double p, double a, double b, int lt, int lg) { return ::Rf_qunif(p, a, b, lt, lg); }
inline double runif(double a, double b) { return ::Rf_runif(a, b); }
/* Gamma Distribution */
inline double dgamma(double x, double shp, double scl, int lg) { return ::Rf_dgamma(x, shp, scl, lg); }
inline double pgamma(double x, double alp, double scl, int lt, int lg) { return ::Rf_pgamma(x, alp, scl, lt, lg); }
inline double qgamma(double p, double alp, double scl, int lt, int lg) { return ::Rf_qgamma(p, alp, scl, lt, lg); }
inline double rgamma(double a, double scl) { return ::Rf_rgamma(a, scl); }
inline double log1pmx(double x) { return ::Rf_log1pmx(x); }
inline double log1pexp(double x) { return ::log1pexp(x); } // <-- ../nmath/plogis.c
inline double lgamma1p(double a) { return ::Rf_lgamma1p(a); }
inline double logspace_add(double lx, double ly) { return ::Rf_logspace_add(lx, ly); }
inline double logspace_sub(double lx, double ly) { return ::Rf_logspace_sub(lx, ly); }
/* Beta Distribution */
inline double dbeta(double x, double a, double b, int lg) { return ::Rf_dbeta(x, a, b, lg); }
inline double pbeta(double x, double p, double q, int lt, int lg) { return ::Rf_pbeta(x, p, q, lt, lg); }
inline double qbeta(double a, double p, double q, int lt, int lg) { return ::Rf_qbeta(a, p, q, lt, lg); }
inline double rbeta(double a, double b) { return ::Rf_rbeta(a, b); }
/* Lognormal Distribution */
inline double dlnorm(double x, double ml, double sl, int lg) { return ::Rf_dlnorm(x, ml, sl, lg); }
inline double plnorm(double x, double ml, double sl, int lt, int lg) { return ::Rf_plnorm(x, ml, sl, lt, lg); }
inline double qlnorm(double p, double ml, double sl, int lt, int lg) { return ::Rf_qlnorm(p, ml, sl, lt, lg); }
inline double rlnorm(double ml, double sl) { return ::Rf_rlnorm(ml, sl); }
/* Chi-squared Distribution */
inline double dchisq(double x, double df, int lg) { return ::Rf_dchisq(x, df, lg); }
inline double pchisq(double x, double df, int lt, int lg) { return ::Rf_pchisq(x, df, lt, lg); }
inline double qchisq(double p, double df, int lt, int lg) { return ::Rf_qchisq(p, df, lt, lg); }
inline double rchisq(double df) { return ::Rf_rchisq(df); }
/* Non-central Chi-squared Distribution */
inline double dnchisq(double x, double df, double ncp, int lg) { return ::Rf_dnchisq(x, df, ncp, lg); }
inline double pnchisq(double x, double df, double ncp, int lt, int lg) { return ::Rf_pnchisq(x, df, ncp, lt, lg); }
inline double qnchisq(double p, double df, double ncp, int lt, int lg) { return ::Rf_qnchisq(p, df, ncp, lt, lg); }
inline double rnchisq(double df, double lb) { return ::Rf_rnchisq(df, lb); }
/* F Distibution */
inline double df(double x, double df1, double df2, int lg) { return ::Rf_df(x, df1, df2, lg); }
inline double pf(double x, double df1, double df2, int lt, int lg) { return ::Rf_pf(x, df1, df2, lt, lg); }
inline double qf(double p, double df1, double df2, int lt, int lg) { return ::Rf_qf(p, df1, df2, lt, lg); }
inline double rf(double df1, double df2) { return ::Rf_rf(df1, df2); }
/* Student t Distibution */
inline double dt(double x, double n, int lg) { return ::Rf_dt(x, n, lg); }
inline double pt(double x, double n, int lt, int lg) { return ::Rf_pt(x, n, lt, lg); }
inline double qt(double p, double n, int lt, int lg) { return ::Rf_qt(p, n, lt, lg); }
inline double rt(double n) { return ::Rf_rt(n); }
/* Binomial Distribution */
inline double dbinom(double x, double n, double p, int lg) { return ::Rf_dbinom(x, n, p, lg); }
inline double pbinom(double x, double n, double p, int lt, int lg) { return ::Rf_pbinom(x, n, p, lt, lg); }
inline double qbinom(double p, double n, double m, int lt, int lg) { return ::Rf_qbinom(p, n, m, lt, lg); }
inline double rbinom(double n, double p) { return ::Rf_rbinom(n, p); }
/* Multnomial Distribution */
inline void rmultinom(int n, double* prob, int k, int* rn) { return ::rmultinom(n, prob, k, rn); }
/* Cauchy Distribution */
inline double dcauchy(double x, double lc, double sl, int lg) { return ::Rf_dcauchy(x, lc, sl, lg); }
inline double pcauchy(double x, double lc, double sl, int lt, int lg) { return ::Rf_pcauchy(x, lc, sl, lt, lg); }
inline double qcauchy(double p, double lc, double sl, int lt, int lg) { return ::Rf_qcauchy(p, lc, sl, lt, lg); }
inline double rcauchy(double lc, double sl) { return ::Rf_rcauchy(lc, sl); }
/* Exponential Distribution */
inline double dexp(double x, double sl, int lg) { return ::Rf_dexp(x, sl, lg); }
inline double pexp(double x, double sl, int lt, int lg) { return ::Rf_pexp(x, sl, lt, lg); }
inline double qexp(double p, double sl, int lt, int lg) { return ::Rf_qexp(p, sl, lt, lg); }
inline double rexp(double sl) { return ::Rf_rexp(sl); }
/* Geometric Distribution */
inline double dgeom(double x, double p, int lg) { return ::Rf_dgeom(x, p, lg); }
inline double pgeom(double x, double p, int lt, int lg) { return ::Rf_pgeom(x, p, lt, lg); }
inline double qgeom(double p, double pb, int lt, int lg) { return ::Rf_qgeom(p, pb, lt, lg); }
inline double rgeom(double p) { return ::Rf_rgeom(p); }
/* Hypergeometric Distibution */
inline double dhyper(double x, double r, double b, double n, int lg) { return ::Rf_dhyper(x, r, b, n, lg); }
inline double phyper(double x, double r, double b, double n, int lt, int lg) { return ::Rf_phyper(x, r, b, n, lt, lg); }
inline double qhyper(double p, double r, double b, double n, int lt, int lg) { return ::Rf_qhyper(p, r, b, n, lt, lg); }
inline double rhyper(double r, double b, double n) { return ::Rf_rhyper(r, b, n); }
/* Negative Binomial Distribution */
inline double dnbinom(double x, double sz, double pb, int lg) { return ::Rf_dnbinom(x, sz, pb, lg); }
inline double pnbinom(double x, double sz, double pb, int lt, int lg) { return ::Rf_pnbinom(x, sz, pb, lt, lg); }
inline double qnbinom(double p, double sz, double pb, int lt, int lg) { return ::Rf_qnbinom(p, sz, pb, lt, lg); }
inline double rnbinom(double sz, double pb) { return ::Rf_rnbinom(sz, pb); }
#if R_VERSION >= R_Version(3, 1, 2)
inline double dnbinom_mu(double x, double sz, double mu, int lg) { return ::Rf_dnbinom_mu(x, sz, mu, lg); }
inline double pnbinom_mu(double x, double sz, double mu, int lt, int lg) { return ::Rf_pnbinom_mu(x, sz, mu, lt, lg); }
inline double qnbinom_mu(double x, double sz, double mu, int lt, int lg) { return ::Rf_qnbinom_mu(x, sz, mu, lt, lg); }
//inline double rnbinom_mu(double sz, double mu) { return ::Rf_rnbinom_mu(sz, mu); }
#endif
/* Poisson Distribution */
inline double dpois(double x, double lb, int lg) { return ::Rf_dpois(x, lb, lg); }
inline double ppois(double x, double lb, int lt, int lg) { return ::Rf_ppois(x, lb, lt, lg); }
inline double qpois(double p, double lb, int lt, int lg) { return ::Rf_qpois(p, lb, lt, lg); }
inline double rpois(double mu) { return ::Rf_rpois(mu); }
/* Weibull Distribution */
inline double dweibull(double x, double sh, double sl, int lg) { return ::Rf_dweibull(x, sh, sl, lg); }
inline double pweibull(double x, double sh, double sl, int lt, int lg) { return ::Rf_pweibull(x, sh, sl, lt, lg); }
inline double qweibull(double p, double sh, double sl, int lt, int lg) { return ::Rf_qweibull(p, sh, sl, lt, lg); }
inline double rweibull(double sh, double sl) { return ::Rf_rweibull(sh, sl); }
/* Logistic Distribution */
inline double dlogis(double x, double lc, double sl, int lg) { return ::Rf_dlogis(x, lc, sl, lg); }
inline double plogis(double x, double lc, double sl, int lt, int lg) { return ::Rf_plogis(x, lc, sl, lt, lg); }
inline double qlogis(double p, double lc, double sl, int lt, int lg) { return ::Rf_qlogis(p, lc, sl, lt, lg); }
inline double rlogis(double lc, double sl) { return ::Rf_rlogis(lc, sl); }
/* Non-central Beta Distribution */
inline double dnbeta(double x, double a, double b, double ncp, int lg) { return ::Rf_dnbeta(x, a, b, ncp, lg); }
inline double pnbeta(double x, double a, double b, double ncp, int lt, int lg) { return ::Rf_pnbeta(x, a, b, ncp, lt, lg); }
inline double qnbeta(double p, double a, double b, double ncp, int lt, int lg) { return ::Rf_qnbeta(p, a, b, ncp, lt, lg); }
inline double rnbeta(double a, double b, double np) { return ::Rf_rnbeta(a, b, np); }
/* Non-central F Distribution */
inline double dnf(double x, double df1, double df2, double ncp, int lg) { return ::Rf_dnf(x, df1, df2, ncp, lg); }
inline double pnf(double x, double df1, double df2, double ncp, int lt, int lg) { return ::Rf_pnf(x, df1, df2, ncp, lt, lg); }
inline double qnf(double p, double df1, double df2, double ncp, int lt, int lg) { return ::Rf_qnf(p, df1, df2, ncp, lt, lg); }
/* Non-central Student t Distribution */
inline double dnt(double x, double df, double ncp, int lg) { return ::Rf_dnt(x, df, ncp, lg); }
inline double pnt(double x, double df, double ncp, int lt, int lg) { return ::Rf_pnt(x, df, ncp, lt, lg); }
inline double qnt(double p, double df, double ncp, int lt, int lg) { return ::Rf_qnt(p, df, ncp, lt, lg); }
/* Studentized Range Distribution */
inline double ptukey(double q, double rr, double cc, double df, int lt, int lg) { return ::Rf_ptukey(q, rr, cc, df, lt, lg); }
inline double qtukey(double p, double rr, double cc, double df, int lt, int lg) { return ::Rf_qtukey(p, rr, cc, df, lt, lg); }
/* Wilcoxon Rank Sum Distribution */
inline double dwilcox(double x, double m, double n, int lg) { return ::Rf_dwilcox(x, m, n, lg); }
inline double pwilcox(double q, double m, double n, int lt, int lg) { return ::Rf_pwilcox(q, m, n, lt, lg); }
inline double qwilcox(double x, double m, double n, int lt, int lg) { return ::Rf_qwilcox(x, m, n, lt, lg); }
inline double rwilcox(double m, double n) { return ::Rf_rwilcox(m, n); }
/* Wilcoxon Signed Rank Distribution */
inline double dsignrank(double x, double n, int lg) { return ::Rf_dsignrank(x, n, lg); }
inline double psignrank(double x, double n, int lt, int lg) { return ::Rf_psignrank(x, n, lt, lg); }
inline double qsignrank(double x, double n, int lt, int lg) { return ::Rf_qsignrank(x, n, lt, lg); }
inline double rsignrank(double n) { return ::Rf_rsignrank(n); }
/* Gamma and Related Functions */
inline double gammafn(double x) { return ::Rf_gammafn(x); }
inline double lgammafn(double x) { return ::Rf_lgammafn(x); }
inline double lgammafn_sign(double x, int *sgn) { return ::Rf_lgammafn_sign(x, sgn); }
inline void dpsifn(double x, int n, int kode, int m, double *ans, int *nz, int *ierr) { return ::Rf_dpsifn(x, n, kode, m, ans, nz, ierr); }
inline double psigamma(double x, double deriv) { return ::Rf_psigamma(x, deriv); }
inline double digamma(double x) { return ::Rf_digamma(x); }
inline double trigamma(double x) { return ::Rf_trigamma(x); }
inline double tetragamma(double x) { return ::Rf_tetragamma(x); }
inline double pentagamma(double x) { return ::Rf_pentagamma(x); }
inline double beta(double a, double b) { return ::Rf_beta(a, b); }
inline double lbeta(double a, double b) { return ::Rf_lbeta(a, b); }
inline double choose(double n, double k) { return ::Rf_choose(n, k); }
inline double lchoose(double n, double k) { return ::Rf_lchoose(n, k); }
/* Bessel Functions */
inline double bessel_i(double x, double al, double ex) { return ::Rf_bessel_i(x, al, ex); }
inline double bessel_j(double x, double al) { return ::Rf_bessel_j(x, al); }
inline double bessel_k(double x, double al, double ex) { return ::Rf_bessel_k(x, al, ex); }
inline double bessel_y(double x, double al) { return ::Rf_bessel_y(x, al); }
inline double bessel_i_ex(double x, double al, double ex, double *bi) { return ::Rf_bessel_i_ex(x, al, ex, bi); }
inline double bessel_j_ex(double x, double al, double *bj) { return ::Rf_bessel_j_ex(x, al, bj); }
inline double bessel_k_ex(double x, double al, double ex, double *bk) { return ::Rf_bessel_k_ex(x, al, ex, bk); }
inline double bessel_y_ex(double x, double al, double *by) { return ::Rf_bessel_y_ex(x, al, by); }
/* General Support Functions */
#ifndef HAVE_HYPOT
inline double hypot(double a, double b) { return ::Rf_hypot(a, b); }
#endif
inline double pythag(double a, double b) { return ::Rf_pythag(a, b); }
#ifndef HAVE_EXPM1
inline double expm1(double x); /* = exp(x)-1 {care for small x} */ { return ::Rf_expm1(x); }
#endif
#ifndef HAVE_LOG1P
inline double log1p(double x); /* = log(1+x) {care for small x} */ { return ::Rf_log1p(x); }
#endif
inline int imax2(int x, int y) { return ::Rf_imax2(x, y); }
inline int imin2(int x, int y) { return ::Rf_imin2(x, y); }
inline double fmax2(double x, double y) { return ::Rf_fmax2(x, y); }
inline double fmin2(double x, double y) { return ::Rf_fmin2(x, y); }
inline double sign(double x) { return ::Rf_sign(x); }
inline double fprec(double x, double dg) { return ::Rf_fprec(x, dg); }
inline double fround(double x, double dg) { return ::Rf_fround(x, dg); }
inline double fsign(double x, double y) { return ::Rf_fsign(x, y); }
inline double ftrunc(double x) { return ::Rf_ftrunc(x); }
}
#endif