# 32 SWIG and R

- Bugs
- Using R and SWIG
- General policy
- Language conventions
- C++ classes
- Enumerations

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:

- Garbage collection of created objects
- C Array wrappings
- tested on UNIX only, how well or badly it works on windows is not known

## 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

    dyn.load('example.so')
    source('example_wrap.S')

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.