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.