Previous: Enhanced Robj, Up: Useful examples
This example is a subclass of the Enhanced Robj (see Enhanced Robj), which can be used to mimic the `Data Frame' class of the R language.
It overrides the __getattr__ method for retrieving the columns
of the data frame object. It adds a method for accessing the rows
and it inherits the representation and as_r method.
File dataframe.py:
from rpy import *
import erobj
class DataFrame(erobj.ERobj):
def __init__(self, robj):
erobj.ERobj.__init__(self, robj)
def rows(self):
return r.attr(self.robj, 'row.names')
def __getattr__(self, attr):
o = self.__dict__['robj']
if attr in as_list(r.colnames(o)):
return r['$'](o, attr)
return self.__dict__[attr]
An example of use:
>>> from rpy import *
>>> from dataframe import *
>>> class_table['data.frame'] = DataFrame
>>> set_default_mode(CLASS_CONVERSION)
>>>
>>> e = r.as_data_frame({'foo': [4,5,6], 'bar': ['X','Y','Z']})
>>> e
<dataframe.DataFrame instance at 0x8156e34>
>>> print e
foo bar
1 4 X
2 5 Y
3 6 Z
>>>
>>> e.foo
[4, 5, 6]
>>> e.bar
['X', 'Y', 'Z']
>>> e.rows()
['1', '2', '3']