2016-05-13 2 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 

Файл летучая имеет следующий код:

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

При запуске функции в Matlab я получаю ниже сообщение:

C: \ Users \ ... mypath ...> "C: \ Program Files \ R \ R-3.2.2 \ bin \ x64 \ R.exe" CMD BATCH runRscript.R

Поскольку я получаю это сообщение в Matlab, я не сомневаюсь, что это поиск и чтение командного файла, но он не может выполнить сценарий R. Я знаю, что файл bat работает должным образом, так как я могу запустить его через командную строку (с командой, которая должна быть «dosCommand» в скрипте Matlab) или дважды щелкнув файл .bat.

+1

[Это] (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 \ x64 \ r.exe" CMD BATCH runRScipt.R

0

Вместо R.exe, пожалуйста, попробуйте Rscript.exe. R.exe запускает R-код в интерактивном mdoe, в то время как Rscript запускает код в пакетном режиме. В идеале вы должны найти исполняемый файл Rscript по тому же пути, что и в исполняемом R (т. Е. «C: \ Program Files \ R \ R-3.2.2 \ bin \ x64» в вашем случае)

+0

Спасибо за ваш ответ @abhiieor. Rscript.exe находится на одном пути, но даже если я его изменю, я все равно не могу выполнить его из Matlab. Кроме того, с этим изменением командный файл больше не выполняет сценарий R, дважды щелкнув его. – Victor

Смежные вопросы