A simple and efficient access to R from Python

rpy rpy2
This site is hosted by
SourceForge.net Logo


After few months of delay, rpy2-2.3.0 is finally ready for a first release. Significant changes were made in the underlying C code (R objects protected from garbage collection by rpy2 can now be tracked), and there are new visible features such as interface to the R help and a very experimental system to build R graphical devices from Python.

Relase 2.2.2

The version 2.2.2 is out. It fixes a bug when using repr() on a list with a "non-vector" item.

Relase 2.2.0. No, wait a minute. 2.2.1.

The version 2.2.0 was released, followed closely by a version 2.2.1 (fixing an install issue with Python 3)

The source package is available on pypi and sourceforge. Binary builds were almost instantly available for debian, thanks to Dirk, and are now making their way through various Linux or BSD distributions.

Pre-Releases for 2.2.0

Pre-releases for 2.2.0 have started, and are available as snapshots from bitbucket . Latest is 2.2.0-alpha1 but more alphas are expected as the Python 3 port is not yet as stable as one would expect.

Release 2.1.9

A new bugfix release for the 2.1.x series is out. Check the documentation for details

rpy2 2.1.8

Bugfix release in the 2.1.x series. R arrays with a shape of length > 2 where not correctly exposed to numpy. This was fixed in the 2.2.x branch, and backported to 2.1.x.

Calling Python functions from R

Among the new features in the upcoming version 2.2.0, there is the possibility to write in Python the functions to be passed to higher-order R functions. In other words, it is becoming possible to write a Python function and expose it to R in such a way that the embedded R engine can call it.

As an example, let's consider the R function optim() that looks for optimal parameters for a given cost function. The cost function should be passed in the call to optim() as it will be repeatedly called as the parameter space is explored, and it is now possible to write that cost function in Python, as the code below demonstrates it.

from rpy2.robjects.vectors import FloatVector
from rpy2.robjects.packages import importr
import rpy2.rinterface as ri
stats = importr('stats')

# Rosenbrock Banana function as a cost function
# (as in the R man page for optim())
def cost_f(x):
    x1 = x[0]
    x2 = x[1]
    return 100 * (x2 - x1 * x1)**2 + (1 - x1)**2

# wrap the function f so it can be exposed to R
cost_fr = ri.rternalize(cost_f)

# starting parameters
start_params = FloatVector((-1.2, 1))

# call R's optim()
res = stats.optim(start_params, cost_fr)

The example is working verbatim with today's snapshot of the code repository (branch version_2.2.x), although few modifications might be needed in the future. Although this is development code and version 2.2.0 is scheduled to be released some time next year, the documentation already outlines this feature. Early testing is welcome, and issues can be reported on the bitbucket tracker.

Release 2.1.7

After a very short-lived release 2.1.6, a new bugfix release for the 2.1.x series is out. It should definitely fix the build/install issues when libraries are in least expected locations.

R external pointer

In R handling data structures in a foreign language (read C/C++) is done through an external pointer. Those pointer do not obey the pass-by-value rule and are not copied.

The version 2.2.x has a new class rpy2.rinterface.SexpExtPtr to represent those objects. With this, handling from Python such C-level constructs understood by some R packages, using for example ctypes, becomes possible. Further use of this for calling back Python functions from R within the rpy2 system will be tried in the future.

Release 2.1.5

Bugfix release for the 2.1.x series. It only fixes (some of) the issues when building/installing while R libraries are in lesser expected places.

Reflection on R S4 classes

Development for the version 2.2.0 of rpy2 is moving on, and automagic exposure of R S4 classes to Python is almost there.

In practice this means that any class defined in the embedded R can be exposed as a corresponding Python class, with that Python class defined on the fly from the R class definition. Although this is still under development, there is already documentation for how to use it.

rpy2 and Python3

Work from the GSoC fixing compatibility for Python 3 is being merged to the main repository. Installation should now run smoothly when using a fresh version of the code repository:

hg update -C version_2.2.x
python3.1 setup.py install
Rpy2 and matplolib [GSoC news]

The time for the Google Summer of Code project is about to finish, and great things have been happening. Beside the port to Python 3, the older graphical device attempt received (much needed) attention and it is becoming possible to display an R plot inside a matplotlib window. Details are on Greg's blog .

Benchmarking performances, and other Python to R bridges

Python-to-R bridges known to me are in chronological order: RSPython, RPy, rpy2, pyrserve, pyper

