rpy2 / R interface

警告

在v0.16.0中,pandas.rpy接口已弃用,将在未来版本中删除。类似的功能可以通过rpy2项目访问。有关将代码从pandas.rpy移至rpy2函数的指南,请参阅updating部分。

Updating your code to use rpy2 functions

在v0.16.0中,pandas.rpy模块已弃用,用户指向rpy2本身)。

不要将导入 pandas.rpy.common 作为 com导入,应该做到激活rpy2中的pandas转换支持:

from rpy2.robjects import pandas2ri
pandas2ri.activate()

在rpy2和pandas之间来回转换数据帧应该在很大程度上自动化(不需要显式转换,它将在大多数rpy2函数中即时完​​成)。

要显式转换,函数为pandas2ri.py2ri()pandas2ri.ri2py()所以这些函数可以用来替换pandas中的现有函数:

  • com.convert_to_r_dataframe(df)应替换为pandas2ri.py2ri(df)
  • com.convert_robj(rdf)应替换为pandas2ri.ri2py(rdf)

注意:这些函数用于最新版本(rpy2 2.5.x),之前称为pandas2ri.pandas2ri()pandas2ri.ri2pandas()

pandas.rpy中的一些其他功能也可以轻松替换。例如,使用load_data函数加载R数据,当前方法:

df_iris = com.load_data('iris')

可替换为:

from rpy2.robjects import r
r.data('iris')
df_iris = pandas2ri.ri2py(r[name])

convert_to_r_matrix函数可以替换为正常的pandas2ri.py2ri以转换数据帧,随后调用R as.matrix函数。

警告

并不是rpy2中的所有转换函数都与pandas中的当前方法完全相同。如果您遇到与大熊猫相比的问题或限制,请在问题跟踪器上报告此问题。

另请参见rpy2项目的文档。

R interface with rpy2

如果您的计算机安装了R和rpy2(> 2.2)(将留给读者),您将能够利用以下功能。在Windows上,这样做是相当痛苦的,但在类Unix系统上的用户应该很容易。rpy2在时间上演变,目前达到2.3版本,而当前接口是为2.2.x系列设计的。我们建议使用2.2.x比其他系列,除非你准备修复部分代码,但rpy2-2.3.0引入了改进,如更好的R-Python桥内存管理层,因此它可能是一个好主意子弹和提交修补程序的一些小的差异,需要修复。

# if installing for the first time
hg clone http://bitbucket.org/lgautier/rpy2

cd rpy2
hg pull
hg update version_2.2.x
sudo python setup.py install

注意

要通过此接口使用R程序包,您需要自己在R中安装它们。目前它无法为您安装它们。

安装完R和rpy2后,您应该可以轻松导入pandas.rpy.common

Transferring R data sets into Python

load_data函数检索R数据集并将其转换为适当的pandas对象(很可能是DataFrame):

In [1]: import pandas.rpy.common as com

In [2]: infert = com.load_data('infert')

In [3]: infert.head()
Out[3]: 
  education   age  parity  induced  case  spontaneous  stratum  pooled.stratum
1    0-5yrs  26.0     6.0      1.0   1.0          2.0        1             3.0
2    0-5yrs  42.0     1.0      1.0   1.0          0.0        2             1.0
3    0-5yrs  39.0     6.0      2.0   1.0          0.0        3             4.0
4    0-5yrs  34.0     4.0      2.0   1.0          0.0        4             2.0
5   6-11yrs  35.0     3.0      1.0   1.0          1.0        5            32.0

Converting DataFrames into R objects

版本0.8中的新功能。

从pandas 0.8开始,有实验支持将DataFrames转换为等效的R对象(即data.frame):

In [4]: import pandas.rpy.common as com

In [5]: df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C':[7,8,9]},
   ...:                   index=["one", "two", "three"])
   ...: 

In [6]: r_dataframe = com.convert_to_r_dataframe(df)

In [7]: print(type(r_dataframe))
<class 'rpy2.robjects.vectors.DataFrame'>

In [8]: print(r_dataframe)
      A B C
one   1 4 7
two   2 5 8
three 3 6 9

DataFrame的索引存储为data.frame实例的rownames属性。

您还可以使用convert_to_r_matrix获取Matrix实例,但是请记住,它只适用于均匀类型的DataFrames(因为R矩阵不包含数据类型的信息):

In [9]: import pandas.rpy.common as com

In [10]: r_matrix = com.convert_to_r_matrix(df)

In [11]: print(type(r_matrix))
<class 'rpy2.robjects.vectors.Matrix'>

In [12]: print(r_matrix)
      A B C
one   1 4 7
two   2 5 8
three 3 6 9

使用pandas对象调用R函数

到R估计器的高级接口

Scroll To Top