首页 > 解决方案 > 使用 PypeR 从 Python 内部执行 R 文件

问题描述

我目前的工作项目是编写一个 Python 程序,该程序在各个方面都必须依赖于 R。由于我不太了解 R,而帮助我的人也不太了解 Python,因此实际的 R 代码不在我的程序。相反,他打开记事本,将 R 代码放在那里,然后将其保存为(name).r. 执行时,输出被写入一个 txt 文件,然后 Python 可以读取该文件。

我所要做的就是让 Python 让 R 运行(name).r

我试过使用subprocess.run. 这工作了一段时间,然后由于某种未知的原因停止工作,现在什么也不做。然后我尝试使用 rpy2,它也工作了一段时间;但现在看起来安装已损坏,我无法重新安装它。

我现在想尝试第三个选项:PypeR。我用过pip install pyper。看起来很成功。

为了简单起见,我打开记事本并输入以下内容,并将其保存为hello.r

message <- 'goodbye'
write.table(message,'C:/Users/(my name)/Desktop/(folder)/goodbye.txt',row.names=FALSE,col.names=FALSE)

手动打开 R 并一次一个地复制粘贴行确实有效。但我无法让它从 Python 中工作。以下是我尝试过的一些事情(我总是放在import pyper最前面):

pyper.runR("source('C:/Users/(muy name)/Desktop/(folder)/hello.r')")

这给出了 NameError: name 'dump_stdout' is not defined

pyper.R("source('C:/Users/(my name)/Desktop/(folder)/hello.r')")

这给出了 FileNotFoundError: [WinError 2] The system cannot find the file specified

r=pyper.R("C:/Program Files/R/R-3.4.1/bin/i386/Rgui.exe")
r("source('C:/Users/(my name)/Desktop/(folder)/hello.r')")

这会导致 RGui 打开一个空白的 R 控制台。然后什么也没有发生。当我单击返回 Python 时,控制台显示 Python 很忙,直到我单击停止按钮,然后我得到“OSError: [Errno 22] Invalid argument

执行 hello.r 的正确方法是什么?

谢谢

标签: pythonrpyper

解决方案


看来我明白了。这有效:

r=pyper.R(RCMD="C:/Program Files/R/R-3.4.1/bin/R")
r.run("source('C:/Users/(my name)/Desktop/(folder)/hello.r')")

推荐阅读