python中调用R函数的方法是什么

  介绍

小编给大家分享一下python中调用R函数的方法是什么,希望大家阅读完这篇文章后大所收获、下面让我们一起去探讨吧!

如何在python中调用R ?这其中包括了如何调用R的对象(函数和包),R和python的对象如何互相转换,以及如何调用R的脚本(外界参数的输入).python提供了一个模块rpy2,可以较好地完成这项工作。

<强>一、安装rpy2

rpy2的网址:http://rpy.sourceforge.net/index.html

可以使用easy_install安装,# easy_install rpy2

注意事项:

(1)如果是源代码编译安装R,需要在配置步骤加入后缀——enable-R-shlib。

(2)需要安装python-devel包。

<强>二,python调用R对象

1,使用rpy2.robjects包的R对象

调用方法如下,以下robject。r的调用方法实际上是开启了一个r的交互进程,只需要将r的代码写入一个字符串内(注1),接着调用r即可:

import  rpy2.robjects  as  robjects

此时,有三种方法调用r对象:

第一种:robjects.r[& # 39;π# 39;]

第二种:robjects.r(& # 39;π# 39;)(这种方法从某种程度上讲是万能的,因为可以将任意大小和长度的r代码写成一个python字符串,之后通过robjects.r (& # 39; Rcode& # 39;)调用执行。)

第三种:robjects.r.pi(这种方法对于名称中有“点”号的变量会出问题,比如data.frame/read.csv等,所以推荐使用第一种方法)

以下是一个创建和使用r函数(自己创建的函数或者r内置函数)。注意:最后一种方法,对于对付一些特殊的格式很管用:

#,creat  an  R 函数   在祝辞祝辞,robjects.r (   ,,,,,,,,,,& # 39;& # 39;& # 39;   ,,,,,,,,,,f  & lt;作用;函数(r) {pi  *, r}   ,,只,,,,,,& # 39;& # 39;& # 39;   ,,,,,,,,,,)   在祝辞祝辞,robjects.r [& # 39; f # 39;) (3)   [9.424778]   #,internal  function 拷贝R   在祝辞祝辞,robjects.r [& # 39; ls # 39;] ()   #,another  internal 函数   在祝辞祝辞,l =, robjects.r[& # 39;信# 39;】   在祝辞祝辞,len(左)   祝辞祝辞祝辞,robjects.r[& # 39;粘贴# 39;](l, collapse =, & # 39; & # 39;)   #,an  alternative  way  of  getting  & # 39;粘贴# 39;function  R拷贝   #,eval 从而,R 代码   祝辞祝辞祝辞,coder =, & # 39;粘贴(% s, collapse =,“产生绯闻;)& # 39;,%,(l.r_repr ())   祝辞祝辞祝辞,robjects.r(编码器)

对于一些特殊的R对象比如列表和矩阵,如果python要调去其中的部分数据,可以通过其rx()和rx2()方法操作。对于列表,可以查看其名称属性,以获得列表个个元素名称.rx()和相当于“(“操作(注意取出的是R的列表对象),而rx2()相当于“[[“操作。一个例子:

在祝辞祝辞,tmp =, R(“列表(=a 矩阵(1:10,nrow =, 2),, b =, & # 39;你好# 39;)“)   在祝辞祝辞print  tmp   美元一个   ,,,,[1],[2],[3],[4],[5]   [1],,,,1,,,,3,,,,5,,,,7,,,9   [2],,,,2,,,,4,,,,6,,,,8,,10   b美元   [1],“Hello"   在祝辞祝辞tmp.names   & lt; StrVector 安康;Python: 0 x8afdc8c /, R: 0 x8ce0a70>   [& # 39;一个# 39;,,& # 39;b # 39;】   在祝辞祝辞,tmp.rx(& # 39;一个# 39;)   & lt; ListVector 安康;Python: 0 x8afd86c /, R: 0 x8cf71c0>   (矩阵)   答:才能,& lt; class  & # 39; rpy2.robjects.vectors.Matrix& # 39;比;   & lt;才能Matrix 安康;Python: 0 x8b013cc /, R: 0 x97de388>   (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10]   在祝辞祝辞,tmp.rx (1)   & lt; ListVector 安康;Python: 0 x8b010cc /, R: 0 x8cf7100>   (矩阵)   答:才能,& lt; class  & # 39; rpy2.robjects.vectors.Matrix& # 39;比;   & lt;才能Matrix 安康;Python: 0 x8b017cc /, R: 0 x97de388>   (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10]   在祝辞祝辞,tmp.rx2 (1)   & lt; Matrix 安康;Python: 0 x8b01b4c /, R: 0 x97de388>   (,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,10]   在祝辞祝辞,tmp.rx2(& # 39;一个# 39;).rx (1, 1), #, first  element  of  & # 39;一个# 39;   & lt; IntVector 安康;Python: 0 x8b01acc /, R: 0 x8cf6fa0>   (,,,,,,1]   在祝辞祝辞,tmp.rx2(& # 39;一个# 39;).rx(1,,真的),#,first  row  of  & # 39;一个# 39;   & lt; IntVector 安康;Python: 0 x8b01f2c /, R: 0 x965ffd8>   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

python中调用R函数的方法是什么