Next: DataFrame class, Previous: Useful examples, Up: Useful examples
This example shows an extended Robj type which supports
R attribute look up via normal Python attribute access. It also
supports the representation given by the R interpreter, and it
implements the as_r() method for converting itself to R.
In Python 2.2 you can take advantage of the possibility to subclass types, and the examples can be rewritten in a more powerful way. However, these examples are Python 2.1 and 2.2 compatible.
File erobj.py:
from rpy import *
class ERobj:
def __init__(self, robj):
self.robj = robj
def as_r(self):
return self.robj
def __str__(self):
a = with_mode(NO_CONVERSION,
lambda: r.textConnection('tmpobj', 'w'))()
r.sink(file=a, type='output')
r.print_(self.robj)
r.sink()
r.close_connection(a)
str = with_mode(BASIC_CONVERSION,
lambda: r('tmpobj'))()
return '\n'.join(as_list(str))
def __getattr__(self, attr):
e = with_mode(BASIC_CONVERSION,
lambda: r['$'](self.robj, attr))()
if e:
return e
return self.__dict__[attr]
The __str__ method makes the R interpreter print to the
tmpobj R variable. Then, it is retrieved and returned as
the string representation of the object. Note the use of the
with_mode function for not changing the mode in use. Note,
also, the use of the utility functions as_list and
r (see Miscellaneous).
An example of use:
>>> from rpy import *
>>> from erobj import *
>>> proc_table[lambda o: 1] = ERobj
>>> set_default_mode(PROC_CONVERSION)
>>>
>>> e = r.t_test([1,2,3])
>>> e
<erobj.ERobj instance at 0x8ad4ea4>
>>> print e
One Sample t-test
data: c(1, 2, 3)
t = 3.4641, df = 2, p-value = 0.07418
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
-0.4841377 4.4841377
sample estimates:
mean of x
2
>>>
>>> e.statistic
{'t': 3.4641016151377548}