Source code for rpy2.robjects.environments
import rpy2.rinterface as rinterface
from rpy2.robjects.robject import RObjectMixin, RObject
from rpy2.robjects import conversion
_new_env = rinterface.baseenv["new.env"]
[docs]class Environment(RObjectMixin, rinterface.SexpEnvironment):
""" An R environement. """
def __init__(self, o=None):
if o is None:
o = _new_env(hash=rinterface.SexpVector([True, ],
rinterface.LGLSXP))
super(Environment, self).__init__(o)
def __getitem__(self, item):
res = super(Environment, self).__getitem__(item)
res = conversion.converter.ri2ro(res)
# objects in a R environment have an associated name / symbol
try:
res.__rname__ = item
except AttributeError:
# the 3rd-party conversion function can return objects
# for which __rname__ cannot be set (because of fixed
# __slots__ and no __rname__ in the original set
# of attributes)
pass
return res
def __setitem__(self, item, value):
robj = conversion.converter.py2ri(value)
super(Environment, self).__setitem__(item, robj)
[docs] def get(self, item, wantfun = False):
""" Get a object from its R name/symol
:param item: string (name/symbol)
:rtype: object (as returned by :func:`conversion.converter.ri2ro`)
"""
res = super(Environment, self).get(item, wantfun = wantfun)
res = conversion.converter.ri2ro(res)
res.__rname__ = item
return res
[docs] def keys(self):
""" Return a tuple listing the keys in the object """
return tuple([x for x in self])
[docs] def items(self):
""" Iterate through the symbols and associated objects in
this R environment."""
for k in self:
yield (k, self[k])