If you try to import it you'll get something like this:
$ python Python 2.7.4 (default, Apr 19 2013, 18:28:01) [GCC 4.7.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import rpy2 >>> import rpy2.rinterface Traceback (most recent call last): File "", line 1, in File "/usr/lib/python2.7/dist-packages/rpy2/rinterface/__init__.py", line 93, in from rpy2.rinterface._rinterface import * ImportError: /usr/lib/python2.7/dist-packages/rpy2/rinterface/_rinterface.so: undefined symbol: Rf_PrintWarnings
However, the solution is pretty straightforward.
First download the source for rpy2 2.3.1. Then extract it and edit the file rpy2-2.3.1/rpy/rinterface/_rinterface.c. Then comment out the following on lines 1764-1765:
extern void Rf_PrintWarnings(void); Rf_PrintWarnings(); /* show any warning messages */
Such that it appears as:
//extern void Rf_PrintWarnings(void); //Rf_PrintWarnings(); /* show any warning messages */
Change to the rpy2-2.3.1 directory where you extracted the source to and reinstall rpy2 using:
sudo python setup.py install
Which should allow it to work again.
$ python Python 2.7.4 (default, Apr 19 2013, 18:28:01) [GCC 4.7.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import rpy2 >>> import rpy2.rinterface >>>
You won't get any of the warning messages that Rf_PrintWarnings() would have output when it calls an R function. This has already been fixed in the development branch but this quick fix means you don't have to wait for an official update to get rpy2 running again.
After doing this I am receiving Segmentation fault error when importing rpy2.orobjects
ReplyDeleteHi,
DeleteAt this point the latest version of rpy2 is now 2.3.8 which incorporates the fix this post addresses. As such you are probably best just installing the latest version of rpy2 which should generally just work.
Tony
Assume you have installed a compatible "python" version.
ReplyDeleteFirstly use
> sudo -i
Then
> pip install rpy2
It can resolve the problems such as "ImportError: /usr/lib/python2.7/dist-packages/rpy2/rinterface/_rinterface.so: undefined symbol: Rf_PrintWarning".
SUBRATA GHOSH
Hi Subrata, thanks for the comment. This article was written at a point in time where this did not work. I mention in my last post (2013-12-03) that installing the latest version of rpy2 is probably now the best solution.
ReplyDeleteThanks for this. Upgrading is not an option for one of my users, so this has just saved me in 2017.
ReplyDelete