【问题标题】:R maptools wrld_simpl in rpy2rpy2中的R maptools wrld_simpl
【发布时间】:2021-03-16 06:52:04
【问题描述】:

在 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)

【问题讨论】:

    标签: python r rpy2 maptools


    【解决方案1】:

    使用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

    【讨论】:

      猜你喜欢
      • 2018-06-26
      • 2013-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-22
      • 2020-05-28
      • 1970-01-01
      • 2018-12-30
      相关资源
      最近更新 更多