2016-05-13 52 views
0

執行批處理文件,我有一個Matlab函數,發現其中這個功能我的電腦內的路徑,然後運行在同一個目錄下一個bat文件。這個bat文件是爲了執行一個R腳本,但是由於一個奇怪的原因而沒有這麼做。從MATLAB

這是我的Matlab的功能:

function [] = myFunction(arg) 

    % Find the directory of the executing script 
    thisDir = fileparts(mfilename('fullpath')); 

    % Save arg as a csv on this directory, this will be read by my R script 
    tmpDir = strcat(thisDir,'/tmp.csv'); 
    csvwrite(tmpDir,arg); 

    % Specify the command to run 
    dosCommand = ['call "' thisDir '/runRscript.bat"']; 
    dos(dosCommand); 

end 

BAT文件具有下面的代碼:

"C:\Program Files\R\R-3.2.2\bin\x64\R.exe" CMD BATCH runRScipt.R 

當我在Matlab運行功能,我得到了以下信息:

C:\用戶\ ... mypath中...> 「C:\ Program Files文件\ r \ R-3.2.2 \ BIN \ 64 \運行R.exe」 CMD批 runRscript.R

由於我在Matlab中得到這個消息,我毫不懷疑它正在查找和讀取批處理文件,但是它無法執行R腳本。我知道bat文件按預期工作,因爲我可以通過命令行運行(與應在MATLAB腳本的「dosCommand」命令),或者通過在.bat文件點擊兩次。

+1

[This](http://stackoverflow.com/questions/14167178/passing-command-line-arguments-to-r-cmd-batch)可能是相關的。 也有似乎是一個特定的包吧,見[這裏](http://www.mathworks.com/matlabcentral/answers/31708-running-r-within-matlab)。 –

回答

0

我找到了答案。出於一個奇怪的原因,dos()命令不起作用,但system()命令將完成這項工作。然後代碼將看起來像這樣:

function [] = myFunction(arg) 

    % Find the directory of the executing script 
    thisDir = fileparts(mfilename('fullpath')); 

    % Save arg as a csv on this directory, this will be read by my R script 
    tmpDir = strcat(thisDir,'/tmp.csv'); 
    csvwrite(tmpDir,arg); 

    % Specify the command to run 
    sysCommand = ['call "' thisDir '/runRscript.bat"']; 
    system(sysCommand); 

end 

而且批處理文件:

「C:\ Program Files文件\ r \ R-3.2.2 \ BIN \ 64 \運行R.exe」 CMD BATCH runRScipt.R

0

而是運行R.exe的請嘗試Rscript.exe。 R.exe在交互式mdoe中運行R代碼,而Rscript以批處理模式運行代碼。理想情況下,你應該找到RSCRIPT可執行文件在相同的路徑中的R可執行文件(即 「C:\ Program Files文件\ r \ R-3.2.2 \ BIN \ 64」 你的情況)

+0

感謝您的回答@abhiieor。 Rscript.exe是在相同的路徑,但即使我改變它,我仍然不能從Matlab執行它。此外,通過此更改,批處理文件不再通過雙擊執行R腳本。 – Victor