【问题标题】:Call R script from MatLab - Error从 MatLab 调用 R 脚本 - 错误
【发布时间】:2017-10-18 19:30:25
【问题描述】:

我想从MatLab 调用一个R 脚本,比如myRfile.R。我正在使用带有MatLab 2017aR-3.4.2Windows 10 机器。我按照之前stackoverflow question. 中的建议使用system 命令,解决方案是执行以下操作:

  1. 添加R的安装位置路径。就我而言,我写 addpath C:\Program Files\R\R-3.4.2\bin

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

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

然而,我得到错误标志 = 1 并且在命令窗口中打印以下内容:

'R' 未被识别为内部或外部命令, 可运行的程序或批处理文件。

我通过导航到适当的文件并调用 R.exe 来检查以确保我可以从 cmd 运行 R。相反,如果我通过以下方式致电system

system('"C:\Program Files\R\R-3.4.2\bin\x64\R.exe" CMD 批处理 myRfile.R');,

然后脚本被正确执行(没有错误)。因此,我找到了解决我的问题的方法。但是,我想定义字符串

Rpath = "C:\Program Files\R\R-3.4.2\bin\x64\R.exe"

在我的程序开始并运行命令

system('Rpath CMD BATCH myRfile.R');

这会返回与之前类似的错误:

'Rpath' 未被识别为内部或外部命令, 可运行的程序或批处理文件。

问题:

  1. 为什么命令system('R CMD BATCH myRfile.R') 对我不起作用?

  2. 如果我将R 的目录直接写为字符串,为什么system 命令会起作用,但如果我通过Rpath 将字符串传递给它,它就不起作用?

【问题讨论】:

  • ‘Rpath’ 放在字符串中间不会以我知道的任何编程语言传递字符串。使用sprintf 生成system 的字符串参数。
  • 你在系统路径中添加R时,是否重启了matlab? getenv('PATH') 是否包含 R 目录? (Matlab's "run external commands" 页面适合你吗?
  • @excaza system('sprintf(Rpath) CMD BATCH Rum_81_genB_VtoH.R') 不起作用。它返回错误'sprintf' is not a Recognized...
  • 你必须使用sprintf制作system的字符串参数,而不是放在里面
  • 另外,addpath 不会对您的系统路径做任何事情,这是 system 使用的。

标签: r windows matlab cmd


【解决方案1】:

在@r2evans cmets 的基础上,解决方案是使用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'); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    相关资源
    最近更新 更多