微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

rpy2 中的 R maptools wrld_simpl

如何解决rpy2 中的 R maptools wrld_simpl

在 R 中:

import(maptools)
data(wrld_simpl)

在python rpy2中,如何访问wrld_simpl?以下代码(在 Python 中)失败如下...package "maptools" has no attribute wrld_simpl

maptools = importr('maptools')
data = DataFrame(maptools.wrld_simpl)

只是想了解 rpy2(并从大学时代重新审视 R)

解决方法

使用 rpy2.robjects.packages.data,如 rpy2 introduction 中所示:

>>> from rpy2.robjects.packages import importr,data

>>> maptools = importr('maptools')
>>> spatial_df_r = data(maptools).fetch('wrld_simpl')['wrld_simpl']
>>> spatial_df_r
<rpy2.robjects.methods.RS4 object at 0x7ffa932b0cc0> [RTYPES.S4SXP]
R classes: ('SpatialPolygonsDataFrame',)

您似乎也在尝试将数据转换为 pandas.DataFrame。小问题是数据不是数据框,而是 SpatialPolygonsDataFrame 对象。但是,您可以将其转换为正确的 data.frame:

>>> base = importr('base')
>>> df_r = base.as_data_frame(spatial_df_r)
>>> tuple(df_r.rclass)
('data.frame',)

然后到pandas DataFrame:

from rpy2.robjects import conversion
from rpy2.robjects import default_converter,pandas2ri

with conversion.localconverter(default_converter + pandas2ri.converter):
    df = conversion.rpy2py(df_r)

其中 df 现在是一个 Pandas DataFrame:

>>> type(df)
<class 'pandas.core.frame.DataFrame'>

但是,如果您使用的是 Jupyter,使用 rpy2 魔法的 -o 选项可以更轻松地完成转换,请参阅:using rpy2 in notebooksrpy2.ipython.rmagic

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。