def activate(): global original_converter # If module is already activated, there is nothing to do if original_converter is not None: return original_converter = conversion.make_converter( 'snapshot before pandas conversion', template=conversion.converter) numpy2ri.activate() new_converter = conversion.make_converter( 'snapshot before pandas conversion', template=conversion.converter) numpy2ri.deactivate() for k, v in py2ri.registry.items(): if k is object: continue new_converter.py2ri.register(k, v) for k, v in ri2ro.registry.items(): if k is object: continue new_converter.ri2ro.register(k, v) for k, v in py2ro.registry.items(): if k is object: continue new_converter.py2ro.register(k, v) for k, v in ri2py.registry.items(): if k is object: continue new_converter.ri2py.register(k, v) conversion.converter = new_converter name, conversion.ri2ro, conversion.py2ri, conversion.py2ro, conversion.ri2py, lineage = new_converter
def activate(): global original_converter # If module is already activated, there is nothing to do if original_converter is not None: return original_converter = conversion.make_converter('snapshot before pandas conversion', template=conversion.converter) numpy2ri.activate() new_converter = conversion.make_converter('snapshot before pandas conversion', template=conversion.converter) numpy2ri.deactivate() for k,v in py2ri.registry.items(): if k is object: continue new_converter.py2ri.register(k, v) for k,v in ri2ro.registry.items(): if k is object: continue new_converter.ri2ro.register(k, v) for k,v in py2ro.registry.items(): if k is object: continue new_converter.py2ro.register(k, v) for k,v in ri2py.registry.items(): if k is object: continue new_converter.ri2py.register(k, v) conversion.converter = new_converter name, conversion.ri2ro, conversion.py2ri, conversion.py2ro, conversion.ri2py, lineage = new_converter
def activate(): global original_converter # If module is already activated, there is nothing to do if original_converter is not None: return original_converter = conversion.converter new_converter = conversion.make_converter(template=original_converter) for k,v in py2ri.registry.items(): if k is object: continue new_converter.py2ri.register(k, v) for k,v in ri2ro.registry.items(): if k is object: continue new_converter.ri2ro.register(k, v) for k,v in py2ro.registry.items(): if k is object: continue new_converter.py2ro.register(k, v) for k,v in ri2py.registry.items(): if k is object: continue new_converter.ri2py.register(k, v) conversion.converter = new_converter conversion.ri2ro, conversion.py2ri, conversion.py2ro, conversion.ri2py = new_converter
ListVector, StrVector, IntVector, POSIXct) from rpy2.rinterface import (IntSexpVector, ListSexpVector) original_converter = None # pandas is requiring numpy. We add the numpy conversion will be # activate in the function activate() below import rpy2.robjects.numpy2ri as numpy2ri ISOdatetime = rinterface.baseenv['ISOdatetime'] converter = conversion.make_converter('original pandas conversion') converter_name, py2ri, ri2ro, py2ro, ri2py, converter_lineage = converter @py2ri.register(PandasDataFrame) def py2ri_pandasdataframe(obj): od = OrderedDict() for name, values in obj.iteritems(): if values.dtype.kind == 'O': od[name] = StrVector(values) else: od[name] = conversion.py2ri(values) return DataFrame(od) @py2ri.register(PandasIndex) def py2ri_pandasindex(obj):
from pandas.core.index import Index as PandasIndex from numpy import recarray from collections import OrderedDict from rpy2.robjects.vectors import DataFrame, Vector, ListVector, StrVector, IntVector, POSIXct original_converter = None # pandas is requiring numpy. We add the numpy conversion will be # activate in the function activate() below import rpy2.robjects.numpy2ri as numpy2ri ISOdatetime = rinterface.baseenv['ISOdatetime'] converter = conversion.make_converter() py2ri, ri2ro, py2ro, ri2py = converter @py2ri.register(PandasDataFrame) def py2ri_pandasdataframe(obj): od = OrderedDict() for name, values in obj.iteritems(): if values.dtype.kind == 'O': od[name] = StrVector(values) else: od[name] = conversion.py2ri(values) return DataFrame(od) @py2ri.register(PandasIndex) def py2ri_pandasindex(obj):
else: def __str__(self): return unicode_to_str(unicode(self), 'utf-8') @generic def pyconverter(pyobj): """Convert Python objects to R objects. Add types using the decorator: @pyconverter.when_type """ return pyobj converter = make_converter('ipython conversion', template=template_converter) # The default conversion for lists is currently to make them an R list. That has # some advantages, but can be inconvenient (and, it's inconsistent with the way # python lists are automatically converted by numpy functions), so for # interactive use in the rmagic, we call unlist, which converts lists to vectors # **if the list was of uniform (atomic) type**. @pyconverter.when_type(list) def pyconverter_list(pyobj): # simplify2array is a utility function, but nice for us return ro.r.simplify2array(pyobj) @magics_class class RMagics(Magics):
# "V" -> special-cased below #FIXME: datetime64 ? #"datetime64": } #FIXME: the following would need further thinking & testing on # 32bits architectures _kinds['float64'] = rinterface.REALSXP _vectortypes = (rinterface.LGLSXP, rinterface.INTSXP, rinterface.REALSXP, rinterface.CPLXSXP, rinterface.STRSXP) converter = conversion.make_converter('original numpy conversion') converter_name, py2ri, ri2ro, py2ro, ri2py, converter_lineage = converter @py2ri.register(numpy.ndarray) def numpy2ri(o): """ Augmented conversion function, converting numpy arrays into rpy2.rinterface-level R structures. """ if not o.dtype.isnative: raise(ValueError("Cannot pass numpy arrays with non-native byte orders at the moment.")) # Most types map onto R arrays: if o.dtype.kind in _kinds: # "F" means "use column-major order" vec = SexpVector(o.ravel("F"), _kinds[o.dtype.kind]) dim = SexpVector(o.shape, INTSXP) #FIXME: no dimnames ?
import numpy from collections import OrderedDict from rpy2.robjects.vectors import (DataFrame, Vector, ListVector, StrVector, IntVector, POSIXct) from rpy2.rinterface import (IntSexpVector, ListSexpVector) original_converter = None # pandas is requiring numpy. We add the numpy conversion will be # activate in the function activate() below import rpy2.robjects.numpy2ri as numpy2ri ISOdatetime = rinterface.baseenv['ISOdatetime'] converter = conversion.make_converter('original pandas conversion') converter_name, py2ri, ri2ro, py2ro, ri2py, converter_lineage = converter @py2ri.register(PandasDataFrame) def py2ri_pandasdataframe(obj): od = OrderedDict() for name, values in obj.iteritems(): if values.dtype.kind == 'O': od[name] = StrVector(values) else: od[name] = conversion.py2ri(values) return DataFrame(od) @py2ri.register(PandasIndex)
if PY3: __str__ = __unicode__ else: def __str__(self): return unicode_to_str(unicode(self), 'utf-8') @generic def pyconverter(pyobj): """Convert Python objects to R objects. Add types using the decorator: @pyconverter.when_type """ return pyobj converter = make_converter('ipython conversion', template = template_converter) # The default conversion for lists is currently to make them an R list. That has # some advantages, but can be inconvenient (and, it's inconsistent with the way # python lists are automatically converted by numpy functions), so for # interactive use in the rmagic, we call unlist, which converts lists to vectors # **if the list was of uniform (atomic) type**. @pyconverter.when_type(list) def pyconverter_list(pyobj): # simplify2array is a utility function, but nice for us return ro.r.simplify2array(pyobj) @magics_class class RMagics(Magics):