【发布时间】:2017-10-18 19:30:25
【问题描述】:
我想从MatLab 调用一个R 脚本,比如myRfile.R。我正在使用带有MatLab 2017a 和R-3.4.2 的Windows 10 机器。我按照之前stackoverflow question. 中的建议使用system 命令,解决方案是执行以下操作:
添加
R的安装位置路径。就我而言,我写addpath C:\Program Files\R\R-3.4.2\bin。确保 R 脚本位于工作目录(或路径)中。
调用函数
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' 未被识别为内部或外部命令, 可运行的程序或批处理文件。
问题:
为什么命令
system('R CMD BATCH myRfile.R')对我不起作用?如果我将
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使用的。