[R] how to call a C program from R function
Thomas Petzoldt
thpe at hhbio.wasser.tu-dresden.de
Thu Aug 28 16:23:49 CEST 2003
Martin Olivier wrote:
> Hi all,
>
> I would like to call a C program from R function. I tried to use the
> .C() function
> without success. I need a very simple example (such as the hello
> program) to understand
Do you want to call a C program (executable) or a shared library? If you
want to run a compiled program simply use system() or shell()
> how it works. Could you give a such example?
> (I use the 1.7.1 Version of R with linux)
>
> Does it work in the case of a C++ program instead of a C programm?
If you want to call a shared library (or DLL), please look into the
Manual "writing R extensions" and look for the "convolve example".
For a very simple "hello-function" see the "C++" example below. Please
check if you have installed the correct compiler on Linux and look into
the manual how to compile a shared library. On Linux it is:
R CMD SHLIB test.cpp
Thomas P.
-----------------------------------------------------------
A simple example, but there are better in the docs ;-) e.g. building a
package.
===========================================================
// File test.cpp:
#include <R.h>
#include <Rinternals.h>
extern "C" {
void testarr(int* n, double* x) {
for (int i = 0; i < *n; i++) {
x[i] = 2 * i;
}
}
}
===========================================================
## file test.R
dyn.load("test.so")
testarr <- function(x) {
.C("testarr", as.integer(length(x)), x=as.double(x))$x
}
print(testarr(1:10))
dyn.unload("test.so")
More information about the R-help
mailing list