2

我尝试通过 python GUI 运行 R 脚本。

在 R 控制台下,我安装了 rgl 包。在 windows-7 中,R 在当前用户文件夹下安装包,而不是 ProgramFiles\R... 文件夹。

我有一个简单的demo.r脚本:

library('rgl')
example('plot3d')

如果我使用新安装的 rgl 包和以下命令行运行 demo.r 脚本:

"c:\ProgramFiles\R\R..\bin\Rscript.exe" demo.r

它完美地工作!

现在,如果我使用以下脚本从 python 运行它:

import subprocess
out = subprocess.check_output([r"c:\ProgramFiles\R\R..\bin\Rscript.exe", "demo.r"])

我收到一条错误消息,提示未找到/安装 rgl。

我检查了如果我的 demo.r 只包含一个简单的打印到屏幕命令,它可以工作。这意味着当从 python 启动时,Rscript.exe 不再知道在哪里可以找到用户文件夹下的 rgl 包。

如果我将 rgl 包文件夹从用户文件夹复制到 ProgramFiles\R... 文件夹,那么它可以工作。

有谁知道我如何指定让 python 运行 R 脚本并使用用户文件夹中的包?

谢谢

4

2 回答 2

0

最好创建一个 lanucher.bat ,我想

R_PATH :C:/Program Files/R/R-version

DEMO_PATH : 你的 demo.r 路径

@echo off
C:
PATH R_PATH;%path%
cd DEMO_PATH
Rscript demo.R 
exit

您将 launcher.bat 保存在LAUNCHER_PATH

现在在 python 中:

import subprocess
out = subprocess.check_output('LAUNCHER_PATH\launcher.bat')

PS:如果您将一些参数添加到您的 python 脚本中,很容易将它们添加到您的 launcher.bat 中,而无需更改您的 python 代码

 Rscript demo.R arg1 arg2
于 2012-11-30T10:59:51.830 回答
0

您需要R_USER在子进程中设置一个环境变量,R 在设置时会查看.Library.site

import subprocess, os
my_env = os.environ.copy()
my_env["R_USER"] =  my_env["HOMEPATH"]
subprocess.check_output([r"c:\ProgramFiles\R\R..\bin\Rscript.exe", "demo.r"], env=my_env)

请注意,这my_env["HOMEPATH"]对我有用,因为那是我的\R\win-library\目录所在的位置。您可能必须使用某些东西, os.path.join(my_env["HOMEPATH"],"documents")具体取决于您的用户库生活的位置(有关?library详细信息,请参见 R 中的内容)。当从任何语言(Powershell、Node 等)在子进程中启动 R 时,同样的逻辑适用

于 2016-08-12T21:43:06.830 回答