Simple interpolation functions designed to be used from C. There is
essentially no R support in this package, save code designed to be used
by the package’s own testing. cinterpolate is designed to
be used in package code only and modification for use outside of a
package is not explicitly supported.
cinterpolate is now on CRAN and can be installed
with
install.packages("cinterpolate")After that, install with
install.packages(
"orderly2",
repos = c("https://mrc-ide.r-universe.dev", "https://cloud.r-project.org"))If you install from source, this package requires a fortran compiler because it uses LAPACK and BLAS, despite being only C code.
apt-get install gfortran depending on your platform#include <cinterpolate/cinterpolate.h>Allocate an object to perform interpolation with. nx and
x are the size and values of the function to be
interpolated, while ny is the number of functions to be
simultaneously (but independently) interpolateed and y is
the values for these. If ny > 1, then the values of
y are as an R matrix with nx rows and
ny columns (the first nx values are the first
function, the second nx are the second, and so on). The
final two are booleans: fail_on_extrapolate throws an error
if extrapolation is requested, and auto_free uses
R_alloc() rather than Calloc allowing
automatic cleanup.
void *obj = cinterpolate_alloc(type, nx, ny, x, y,
fail_on_extrapolate, auto_free);With the interpolation function, an input value of xout
and given some storage yout of length ny,
determine f(xout) with
cinterpolate_eval(xout, obj, yout);Once done the object must be freed with
cinterpolate_free(obj);
Somewhere in the package you must include cinterpolate.c
as
#include <cinterpolate/cinterpolate.h>but this must be included only once or linking will
fail. If you only use the interpolation in one place, you can use
cinterpolate.c rather than cinterpolate.h. If
you use interpolation in more than once place, I recommend a file
src/cinterpolate.c containing
#include <cinterpolate/cinterpolate.c>Be sure to include in your DESCRIPTION a line
LinkingTo: cinterpolate
cinterpolate takes advantage of BLAS for matrix
multiplication, so you may need a Makevars that includes
PKG_LIBS = ${LAPACK_LIBS} ${BLAS_LIBS} ${FLIBS}
See inst/example for a full
example of using cinterpolate within a package
MIT + file LICENSE © Imperial College of Science, Technology and Medicine
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.