对于python我是一个新手,但我想使用rpy将使用rpy的python脚本转换为一个。我们确实在某处安装了rpy(对于python 2.6.x),但它与当前版本的R(3.2.0)不能很好地兼容。但是我们为这些脚本中使用的python版本安装了rpy2(python 2.7 [.5])
据我所知,这些是需要改变的行(我简化了一点功能):
from rpy import r
r.library('<libname>', quietly=True)
r("""\
func <- function(x,a={options.a},b={options.b}) {{
...
*R code here*
...
l<-list(o=o,md=a+b)
l
}}""".format(options=options))
以及稍后的脚本中,有一行调用此函数:
out = r.func(<python expression>)['o']
我可以按照以下方式完成上半部分:
import rpy2.rpy_classic as rpy
rpy.set_default_mode(rpy.NO_CONVERSION)
rpy.r.library('<libname>', quietly=True)
rpy.r("""\
func <- function(x,a={options.a},b={options.b}) {{
...
*R code here*
...
l<-list(o=o,md=a+b)
l
}}""".format(options=options))
在交互式提示中尝试上述内容(包含一些虚假数据),输出为:
<rpy2.rpy_classic.Robj object at 0x2b9e48481510>
但我需要函数rpy.r.func
的输出值而不是未转换的值(因为我需要获取func(<expression)$o
值)
我是否正在走上正轨?我如何重写rpy(v1)代码以便得到我想要的东西(来自rpy2)?
答案 0 :(得分:0)
rpy_classic
在早期主要用于证明rpy2中的低级接口可用于实现任何更高级别的接口,包括rpy
中的接口。它并不意味着是一个终极兼容工具。
使用rpy2的高级接口robjects
,您的rpy代码如下所示:
from rpy2.robjects.packages import importr
from rpy2.robjects import r
lib=importr('<libname>')
rfunc=r("""
function(x,a={options.a},b={options.b}) {{
...
*R code here*
...
l<-list(o=o,md=a+b)
l
}}""".format(options=options))
out = rfunc(<python expression>).rx2('o')