32 SWIG and R

R is a GPL'ed open source statistical and plotting environment. Information about R can be found at www.r-project.org. The R binding are under active development and are extremely experimental. Not all features have been implemented and the API is not stable.

32.1 Bugs

Currently the following features are not implemented or broken:

32.2 Using R and SWIG

To use R and SWIG in C mode, execute the following commands where example_func.c is the name of the file with the functions in them

swig -r -o example,c example.i
PKG_LIBS="example_func.c" R CMD SHLIB example.c

The corresponding comments for C++ mode are

swig -c++ -r -o example.cpp example.i
PKG_LIBS="example_func.cxx" R CMD SHLIB example.cpp

Note that R is sensitive to the name of the file and to the file extension in C and C++ mode. The name of the wrapper file must be the name of the library. Also in C++ mode, the file extension must be cpp rather than cxx for the R compile command to recognize it.

The commands produce two files. A dynamic shared object file called example.so and an R wrapper file called example_wrap.S. To load these files, start up R and type in the following commands


These two files can be loaded in any order

32.3 General policy

The general policy of the module is to treat the C/C++ as a basic wrapping over the underlying functions and rely on the R type system to provide R syntax.

32.4 Language conventions

getitem and setitem use C++ conventions (i.e. zero based indices). [<- and [ are overloaded to allow for R syntax (one based indices and slices)

32.5 C++ classes

C++ objects are implemented as external pointer objects with the class being the mangled name of the class. The C++ classes are encapsulated as an SEXP with an external pointer type. The class is the mangled name of the class. The nice thing about R is that is allows you to keep track of the pointer object which removes the necessity for a lot of the proxy class baggage you see in other languages.

32.6 Enumerations

enumerations are characters which are then converted back and forth to ints before calling the C routines. All of the enumeration code is done in R.