当前位置: 首页 > 面试题库 >

使用rpy2从python调用R脚本

满博
2023-03-14
问题内容

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

我完全不明白我给它的参数不是字符串,而且我猜在下一行会发生相同的问题, 文件夹 是python字符串,而不是R东西。

那么,如何正确调用脚本?


问题答案:

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")] 是错误的方法。

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



 类似资料:
  • 问题内容: 我想从Java调用R脚本。我已经对该主题进行了google搜索,但是我看到的几乎所有结果都需要我向某些第三方库添加依赖项。任何人都可以向我展示一种在不添加任何依赖项的情况下完成同一件事的好方法吗? 我正在使用Windows计算机,因此也许我可以使用命令行来启动R(如果尚未打开)并运行特定的R脚本。但是我从未写过命令行代码(或从Java调用过),因此我需要代码示例。 我将使用命令行思路包

  • 问题内容: 这个问题与R的python变量有关,也许与rpy2的python对象有关,但是两个都没有完全重叠,第一个实际上没有答案。 我的问题实际上非常简单。我有一个字符串,说: 我想像这样将它传递给R : 但当然,当我运行此我得到:。 我并没有使用太多(很明显),但是我想这与R和Python查看对象的环境有关。 我已经尝试了一些东西,比如改造串到第一,然后将其输送到,但我得到了同样的错误消息。总

  • 问题内容: 我知道我可以使用以下命令从bash脚本运行python脚本: 但是,如果我想将变量/自变量从bash脚本传递到python脚本,该怎么办?我怎样才能做到这一点? 基本上,bash会计算出文件名,然后python将其上传,但是当我调用它时,我需要将文件名从bash发送到python。 问题答案: 要在bash脚本中执行python脚本,您需要调用与终端相同的命令。例如 要在python中

  • 问题内容: 我正在尝试从python这样启动PowerShell脚本: 问题是我得到以下错误: 无法加载文件C:\ Users \ sztomi \ workspace \ myproject \ buildxml.ps1,因为在此系统上禁用了脚本的执行。请参阅“获取有关about_signing的帮助”以了解更多详细信息。 尽管事实上我很早以前确实通过键入管理员运行的PS终端来启用Powersh

  • 问题内容: 我有要从Python脚本调用的Perl脚本。我一直在寻找,并没有成功。我基本上是试图调用向Perl脚本发送1变量的方法,但是不需要Perl脚本的输出,因为它是一个自包含程序。 到目前为止,我想出的是: 只有刚刚开始的Python编程,所以我确定以上内容完全是胡说八道。任何帮助将非常感激。 问题答案: 如果您只想打开通往perl解释器的管道,那么您的方向正确。我认为您唯一缺少的是perl

  • 问题内容: 在网站上运行Selenium测试时,我有一些Flash元素无法使用Selenium / Python进行测试。我想调用一个单独的终端窗口,运行Sikuli OCR测试,然后再返回Selenium / Python测试。我还不能完全弄清楚这一点。我将XXX放在我不知道新终端打开并运行Sikuli脚本的参数的位置。 我敢肯定,这里有几处错误。任何帮助将不胜感激。我已经搜索并阅读了可以在此找