从命令行运行R脚本(以便从Python执行)

4

我正在尝试从命令行运行R脚本(最终目标是在Python脚本的最后一行执行它)。 我不知道批处理文件是什么,也不知道如何使我的R脚本“可执行”。 目前,它被保存为.R文件。 当我从R运行它时,它能够正常工作。
我该如何从Windows命令提示符行执行此操作? 我需要下载一个名为Rscript.exe的东西吗? 我只需将我的R脚本保存为.exe文件吗? 请告诉我最简单的方法来实现这一点。
R:版本3.3 python:版本3.x 操作系统:Windows


如果你在Windows资源管理器中单击图标时它可用,那么简单的 os.system 就可以使用,或者使用设置了 shell=True 选项的 subprocess.Popen。当然,从脚本创建一个exe文件就可以立即使用我刚刚描述的两种方法,但在一些测试和修改阶段可能会很麻烦。 - Jean-François Fabre
3个回答

4
正如提到的那样,Rscript.exe是运行R脚本的自动化可执行文件,随任何R安装一起提供(通常位于bin文件夹中),并且正如@Dirk Eddelbuettel所提到的,这是推荐的自动化版本。在Python中,您可以使用subprocess运行任何外部程序,并包括调用check_outputcheck_callPopen等各种类型,其中后者提供更多功能,例如捕获子进程中的错误。
如果R目录在您的PATH环境变量中,则无需包含完整路径到RScript.exe,而只需程序名称Rscript即可。请注意,这对于Linux或Mac操作系统来说几乎是相同的过程。
command = 'C:/R-3.3/bin/Rscript.exe'          # OR command = 'Rscript'
path2script = 'C:/Path/To/R/Script.R'
arg = '--vanilla'

# CHECK_CALL VERSION
retval = subprocess.check_call([command, arg, path2script], shell=True)

# CALL VERSION
retval = subprocess.call(["'Rscript' 'C:/Path/To/R/Script.R'"])

# POPEN VERSION (W/ CWD AND OUTPUT/ERROR CAPTURE)
curdir = 'C:/Path/To/R/Script'
p = subprocess.Popen(['Rscript', 'Script.R'], cwd=curdir,
                     stdin = subprocess.PIPE, stdout = subprocess.PIPE, 
                     stderr = subprocess.PIPE)            
output, error = p.communicate()

if p.returncode == 0:            
    print('R OUTPUT:\n {0}'.format(output.decode("utf-8")))
else:                
    print('R ERROR:\n {0}'.format(error.decode("utf-8"))) 

谢谢您的回复。我尝试了"CHECK_CALL VERSION"这一行,但它显示我的命令返回了非零退出状态1。当我在命令提示符中运行Rscript.exe full\path\rfile.R时,它完美地工作了。请注意,我的R脚本没有任何返回行,它只使用R2PPT/RDCOMClient包编辑PowerPoint演示文稿。 - W Anderson
仔细检查路径。如注释所述,使用 command = 'Rscript'(不需要 .exe)而不是完整路径,因为您的命令提示符指示您在 PATH 变量中拥有 R。由于没有返回输出,因此 Python 控制台上不应显示任何内容。 - Parfait

3

您已经拥有Rscript,它随您的R版本一起安装。如果R.exeRgui.exe等在您的路径中,则Rscript.exe也在其中。

您可以使用Rscript myFile.R从Python中调用。Rscript比R BATCH CMD ...和其他非常老旧和过时的用法更好。


请问您能详细说明一下吗?我需要在Python中导入任何内容才能完成这个任务吗?我应该像上面提到的那样使用subprocess.Popen吗?您能给出一个在Python中输入的示例吗? - W Anderson
你需要调整你的PATH,这样笔记本就知道R二进制文件的位置了。popen()system()等函数都可以调用它——这几乎就是PATH的作用。如何在Windows上调整PATH已经被多次解释过了。 - Dirk Eddelbuettel

1

你可能已经拥有了R,因为你已经可以运行你的脚本。

你只需要找到它的二进制文件(Rscript.exe文件)。

然后打开Windows命令行([cmd] + [R] > 输入:"cmd" > [enter])

输入完整路径到R.exe,然后输入完整路径到你的脚本。


我有R程序。我还使用jupyter笔记本来运行Python脚本。您能否给出一个确切的示例,告诉我在Windows命令提示符中输入什么来运行R脚本? - W Anderson
这取决于RScript的位置。 首先,您必须在系统中找到二进制文件,可以在R安装文件夹中搜索Rscript.exe。 - Loïc
也许已经在PATH中了,所以尝试在终端中直接输入:Rscript.exe。 - Loïc
当我在Windows命令提示符中输入“Rscript.exe”时,输出为:“'Rscript.exe'不被识别为内部或外部命令,可执行程序或批处理文件”。我猜测它不在路径中,但我不确定它在哪里。目前正在搜索它。 - W Anderson
也许在 R 代码编辑器的选项中,你可以设置解释器的完整路径。 - Loïc
1
谢谢,我找到了 Rscript 的位置,现在可以在命令提示符中使用 -- Rscript.exe full\path\rfile.R。 - W Anderson

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