2017-10-18 67 views
1

我想调用一个R脚本,说myRfile.R,从MatLab。我正在使用Windows 10机器,其中MatLab 2017aR-3.4.2。我用的是system命令的建议在以前stackoverflow question.解决的办法是做到以下几点:从MatLab调用R脚本 - 错误

  1. 添加路径的R安装位置。在我的情况下,我写了 addpath C:\Program Files\R\R-3.4.2\bin

  2. 确保R脚本位于工作目录(或路径)中。

  3. 调用函数system('R CMD BATCH myRfile.R')

I,然而,得到的错误标志= 1和下面的印刷在命令窗口:

“R”不被识别为内部或外部的命令, 可操作的程序或批处理文件。

我检查,以确保我可以从CMD导航到相应的文件并调用运行R.exeR。相反,如果我呼吁通过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”不被识别为内部或外部的命令, 运行的程序或批处理文件。

问题:

  1. 为什么命令system('R CMD BATCH myRfile.R')不适合我?

  2. 为什么会出现system命令工作,如果我写R直接作为字符串的目录,但如果我通过通过Rpath给它一个字符串,它不工作?

+0

将“Rpath”放在字符串中间不会传递任何我知道的编程语言中的字符串。使用'sprintf'来生成'system'的字符串参数。 – excaza

+1

当您将R添加到系统路径中时,是否重新启动了matlab? 'getenv('PATH')'包含R目录吗? ([Matlab的“运行外部命令”](https://www.mathworks.com/help/matlab/matlab_external/run-external-commands-scripts-and-programs.html)页面为您工作吗? – r2evans

+0

@excaza'系统('sprintf(Rpath)CMD BATCH Rum_81_genB_VtoH.R')'不起作用,它返回错误'sprintf'不被识别... –

回答

2

大厦关闭@ r2evans意见,解决办法是使用setenv而非addpath,因为system使用系统路径来搜索文件。 ProgramFiles之间的空间对于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');