2016-05-13 296 views
0

私はこの関数が自分のPC内にあるパスを見つけ、その同じディレクトリでbatファイルを実行するMatlab関数を持っています。このバットファイルは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:¥Users¥... mypath ...> "C:¥Program Files¥R¥R-3.2.2¥bin¥x64¥R.exe" CMD Batch runRscript.R

Matlabでこのメッセージが表示されているので、バッチファイルの検索と読み取りは間違いありませんが、Rスクリプトの実行に失敗します。私は、コマンドライン(Matlabスクリプトの "dosCommand"でなければならないコマンド)を使って、または.batファイルを2回クリックすることで、バットファイルが期待どおりに動作することを知っています。

+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:\プログラムファイル\ R \ R-3.2.2 \ binに\ x64の\ R.exe" CMDをバッチrunRScipt.R

0

R.exeの代わりにRscript.exeを実行してください。 Rscriptはバッチモードでコードを実行する間、R.exeはインタラクティブなmdoeでRコードを実行します。理想的にはR実行可能ファイルと同じパスでRscript実行ファイルが見つかるはずです(例:C:\ Program Files \ R \ R-3.2.2 \ bin \ x64)

+0

@abhiieorにお返事ありがとうございます。 Rscript.exeは同じパスにありますが、変更してもまだMatlabから実行できません。さらに、この変更により、バッチファイルはRスクリプトをダブルクリックして実行しなくなりました。 – Victor

関連する問題