Each have its own approach, and likely strength, but disputable claims about either features or performances seem to have appeared. It's time for a full suite of benchmark and comparison of feature list. Stay tuned, and check for the section about performances in the documentation in the meanwhile.

About rpy2 and Microsoft Windows

Since the 2.0.x series, there is no longer any binary for Microsoft Windows distributed. The version in the 2.0.x series was already stripped out of some of the functionalities the UNIX-like systems can enjoy. Patches to compile and binaries were contributed, but there was not much progress regarding features.

Currently, the only blocking issue for having a Windows port is time / resources: a win32 port, and eventually a win64 port, will require sponsorship in order to happen. If you or your organization are interested, please do contact the rpy2 author.

Release 2.1.4

A bug-fix release in the 2.1.x series is out. Details about the changes are in the documentation.

The source package is available on sourceforge and on Pypi (see Section "Download").

Compatibility with Python 3

The Google Summer of Code (GSoC) project is progressing. Work is currently a proof of concept, starting with a code base older than the currently released 2.1.3 or 2.2.0-dev, but it is expected to be merged with 2.2.0-dev in the near future.

The code can currently be found in the code repository for the GSoC, and a the port to the main development will transit through a patch queue for 2.2.0-dev

Branch 2.2.x

The 2.1.x series are now in maintenance mode, and new development is happening in the 2.2.x branch. There is no fixed roadmap or expected release date yet.

Release 2.1.2

rpy2-2.1.2 is out. This release is the second bugfix release in the 2.1.x series. Check the documentation for details about the changes.

rpy2 and Python3

The Google Summer of Code (GSoC) 2010 project to port rpy2 to Python 3 was accepted. If all goes well, rpy2 will work with Python 3 some time after the summer.

More on that will hopefully appear soon.

Release 2.1.1

rpy2-2.1.1 is already out. This release is a bugfix release, adding missing less-frequently used functions in the ggplot2 mapping and instabilities with NA values.

Release 2.1.0

rpy2-2.1.0 is out. This release introduces API-breaking changes when compared to the 2.0.x series, but is expected to significantly improve the intregration of R into Python. A rough guide about how to upgrade code is available in the documentation.

Release 2.1.0-rc

The release candidate for rpy2-2.1.0 is out. Changes since the beta releases address stability and documentation.

Source packages are available as archives on the bitbucket and Sourceforge download page.

Release 2.1.0-beta

Beta release for rpy2-2.1.0. Changes since alpha3 address stability, documentation, and few features.

Source packages are available as tar.gz or zip archives on the bitbucket download page.

Release 2.1.0-alpha3

Third and, if everything goes according to the plan, last alpha release for rpy2-2.1.0.

Changes since alpha2 concern better usability, ability to take slices out of vectors, NA types, robustness on 64bit platforms and when dealing with large integers (Python can switch from int to long, but R cannot).

Source packages are available as tar.gz or zip archives on the bitbucket download page.

Release 2.1.0-alpha2

Progress over the last week, with more documentation, more unit tests, bug fixed, and few new features.

Source packages are available as tar.gz or zip archives on the bitbucket download page.

Release 2.1.0-alpha1

A couple of files were missing from the source package for 2.1.0-alpha (as reported by Dirk Eddelbuettel).

Source packages are available here or there.

Release 2.1.0-alpha

While there are API-breaking changes from rpy2-2.0.x, rpy2-2.1.0 mostly develops the rpy2.robjects layer with features such as:

  • Pickling of R objects
  • Improvements to the rpy_classic emulation of the rpy interface
  • Better representation of R data frames and matrices
  • Convenience wrappers for graphics (grid and ggplot2)
  • R packages exposed as python module-like objects
  • Smart binding of R function parameters

Source packages are available here or there and instructions to install the package are in the documentation.

No binary builds are provided, but feedback on eventual complication when trying to build are welcome. This is hoped to build on OS X (Leopard, Snow Leopard), as well as on win32 (winXP, no experience with Vista or Windows 7).

Release 2.0.8

Rpy2 release 2.0.8 release is a bug in the robjects interface where Python long integers could not be converted to R longs.

Release 2.0.7

Rpy2 release 2.0.7 is fixing bugs reported under MS Windows and with rpy_classic. Details regarding what changed can be found in the file NEWS, as well as online in the documentation.

New branch rpy2-2.1.x-python3

rpy2-2.1.0 is hoped to be somewhat compatible with Python 3, and a new branch was created on the bitbucket repository in order to work on it.

If using the 2.1.x-dev from the code repository, remember to specify that you are after the branch "version_2.1.x".

Growing number of rpy2 packages

