この投稿には多くの類似点があり
ます。引数でスクリプトにファイル名を渡すRコマンドライン(Windows)
また、この投稿は非常にOSに関連しています。私の答えはWindowsにのみ当てはまります。
おそらくあなたが探しているのはRScript.exe
の代わりですR.exe
。後者はスペースに問題はありません:path\to\RScript "My script.r"
。
退屈なことの1つは、RScript
Rを更新するたびにパスを検索または設定し、これを実行することです。
検索パスにある便利なスクリプトの中で、パスを気にせずにRScriptを実行するための小さな機能を作成しました。誰かが興味を持つかもしれない場合に備えて:
@echo off
setlocal
::Get change to file dir par (-CD must be 1st par)
::================================================
Set CHANGEDIR="F"
If /I %1 EQU -cd (
Set CHANGEDIR="T"
SHIFT
)
::No args given
::=============
If [%1] EQU [] GoTo :USAGE
::Get R path from registry
::========================
:: may check http://code.google.com/p/batchfiles for updates on R reg keys
Call :CHECKSET hklm\software\R-core\R InstallPath
Call :CHECKSET hklm\software\wow6432Node\r-core\r InstallPath
if not defined RINSTALLPATH echo "Error: R not found" & goto:EOF
::Detect filepath when arg not starting with "-"
::==============================================
::Note the space after ARGS down here!!!
Set ARGS=
:LOOP
if [%1]==[] (GoTo :ELOOP)
Set ARGS=%ARGS% %1
::Echo [%ARGS%]
Set THIS=%~1
if [%THIS:~0,1%] NEQ [-] (Set FPATH=%~dp1)
SHIFT
GoTo :LOOP
:ELOOP
::echo %FPATH%
::Run Rscript script, changing to its path if asked
::=================================================
If %CHANGEDIR%=="T" (CD %FPATH%)
Echo "%RINSTALLPATH%\bin\Rscript.exe" %ARGS%
"%RINSTALLPATH%\bin\Rscript.exe" %ARGS%
endlocal
:: ==== Subroutines ====
GoTo :EOF
:USAGE
Echo USAGE:
Echo R [-cd] [RScriptOptions] Script [ScriptArgs]
Echo.
Echo -cd changes to script dir. Must be first par.
Echo To get RScript help on options etc.:
Echo R --help
GoTo :EOF
:CHECKSET
if not defined RINSTALLPATH for /f "tokens=2*" %%a in ('reg query %1 /v %2 2^>NUL') do set RINSTALLPATH=%%~b
GoTo :EOF
スクリプトは、実行する前に、実際のRScript呼び出し行を出力します。
-cd
スクリプトディレクトリに自動的に変更するための引数、が追加されていることに注意してください。実際setwd()
、同じパス(または相対パス)に配置された他のスクリプトを呼び出したり、データファイルを読み書きしたりするために、Rの内側からスクリプトパスを推測する(そしてそれをで設定する)のは簡単ではありません。
これ(-cd
)は、スクリプト内から直接呼び出すと便利な場合があるため、他のcommandargを不要にする可能性があります。