【问题标题】:Calling R script from python using rpy2使用 rpy2 从 python 调用 R 脚本
【发布时间】:2014-08-24 00:22:57
【问题描述】:

我对 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)

我在源代码行中遇到错误:

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东西。

那么,我怎样才能正确调用我的脚本呢?

【问题讨论】:

    标签: python r call rpy2


    【解决方案1】:

    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 函数的参数给出。
    • 对于下一行,r.rfunc(folder) 的工作方式与您的解决方案相同。似乎我在寻找过于复杂的东西,而解决方案却非常简单。谢谢。
    • 是的,没错。 r["rfunc(folder)"]folder 作为字符串 'folder' 传递,这可能不是您想要的。我今天的票数不多了,明天我会这样做。干杯!
    猜你喜欢
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 2017-12-06
    • 2017-04-30
    • 1970-01-01
    • 2019-09-14
    相关资源
    最近更新 更多