rpy2-2.0.x is available from a number of distribution-specific package repositories. Although debian users probably remain first served (thanks to Dirk Eddelbuettel), packaging for other distributions is picking up with Gentoo, Mandriva, openSUSE, RedHat/Fedora, Ubuntu.

Fink and Macports packages are also available for OS X users.

Microsoft Windows users can download binaries for 2.0.x from Sourceforge. Starting with 2.0.6, the binaries are .msi installers.

Release 2.0.6

The release 2.0.6 does not have user-visible changes. Changes adressed issues when buildin under OS X with framework, and under win32. Win32 can again be downloaded from the Sourceforge page.

Release 2.0.5

The release 2.0.5 is mostly fixing two infrequent bugs causing a crash.

Release 2.0.4

The release 2.0.4 is fixing a memory leak present when build R vectors from existing Python sequences, as well as few other minor issues. The complete list of changes is in the documentation.

Release 2.0.3

The release 2.0.3 is fixing limitations in the low-level interface, and introduces a few minor additions.

Release 2.0.2

The release 2.0.2 is fixing some of the few bugs found in 2.0.1

RPy2 at bitbucket

The primary repository for RPy2's source code is now at bitbucket. Propagation of the changes to SF's SVN will be organised soon.

RPy in Debian

Thanks to Dirk Eddelbuettel, rpy2 is now part of Debian.

RPy 2.0.1

Bug-fix Relase for rpy2-2.0. The source package then pre-built binaries for win32 are being uploaded.

The online documentation is here.

RPy 2.0.0

Relase ! rpy2-2.0.0 is out. The source package and pre-built binaries for win32 were made available few days ago.

The online documentation is here.

RPy 2.0.0rc1

The release candidate for rpy2-2.0.0 is out. The source package is available on the sourceforge page. Pre-built binary for win32 should come shortly after.

The online documentation is here.

RPy 2.0.0beta1

The beta release for rpy2 is out. The source package is available on the sourceforge page. Pre-built binary for win32 are also available.

The online documentation is here.

RPy 2.0.0alpha3

A new alpha release for rpy2 is out. The source package is available on the sourceforge page. Unfortunately there is no pre-built binary for win32 at moment, but it should compile (and you could contribute the binary).

The online documentation is here.

RPy 2.0.0alpha2

The third alpha release for rpy2 is out. The source package, and pre-built binaries for win32 are available on the sourceforge page.

RPy 2.0.0alpha1

The second alpha release for rpy2 is out. The source package, and pre-built binaries for win32 are available.

New RPy Documentation Wiki

Thanks to hard work by John Reidel, the RPy manual has been converted into a Wiki. This should make it easer for everyone (especially end users) to contribute to the documentation.

Take a look at http://rpy.wiki.sourceforge.net/Manual+-+Top.

RPy 1.0.2 now available

Hello RPy'ers:

I have just uploaded RPy version 1.0.2cd

New features:

  • The 'Robj' type is now exported.
  • Add simple neural net example.
Bug fixes:
  • Stack checking code was incorrectly disabled on all platforms, corrected so that it is properly included for R 2.3.0 and later everywhere except Win32.
  • Fixes for compatibility with Python 2.4 and later.
  • Updates to debian install files (Dirk Eddelbuettel)
  • Correct simple line plot example in the documentation
  • Minor internal changes to code and tests
  • Automatic build tool now uses 'tail -n 1' instead of 'tail -1' when calling 'R RHOME' to make recent versions of tail happy
  • Add startup options to prevent initialization of console read/write/showfiles which causes problems with R when run without a controlling console.
Other changes:
  • Deletion of R's temporary directory now uses R's own internal function for this task for R versions after 2.4.0.

RPy 1.0.1 now available

Hello RPy'ers:

I have just uploaded RPy version 1.0.1.

CHANGES IN RPY 1.0.1 - 2007-11-29
Bug Fixes:

  • Correct silent termination on load on MS-Windows (really this time!)
  • Improve detection of installed R versions during build process on MS-Windows

RPy 1.0.0 now available

Hello RPy'ers:

I have just uploaded RPy version 1.0.0

New Features:

  • Complete support for NumPy
  • Add new exception types to provide better information on the source of the error:
    • RPyException: Base exception class for all RPy Exceptions
    • RPyTypeConversionException: Error in conversion between R and Python
    • RPyRException Error raised within R (RException is set equal to RPyException for backwards compatibility)
    Bug Fixes:
    • All Numeric and NumPy data types are either properly handled, or an appropriate exception is generated.
    • Properly handle unicode strings.
    • Fix silent failure to start up on Win32
    • Misc improvments to the test code.

