1

I have an .rds file generated in R, which is an S4 object that has multiple slots of data frames in different types (S4, list, chr, etc.) I tried to use load the .rds in python (jupyter notebook) and transfer to pandas.Dataframe(). I used and but got error in both.

Using rpy2:

import rpy2.robjects as robjects
from rpy2.robjects import r, pandas2ri
pandas2ri.activate()
readRDS = robjects.r['readRDS']
df = readRDS(*filepath*)
df = pandas2ri.ri2py_dataframe(df)

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-8-9f10fdefc63c> in <module>
----> 1 df = pandas2ri.ri2py_dataframe(df)
~\Anaconda3\lib\site-packages\rpy2-2.9.4-py3.7-win-amd64.egg\rpy2\robjects\pandas2ri.py in ri2py_dataframe(obj)
    188 @ri2py.register(DataFrame)
    189 def ri2py_dataframe(obj):
--> 190     items = tuple((k, ri2py(v)) for k, v in obj.items())
    191     res = PandasDataFrame.from_items(items)
    192     return res
AttributeError: 'RS4' object has no attribute 'items'

Using pyreadr:

result = pyreadr.read_r(*filepath*)

---------------------------------------------------------------------------
LibrdataError                             Traceback (most recent call last)
<ipython-input-45-2ac0e237ec0d> in <module>
----> 1 result = pyreadr.read_r(*filepath*)

~\Anaconda3\lib\site-packages\pyreadr\pyreadr.py in read_r(path, use_objects, timezone)
     38     if timezone:
     39         parser.set_timezone(timezone)
---> 40     parser.parse(path)
     41 
     42     result = OrderedDict()

~\Anaconda3\lib\site-packages\pyreadr\librdata.pyx in pyreadr.librdata.Parser.parse()

~\Anaconda3\lib\site-packages\pyreadr\librdata.pyx in pyreadr.librdata.Parser.parse()

LibrdataError: Unable to read from file

Could I ask if there is a way to load such an .rds file into python, or I must separately load each slot of data frame? Thanks a lot.

Latte_d
  • 13
  • 3
  • I cannot reproduce your `rpy2` issue. Please post the [`dput` of your R data frame](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5965451) object so we can see if it is data specific. As reminder, only atomic vectors (not nested lists/objects) should be stored in data frames. Please also post your `rpy2` version: `print(rpy2.__version__)`. – Parfait Nov 25 '19 at 18:04

0 Answers0