Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Converting python objects for rpy2

Tags:

python

r

rpy2

The following code is supposed to create a heatmap in rpy2

import numpy as np
from rpy2.robjects import r
data = np.random.random((10,10))
r.heatmap(data)    

However, it results in the following error

Traceback (most recent call last):
  File "z.py", line 8, in <module>
    labRow=rowNames, labCol=colNames)
  File "C:\Python25\lib\site-packages\rpy2\robjects\__init__.py", line 418, in __call__
    new_args = [conversion.py2ri(a) for a in args]
  File "C:\Python25\lib\site-packages\rpy2\robjects\__init__.py", line 93, in default_py2ri
    raise(ValueError("Nothing can be done for the type %s at the moment." %(type(o))))
ValueError: Nothing can be done for the type <type 'numpy.ndarray'> at the moment.

From the documentation I learn that r.heatmap expects "a numeric matrix". How do I convert np.array to the required data type?

like image 203
Boris Gorelik Avatar asked Mar 15 '10 13:03

Boris Gorelik


People also ask

Do I need to install R to use rpy2?

rpy2 will typically require an R version that is not much older than itself. This means that even if your system has R pre-installed, there is a chance that the version is too old to be compaible with rpy2. At the time of this writing, the latest rpy2 version is 2.8 and requires R 3.2 or higher.

What is rpy2 Python?

rpy2 is an interface to R running embedded in a Python process. on Pypi. Questions and issues. Consider having a look at the documentation. Otherwise questions should preferably be asked on the rpy mailing-list on SourceForge, or on StackOverflow.

Can you call R from Python?

rpy2 provides an interface that allows you to run R in Python processes. Users can move between languages and use the best of both programming languages. Below, I walk you through how to call three powerful R packages from Python: stats, lme4, and ggplot2.


3 Answers

You need to add

import rpy2.robjects.numpy2ri
rpy2.robjects.numpy2ri.activate()

See more in rpy2 documentation numpy section (here for the older 2.x version)

Prior to 2.2.x the import alone was sufficient.

That import alone is sufficient to switch an automatic conversion of numpy objects into rpy2 objects.

Why make this an optional import, while it could have been included in the function py2ri() (as done in the original patch submitted for that function) ?

Although both are valid and reasonable options, the design decision was taken in order to decouple rpy2 from numpy the most, and do not assume that having numpy installed automatically meant that a programmer wanted to use it.

like image 110
unutbu Avatar answered Oct 15 '22 17:10

unutbu


For rpy2 2.2.4 I had to add:

import rpy2.robjects.numpy2ri
rpy2.robjects.numpy2ri.activate()
like image 23
brink Avatar answered Oct 15 '22 16:10

brink


For me (2.2.1) the following also worked (as documented on http://rpy.sourceforge.net/rpy2/doc-2.2/html/numpy.html):

import rpy2.robjects as ro
from rpy2.robjects.numpy2ri import numpy2ri
ro.conversion.py2ri = numpy2ri
like image 2
flinz Avatar answered Oct 15 '22 16:10

flinz