/* * R : A Computer Language for Statistical Data Analysis * Copyright (C) 1998-2007 Robert Gentleman, Ross Ihaka * and the R Development Core Team * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This program 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 Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, a copy is available at * http://www.r-project.org/Licenses/ * * * Application Routines, typically implemented in ../appl/ * ---------------------------------------------- ======== */ /* This header file contains routines which are in the R API and ones which are not. Those which are not can be used only at the user's risk and may change or disappear in a future release of R. */ #ifndef R_APPLIC_H_ #define R_APPLIC_H_ #include #include /* F77_... */ #include #ifdef __cplusplus extern "C" { #endif /* Entry points in the R API */ /* appl/integrate.c */ typedef void integr_fn(double *x, int n, void *ex); /* vectorizing function f(x[1:n], ...) -> x[] {overwriting x[]}. */ void Rdqags(integr_fn f, void *ex, double *a, double *b, double *epsabs, double *epsrel, double *result, double *abserr, int *neval, int *ier, int *limit, int *lenw, int *last, int *iwork, double *work); void Rdqagi(integr_fn f, void *ex, double *bound, int *inf, double *epsabs, double *epsrel, double *result, double *abserr, int *neval, int *ier, int *limit, int *lenw, int *last, int *iwork, double *work); /* appl/rcont.c */ void rcont2(int *nrow, int *ncol, int *nrowt, int *ncolt, int *ntotal, double *fact, int *jwork, int *matrix); /* main/optim.c */ typedef double optimfn(int, double *, void *); typedef void optimgr(int, double *, double *, void *); void vmmin(int n, double *b, double *Fmin, optimfn fn, optimgr gr, int maxit, int trace, int *mask, double abstol, double reltol, int nREPORT, void *ex, int *fncount, int *grcount, int *fail); void nmmin(int n, double *Bvec, double *X, double *Fmin, optimfn fn, int *fail, double abstol, double intol, void *ex, double alpha, double bet, double gamm, int trace, int *fncount, int maxit); void cgmin(int n, double *Bvec, double *X, double *Fmin, optimfn fn, optimgr gr, int *fail, double abstol, double intol, void *ex, int type, int trace, int *fncount, int *grcount, int maxit); void lbfgsb(int n, int m, double *x, double *l, double *u, int *nbd, double *Fmin, optimfn fn, optimgr gr, int *fail, void *ex, double factr, double pgtol, int *fncount, int *grcount, int maxit, char *msg, int trace, int nREPORT); void samin(int n, double *pb, double *yb, optimfn fn, int maxit, int tmax, double ti, int trace, void *ex); /* Entry points NOT in the R API */ /* appl/bakslv.c : hidden */ void bakslv(double *, int *, int *, double *, int *, int *, double *, int *, int *); /* appl/binning.c : hidden */ void bincode (double *x, int *n, double *breaks, int *nb, int *code, int *right, int *include_border, int *naok); void bincount(double *x, int *n, double *breaks, int *nb, int *count, int *right, int *include_border, int *naok); /* appl/ch2inv.f */ void F77_NAME(ch2inv)(double *x, int *ldx, int *n, double *v, int *info); /* appl/chol.f Used in nlme */ void F77_NAME(chol)(double *a, int *lda, int *n, double *v, int *info); /* appl/cpoly.c : hidden */ void R_cpolyroot(double *opr, double *opi, int *degree, double *zeror, double *zeroi, Rboolean *fail); /* More `Complex Polynomial Utilities' could be exported: polyev(...) errev(...) cpoly_cauchy(...) cpoly_scale(...) cdivid(...) */ /* appl/cumsum.c : non-API, used in package DCluster */ void R_cumsum(double *, int *, double *, double *); /* appl/eigen.f */ int F77_NAME(cg)(int *nm, int *n, double *ar, double *ai, double *wr, double *wi, int *matz, double *zr, double *zi, double *fv1, double *fv2, double *fv3, int *ierr); int F77_NAME(ch)(int *nm, int *n, double *ar, double *ai, double *w, int *matz, double *zr, double *zi, double *fv1, double *fv2, double *fm1, int *ierr); int F77_NAME(rg)(int *nm, int *n, double *a, double *wr, double *wi, int *matz, double *z, int *iv1, double *fv1, int *ierr); /* used in nlme */ int F77_NAME(rs)(int *nm, int *n, double *a, double *w, int *matz, double *z, double *fv1, double *fv2, int *ierr); /* appl/fft.c */ /* NOTE: The following functions use GLOBAL (static) variables !! * ---- some of R-core think that this should be changed, * which will INEVITABLY extend the argument lists ...! */ /* non-API, but used by package RandomFields */ void fft_factor(int n, int *pmaxf, int *pmaxp); Rboolean fft_work(double *a, double *b, int nseg, int n, int nspn, /* TRUE: success */ int isn, double *work, int *iwork); /* appl/fmin.c : non-API, but used in package ape */ double Brent_fmin(double ax, double bx, double (*f)(double, void *), void *info, double tol); /* appl/interv.c: also in Utils.h */ /* used in packages gam and mda */ int F77_SUB(interv)(double *xt, int *n, double *x, Rboolean *rightmost_closed, Rboolean *all_inside, int *ilo, int *mflag); void find_interv_vec(double *xt, int *n, double *x, int *nx, int *rightmost_closed, int *all_inside, int *indx); /* used in package eco */ int findInterval(double *xt, int n, double x, Rboolean rightmost_closed, Rboolean all_inside, int ilo, int *mflag); /* appl/lbfgsb.c */ void setulb(int n, int m, double *x, double *l, double *u, int *nbd, double *f, double *g, double factr, double *pgtol, double *wa, int * iwa, char *task, int iprint, int *lsave, int *isave, double *dsave); /* appl/machar.c */ void machar(int *ibeta, int *it, int *irnd, int *ngrd, int *machep, int *negep, int *iexp, int *minexp, int *maxexp, double *eps, double *epsneg, double *xmin, double *xmax); /* appl/maxcol.c: also in Utils.h Used in package MNP */ void R_max_col(double *matrix, int *nr, int *nc, int *maxes, int *ties_meth); /* appl/pretty.c */ double R_pretty0(double *lo, double *up, int *ndiv, int min_n, double shrink_sml, double high_u_fact[], int eps_correction, int return_bounds); void R_pretty(double *lo, double *up, int *ndiv, int *min_n, double *shrink_sml, double *high_u_fact, int *eps_correction); /* appl/rowsum.c */ void R_rowsum(int *dim, double *na_x, double *x, double *group); /* appl/stem.c */ Rboolean stemleaf(double *x, int *n, double *scale, int *width, double *atom); /* appl/strsignif.c */ void str_signif(char *x, int *n, const char **type, int *width, int *digits, const char **format, const char **flag, char **result); /* appl/tabulate.c : non-API, used in package ape */ void R_tabulate(int *x, int *n, int *nbin, int *ans); /* appl/uncmin.c : */ /* type of pointer to the target and gradient functions */ typedef void (*fcn_p)(int, double *, double *, void *); /* type of pointer to the hessian functions */ typedef void (*d2fcn_p)(int, int, double *, double *, void *); void fdhess(int n, double *x, double fval, fcn_p fun, void *state, double *h, int nfd, double *step, double *f, int ndigit, double *typx); /* used in nlme */ void optif9(int nr, int n, double *x, fcn_p fcn, fcn_p d1fcn, d2fcn_p d2fcn, void *state, double *typsiz, double fscale, int method, int iexp, int *msg, int ndigit, int itnlim, int iagflg, int iahflg, double dlt, double gradtl, double stepmx, double steptl, double *xpls, double *fpls, double *gpls, int *itrmcd, double *a, double *wrk, int *itncnt); void optif0(int nr, int n, double *x, fcn_p fcn, void *state, double *xpls, double *fpls, double *gpls, int *itrmcd, double *a, double *wrk); /* appl/zeroin.c : non API, but used in packages ape and qtl */ double R_zeroin(double ax, double bx, double (*f)(double, void *), void *info, double *Tol, int *Maxit); /* R_zeroin2() is faster for "expensive" f(), in those typical cases where * f(ax) and f(bx) are available anyway : */ double R_zeroin2(double ax, double bx, double fa, double fb, double (*f)(double, void *), void *info, double *Tol, int *Maxit); /* ALL appl/.f [semi-automatically by * f2c -A -P *.f; cat *.P > all.h and editing] */ /* This is not in the applications but in the BLAS, and defined in Lapack.h extern int F77_NAME(lsame)(const char *, const char *); */ /* LINPACK routines also declared in Linpack.h void F77_NAME(dpoco)(double *a, int *lda, int *n, double *rcond, double *z__, int *info); void F77_NAME(dpodi)(double *a, int *lda, int *n, double *det, int *job); void F77_NAME(dpofa)(double *a, int *lda, int *n, int *info); void F77_NAME(dposl)(double *a, int *lda, int *n, double *b); void F77_NAME(dqrdc)(double *x, int *ldx, int *n, int *p, double *qraux, int *jpvt, double *work, int *job); void F77_NAME(dqrsl)(double *x, int *ldx, int *n, int *k, double *qraux, double *y, double *qy, double *qty, double *b, double *rsd, double *xb, int *job, int *info); void F77_NAME(dsvdc)(double *x, int *ldx, int *n, int *p, double *s, double *e, double *u, int *ldu, double *v, int *ldv, double *work, int *job, int *info); void F77_NAME(dtrco)(double *t, int *ldt, int *n, double *rcond, double *z__, int *job); void F77_NAME(dtrsl)(double *t, int *ldt, int *n, double *b, int *job, int *info); */ /* find qr decomposition, dqrdc2() is basis of R's qr(), also used by nlme */ void F77_NAME(dqrdc2)(double *x, int *ldx, int *n, int *p, double *tol, int *rank, double *qraux, int *pivot, double *work); void F77_NAME(dqrls)(double *x, int *n, int *p, double *y, int *ny, double *tol, double *b, double *rsd, double *qty, int *k, int *jpvt, double *qraux, double *work); /* appl/dqrutl.f: interfaces to dqrsl */ void F77_NAME(dqrqty)(double *x, int *n, int *k, double *qraux, double *y, int *ny, double *qty); void F77_NAME(dqrqy)(double *x, int *n, int *k, double *qraux, double *y, int *ny, double *qy); void F77_NAME(dqrcf)(double *x, int *n, int *k, double *qraux, double *y, int *ny, double *b, int *info); void F77_NAME(dqrrsd)(double *x, int *n, int *k, double *qraux, double *y, int *ny, double *rsd); void F77_NAME(dqrxb)(double *x, int *n, int *k, double *qraux, double *y, int *ny, double *xb); #ifdef __cplusplus } #endif #endif /* R_APPLIC_H_ */