swig/Doc/Manual/R.html
William S Fulton ca43827077 Minor html updates
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@9681 626c5289-ae23-0410-ae9c-e8d60b6d4f22
2007-04-17 22:59:08 +00:00

161 lines
4 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>SWIG and R</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body bgcolor="#ffffff">
<H1><a name="R_nn1"></a>32 SWIG and R</H1>
<!-- INDEX -->
<div class="sectiontoc">
<ul>
<li><a href="#R_nn2">Bugs</a>
<li><a href="#R_nn3">Using R and SWIG</a>
<li><a href="#R_nn4">Precompiling large R files</a>
<li><a href="#R_nn5">General policy</a>
<li><a href="#R_language_conventions">Language conventions</a>
<li><a href="#R_nn6">C++ classes</a>
<li><a href="#R_nn7">Enumerations</a>
</ul>
</div>
<!-- INDEX -->
<p>
R is a GPL'ed open source statistical and plotting environment.
Information about R can be found at <a
href="http://www.r-project.org/">www.r-project.org</a>.
The R bindings are under active development. They have been used to
compile and run an R interface to QuantLib running on Mandriva Linux
with gcc, and testing on other platforms is appreciated.
</p>
<H2><a name="R_nn2"></a>32.1 Bugs</H2>
<p>
Currently the following features are not implemented or broken:
</p>
<ul>
<li>Garbage collection of created objects
<li>C Array wrappings
<li>tested on UNIX only, how well or badly it works on windows is not known
</ul>
<H2><a name="R_nn3"></a>32.2 Using R and SWIG</H2>
<p>
To use R and SWIG in C mode, execute the following commands where
example.c is the name of the file with the functions in them
</p>
<div class="shell">
<pre>
swig -r example.i
PKG_LIBS="example.c" R CMD SHLIB example_wrap.c
</pre>
</div>
<p>
The corresponding comments for C++ mode are
</p>
<div class="shell">
<pre>
swig -c++ -r example.i
PKG_LIBS="example.cxx" R CMD SHLIB example_wrap.cpp
</pre>
</div>
<p>
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.
</p>
<p>
The commands produces two files. A dynamic shared object file called
example_wrap.so and an R wrapper file called example_wrap.R. To load these
files, start up R and type in the following commands
</p>
<div class="shell">
<pre>
dyn.load('example_wrap.so')
source('example_wrap.R')
cacheMetaData(1)
</pre>
</div>
The cacheMetaData(1) will cause R to refresh its object tables.
Without it, inheritance of wrapped objects may fail.
<p>
These two files can be loaded in any order
</p>
<H2><a name="R_nn4"></a>32.3 Precompiling large R files</H2>
In cases where the R file is large, one make save a lot of loading
time by precompiling the R wrapper. This can be done by creating the
file makeRData.R which contains the following
<pre>
source('BigFile_wrap.R')
save(list=ls(all=TRUE),file="BigFile_wrap.RData", compress=TRUE)
q(save="no")
</pre>
This will generate a compiled R file called BigFile_wrap.RData that
will save a large amount of loading time.
<H2><a name="R_nn5"></a>32.4 General policy</H2>
<p>
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.
</p>
<H2><a name="R_language_conventions"></a>32.5 Language conventions</H2>
<p>
getitem and setitem use C++ conventions (i.e. zero based indices). [<-
and [ are overloaded to allow for R syntax (one based indices and
slices)
</p>
<H2><a name="R_nn6"></a>32.6 C++ classes</H2>
<p>
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.
</p>
<H2><a name="R_nn7"></a>32.7 Enumerations</H2>
<p>
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.
</p>
</body>
</html>