使用 rpy2.rpy_classic 将脚本从 rpy 转换为 rpy2
Converting a script from rpy to rpy2 using rpy2.rpy_classic
我对 python 有点新手,但我想将使用 rpy 的 python 脚本转换为使用 rpy2 的脚本。我们确实在某处安装了 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)?
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')
我对 python 有点新手,但我想将使用 rpy 的 python 脚本转换为使用 rpy2 的脚本。我们确实在某处安装了 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)?
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')