tags:

views:

123

answers:

1

Hello! The following code does not work. It seems that the R warning message raises a python error.

# enable use of python objects in rpy2
import rpy2.robjects.numpy2ri
import numpy as np
from rpy2.robjects import r

# create an example array
a = np.array([[5,2,5],[3,7,8]])

# this line leads to a warning message, which in turn raises an 
# error message if run within a script.
result = r['chisq.test'](a)

Running that code example in ipython works, however, running it inside a script raises the errorTypeError: 'module' object is unsubscriptable. I assume this is due to the warning message.

What is the best way to avoid this problem? Thanks in advance!

+1  A: 

Put a print statement right before the error:

print(r)
result = r['chisq.test'](a)

The error message TypeError: 'module' object is unsubscriptable is claiming that r is referencing a module. When you run the script with the print statement, you'll see something like

<module 'rpy2' from '/usr/lib/python2.6/dist-packages/rpy2/__init__.pyc'>
Traceback (most recent call last):
  File "/home/unutbu/pybin/test.py", line 14, in <module>
    result = r['chisq.test'](a)
TypeError: 'module' object is unsubscriptable

Note that the first line says that r is referencing the module rpy2. This should give you a clue as to what is going wrong. Once you find the name of the trouble-making module, check your import statements to see how r is getting reassigned to that module.

For example, if you have

from rpy2.robjects import r
...
import rpy2 as r

then the second import statement is overriding the first, and the name r is thereafter referencing the module rpy2 instead of rpy2.robjects.r.

unutbu
Thank you for pointing me into the right direction.I changed the import statements and now the code runs correctly.
Björn
@Björn: No problem! Glad it helped.
unutbu