为什么我收到“模块‘rpy2.robjects.conversion’没有属性‘py2rpy’”错误?

问题描述

我正在尝试使用指南 here 将 Pandas 数据帧转换为 R 数据帧。我到目前为止的代码是:

import pandas as pd
import rpy2.robjects as ro
from rpy2.robjects import pandas2ri

from rpy2.robjects.conversion import localconverter

pd_df = pd.DataFrame({'int_values': [1,2,3],'str_values': ['abc','def','ghi']})

with localconverter(ro.default_converter + pandas2ri.converter):
  r_from_pd_df = ro.conversion.py2rpy(pd_df)

但是,这给了我以下错误

Traceback (most recent call last):
  File <my_file_ref>,line 13,in <module>
    r_from_pd_df = ro.conversion.py2rpy(pd_df)
AttributeError: module 'rpy2.robjects.conversion' has no attribute 'py2rpy'

我发现了 this 相关问题,其中 OP 指的是正在更改的函数名称,但没有解释更改是什么。我已经尝试查看该模块,但我还不够先进,无法理解它。

接受的答案是指检查我已经完成的版本,我肯定使用的是 rpy2 v3.3.3,这与我正在遵循的指南相同。

有没有人遇到过这个错误并找到了解决办法?

解决方法

您指出的 rpy2 文档部分是通过运行代码示例构建的。这意味着该示例确实适用于相应版本的 rpy2。

我不确定您是否在运行时使用该版本的 rpy2?例如,添加 print(rpy2.__version__) 以检查是否是这种情况。

值得一提的是,rpy2 3.3.x 系列的最新版本是 3.3.6,可能没有充分的理由继续使用 3.3.3。否则 rpy2 3.4.0 刚刚发布;如果使用 R 4.0 或更高版本,或者最新版本的 R 包 dplyrggplot2 及其 rpy2 包装器,我建议使用该版本。

[PS:我刚刚用 rpy2-3.4.0 试过你的例子,它运行没有错误]