RPy 1.0 RC 3 now available

Hello RPy'ers:

I have just uploaded RPy version 1.0 RC 3. Hopefully this will be the last release candidate before 1.0.

This release fixes several bugs, particular those related to new versions of R, including the infamous "C stack limit error" which occured on *nix systems in some contexts, such as resizing X11 windows. This release should work properly with R versions through 2.5.0.

RC3 also introduces support for NumPy.

RPy 0.99 now available

Hello RPy'ers:

I have just uploaded RPy version 0.99.0 . This is intended to serve as a preliminary to a 1.0 release, which I hope to do in about a month's time.

This release fixes several bugs on windows, where the build process has been made dramatically easier, thanks to MinGW's (new?) ability to link directly against DLL's. Please see the file INSTALL.WINDOWS for details.

In addition, the windows builds now work for any released version of R from 2.0.0 through 2.2.1.

New features:

  • Dramatically simplify the build process for Win32: The gcc and ld included in MinGW 5.0.2 can now linking directly against DLL's, removing the need for much of the previous complexity. See INSTALL.WINDOWS to see exactly how easy it now is!
  • It is now possible to use setup.cfg to control various aspects of the build process. 'config.in' contains a template containing all available options and what they do.

Bug fixes

  • RPy compiled with Numeric support will no longer crash when run with Numeric available.
  • 1267731: Crash during import when R is missing from the registry
  • 1247722: Problem using R Wavelets library with RPy
  • 1428256: RPy does not build on OS X, easy fix
  • 1432578: Plotting with RPy crashes Python


  • The rpy.py now communicates RHOME, RVER, RVERSION, RUSER from python to the _rpy module using environment variables. This avoids the need to have duplicate C code to obtain these values, and makes things both more maintainable and more robust.
RPy now using Subversion
The RPy source code has been migrated from CVS to Subversion. See the SF Project Subversion page for access information.
RPy 0.4.6 now available

Bug fixes

  • Some unit tests don't properly restore the default conversion mode, causing following tests to fail. Short term fix: reset the default mode in testall.py before running each test.
  • Fix bug reported by Wei-Hao Lin: missing import and typo in rpy.py for Win32
  • Fix bug reported by Nicolas Lebas: Segfault when accessing R objects via r.[varname]. The code was was only properly handling R function objects, and failed for other object types.
  • setup.py was always overwriting the [filename][RVER].c files (used to allow binaries for mulitple R versions to be included in the same package). setup.py now create/overwrite the [foo][RVER].c files only if they don't exist or are out of date.
This should be the last release for some time. ;^)
RPy 0.4.5 now available

New features

  • Based on changes suggested by Bo Peng (Thanks Bo!), setup.py can now build and install a version of Rpy which will work with multiple versions of R. To use this, set the environment varaible 'RHOMES' to a list of R HOME directories. Look at the file description at the top of setup.py for details.
  • Improved build instructions for Windows by Bo Peng. Rpy now checks for Numeric at runtime and avoids calling it when it is not present. This allows a single binary library to be used whether or not Numeric is available at runtime, significantly simplyfing creation and distribution of binary packages.

Bug fixes

  • Fixed a install bug on Windows.
RPy 0.4.4 now available

New features

  • Rpy now checks for Numeric at runtime and avoids calling it when it is not present. This allows a single binary library to be used whether or not Numeric is available at runtime, significantly simplyfing creation and distribution of binary packages.
  • Warning messages from R are now properly displayed at the completion of the offending call.

Bug fixes

  • Compilation on Windows and for R versions below 2.1.0 has been fixed.

Unresolved bugs

  • Reception of a SIGINT signal sometimes causes a segfault. Under Linux, I see about 1 segfault per 100 signals. On Solaris, I'm seeing appriximatley 3 out of 4. Help debuging this issue is most welcome.
RPy 0.4.5 now available

