使用rpy2从python调用R脚本

31

我对rpy2和R都很陌生。

我有一个R脚本script.R,其中包含函数,例如rfunc(folder)。 它位于与我的python脚本相同的目录中。 我想从Python调用它,然后启动其中一个函数。 我不需要来自此R函数的任何输出。 我知道这一定非常基础,但我找不到调用R脚本的Python代码示例。 目前我在Python中做的事情如下:

import rpy2.robjects as robjects

def pyFunction(folder):
    #do python stuff 
    r=robjects.r
    r[r.source("script.R")]
    r["rfunc(folder)"]
    #do python stuff

pyFunction(folder)

我在source行处遇到了一个错误:

r[r.source("script.R")] File "/usr/lib/python2.7/dist-packages/rpy2/robjects/__init__.py", line 226, in __getitem__ res = _globalenv.get(item) TypeError: argument 1 must be string, not ListVector

我不太理解为什么我输入的参数不是字符串,我猜下一行也会出现同样的问题,因为folder是一个Python字符串,而不是一个R的东西。

那么,我应该如何正确地调用我的脚本呢?

1个回答

44

source 是一个 R 函数,用于运行一个 R 源文件。因此,在 rpy2 中,我们有两种方式来调用它,要么:

import rpy2.robjects as robjects
r = robjects.r
r['source']('script.R')
或者
import rpy2.robjects as robjects
r = robjects.r
r.source('script.R')

r[r.source("script.R")] 不是正确的处理方式。

同样的想法可能适用于下一行。


我想要使用脚本 script.R 中定义的 rfunc 函数,并将 folder 参数作为参数传递给我的 Python 函数。 - Efferalgan
对于下一行,r.rfunc(folder) 的工作方式与您的解决方案相同。看来我在寻找过于复杂的东西,而解决方案却非常简单。谢谢。 - Efferalgan
1
没错,r["rfunc(folder)"] 会将 folder 作为字符串 'folder' 传递,这可能不是你想要的。我今天已经用完了点赞次数,明天再点吧。干杯! - CT Zhu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接