从MatLab调用R脚本-错误

从MatLab调用R脚本-错误,r,windows,matlab,cmd,R,Windows,Matlab,Cmd,我想从MatLab调用一个R脚本,比如myRfile.R。我使用的是带有Matlab2017a和R-3.4.2的Windows10机器。我使用上一篇文章中建议的system命令,解决方案是执行以下操作: 将路径添加到R的安装位置。就我而言,我写作 添加路径C:\Program Files\R\R-3.4.2\bin 确保R脚本位于工作目录(或路径)中 调用函数system('R CMD BATCH myRfile.R') 一、 但是,获取错误标志=1,并在命令窗口中打印以下内容: “R”未被识别

我想从
MatLab
调用一个R脚本,比如
myRfile.R
。我使用的是带有
Matlab2017a
R-3.4.2
Windows10
机器。我使用上一篇文章中建议的
system
命令,解决方案是执行以下操作:

  • 将路径添加到
    R
    的安装位置。就我而言,我写作
    添加路径C:\Program Files\R\R-3.4.2\bin

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

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

  • 一、 但是,获取错误标志=1,并在命令窗口中打印以下内容:

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

    我通过导航到相应的文件并调用
    R.exe
    ,检查以确保可以从cmd运行
    R
    。相反,如果我通过以下方式调用
    系统

    系统(“'C:\Program Files\R\R-3.4.2\bin\x64\R.exe”CMD BATCH myRfile.R')

    然后正确执行脚本(无错误)。因此,我找到了解决问题的办法。一、 但是,您希望定义字符串

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

    在我的程序开始时,运行命令

    系统('Rpath CMD BATCH myRfile.R')

    这将返回与以前类似的错误:

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

    问题:

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

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


  • 基于@r2evans注释,解决方案是使用
    setenv
    而不是
    addpath
    ,因为
    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”。最后,追加
    \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
    的字符串参数。将R添加到系统路径时,是否重新启动了matlab?
    getenv('PATH')
    是否包含R目录?(页面是否适合您?@excaza
    system('sprintf(Rpath)CMD BATCH Rum_81_genB_VtoH.R'))
    不起作用。它返回错误“sprintf”不可识别…您必须使用
    sprintf
    将字符串参数设置为
    system
    ,而不是将其放入内部。同样,
    addpath
    不会对您的系统路径执行任何操作,这正是
    system
    所使用的。