New features

  • R Logical objects (TRUE/FALSE) are now mapped into python Boolean objects.
  • New conversion mode 'VECTOR_CONVERSION' In R there is no such thing as a straight scalar. All values are vectors, and scalars are simple vectors of length one. In Python, however, there is a representational and conceptual difference between scalars and lists, plus Python's immutable lists (a.k.a. tuples). Thus, An R vector of length one can thus be translated into any of three Python forms :
    	r("as.integer(1)")	-->	 int(1)
                                    -->	 [int(1),]
    				-->	 (int(1),)
    It is impossible to tell from the R object itself, which of these is correct. Given that [] and () are almost equivalent, we don't worry about (). But we still must decide between int(1) and [int(1)]. As documented in the Rpy manual, BASIC_CONVERSION, simply assumes that a vector of length one should be translated as scalar, and that vectors with other lengths (including 0) should be translated into Python [] lists. The new 'VECTOR_CONVERSION' mode always returns a python list, regardless of the length of the R vector. EG,
    	with_mode( BASIC_CONVERSION,	r.c)(1) --> int(1)
    	with_mode( VECTOR_CONVERSION, r.c)(1) --> [int(1),]
  • R source headers no longer needed, and are no longer included in the source package (yea!)
  • Previous versions of rpy have permitted multiple copies of the R interpreter wrapper to be instantiated (via "newR = rpy.R()" ). However R's design imposes a limit of one interpreter per python process. To avoid confusion on this point, attempts to instantiate more than one R interpreter object will now generate RuntimeError exceptions.
  • On Windows, RPy now always looks at the registry to see where to find the R DLL. This should avoid the nasty popup error message when the DLL isn't on the path. Patch by Peter (maubp@users.sourceforge.net)
  • The R integer 'NA' value is now accessible as the 'NA' attribute of the Python 'r' object.
  • The R floating point 'NA' value is now accessible as the 'NAN' attribute of the Python 'r' object.
  • The build process now creates version-specific shared libraries, and rpy will load the appropriate version specific library. This should help avoid problems arising from version conflicts, it will also make packaging 'universal' binary packages easier.

Bug fixes

  • Fix build error for R 2.0.0+ on Mac OSX ('darwin')
  • The R interpreter is now properly shutdown when python exits. This ensures that all temporary directories and files are removed, resolving a long-standing issue.
  • r.help() now works as expected by users. (Some time ago help() started returning an object that had to be explicitly printed to complete the processing. RPy now special-cases calls to r.help to ensure that this happens properly.)
  • All unit tests now pass.
  • Fix compilation error on Win32 due to a change in field names in R-2.1.1 [ 1238226 ] rpymodule.c needs updating for R 2.1.1 or later. Bo Peng identified both the bug and the fix.
  • Fix error (potential segfault!) when handling conversion of factor objects containing missing values
  • Fix bug in R.__call__ that could cause problems when the 'r' object is not present.
      Behind the scenes
      • Some work has been done "under the hood" to allow an R interpreter to be shut down and then started up again. This is *not* currently working.
RPy 0.4.2 now available

New features:

  • Add headers to enable building for R 2.1.0.

Bug fixes:

  • Fix build error under gcc 4.X
Source bundles and for RPy 0.4.2 are now available from the Downloads page. Windows binaries will follow.
RPy 0.4.0 now available

New features:

  • More fixes for R 2.0.0
  • R header files for R 1.8.0 through R 2.0.0 are now included with rpy. This should make it easier to build.
Source bundles and a Windows binary installer for RPy 0.4.0 are now available from the Downloads page.
RPy 0.3.6 now available

A binary for RPy 0.3.6 built against R 2.0.0 is now available on the Downloads page.

RPy 0.3.5 binaries

A binary for RPy 0.3.5 built against R 1.9.1 is now available on the Downloads page.

RPy 0.3.5 binaries
RPy 0.3.5 Windows binaries
Feb 27, 2004
RPy 0.3.5 binaries for Windows have been provided by Matjaz Kukar and are available for download. He has also made some additional changes to make rpy more stable under windows.

Get it from the Downloads page.

RPy 0.3.5 released

RPy 0.3.5 contains changes to allow building Mac OS X as well as some bug fixes for Windows. Get RPy 0.3.5 from the Downloads page.

RPy 0.3.4 Windows Binaries Available

Windows binaries for Rpy 0.3.4 have been provided by Matjaz Kukar and are available for download. Get them from the Downloads page.

IMPORTANT: You will need to manually set the PATH environment variable to include the directory where Rlib.dll lives. See the Release Notes for details on how to do this.

RPy 0.3.3 Released

RPy 0.3.3 contains changes that allow it to run properly with R versions 1.8.0 and later. Further, the Windows and Unix source codes have been merged. This should make it easier to fix bugs and add features.

Get RPy 0.3.3 from the Downloads page.

Gregory Warnes joins as a new project manager.

Gregory R. Warnes has joined the RPy project as a project manager.

His first project is to get RPy working with R 1.8.X. Next he will focus on combining the Unix and Windows source trees.


Last update on 10-2012