从MatLab调用R脚本 - 错误
我想调用一个R脚本,说myRfile.R
,从MatLab
。我正在使用Windows 10
机器,其中MatLab 2017a
和R-3.4.2
。我用的是system
命令的建议在以前stackoverflow question.解决的办法是做到以下几点:从MatLab调用R脚本 - 错误
添加路径的
R
安装位置。在我的情况下,我写了addpath C:\Program Files\R\R-3.4.2\bin
。确保R脚本位于工作目录(或路径)中。
调用函数
system('R CMD BATCH myRfile.R')
。
I,然而,得到的错误标志= 1和下面的印刷在命令窗口:
“R”不被识别为内部或外部的命令, 可操作的程序或批处理文件。
我检查,以确保我可以从CMD导航到相应的文件并调用运行R.exe
R
。相反,如果我呼吁通过system
:
系统( ' “C:\ Program Files文件\ r \ R-3.4.2 \ BIN \ 64 \运行R.exe” CMD批 myRfile.R'); ,
然后脚本正确执行(无错误)。因此,我找到了解决我的问题的方法。但是,我想定义字符串
RPATH = “C:\ Program Files文件\ r \ R-3.4.2 \ BIN \ 64 \运行R.exe”
在开始我的程序并运行命令
system('Rpath CMD BATCH myRfile.R');
这将返回一个类似的错误如前:
“RPATH”不被识别为内部或外部的命令, 运行的程序或批处理文件。
问题:
为什么命令
system('R CMD BATCH myRfile.R')
不适合我?为什么会出现
system
命令工作,如果我写R
直接作为字符串的目录,但如果我通过通过Rpath
给它一个字符串,它不工作?
大厦关闭@ r2evans意见,解决办法是使用setenv
而非addpath
,因为system
使用系统路径来搜索文件。 Program
和Files
之间的空间对于system
命令也有问题。
样品溶液:
% Get the current set of system paths
path1 = getenv('PATH');
% Append directory for R to the system path
path1 = [path1'C:\PROGRA~1\R\R-34~1.2\bin\x64'];
% Update system path
setenv('PATH', path1)
% Run the system command.
system('R CMD BATCH myRfile.R');
一般情况下,一个方式来获得正确的路径打开R
,然后输入命令file.path(R.home())
一个实例。对我而言,这返回"C:/PROGRA~1/R/R-34~1.2". Finally, append
\ bin \ x64`。
@excaza指出,定义到R
的路径的字符串应该被""
包围,以便cmd
正确解释空格。解决方案2:
path1 = getenv('PATH');
% Append directory for R to the system path
path1 = [path1'"C:\Program Files\R\R-3.4.2\bin\x64"'];
% Update system path
setenv('PATH', path1)
% Run the system command.
system('R CMD BATCH myRfile.R');
将“Rpath”放在字符串中间不会传递任何我知道的编程语言中的字符串。使用'sprintf'来生成'system'的字符串参数。 – excaza
当您将R添加到系统路径中时,是否重新启动了matlab? 'getenv('PATH')'包含R目录吗? ([Matlab的“运行外部命令”](https://www.mathworks.com/help/matlab/matlab_external/run-external-commands-scripts-and-programs.html)页面为您工作吗? – r2evans
@excaza'系统('sprintf(Rpath)CMD BATCH Rum_81_genB_VtoH.R')'不起作用,它返回错误'sprintf'不被识别... –