# Windows Batch Files for R # G. Grothendieck Software and documentation is (c) 2013 GKX Associates Inc. and licensed under [GPL 2.0](http://www.gnu.org/licenses/gpl-2.0.html). ## Introduction ## This document describes a number of Windows batch, javascript and `.hta` files that may be used in conjunction with R. Each is self contained and independent of the others. None requires installation - just place on the Windows path or in current directory. ^[To display the Windows path enter `path` without arguments at the Windows `cmd` line. To display the path to the current directory enter `cd` without arguments at the Windows `cmd` line.] `R.bat` and `Rpathset.bat` are alternatives to each other intended to facilitate the use of R without permanently modifying the Windows configuration. They can also be useful on systems with restricted access to the registry. `R.bat` uses heuristics to automatically locate `R`, `MiKTeX` and `Rtools`. In contrast, `Rpathset.bat` takes a simpler approach of having the user manually edit the `set` statements in it. `R.bat` does not require changes when you install a new version of R. It will automatically detect this; however, `Rpathset.bat` will require that the `set` statements be modified appropriately. `R.bat help` gives a quick overview and some examples. Another way to use `R.bat` is to copy it to `#Rscript.bat` in which case a call to the new version can be placed in the first line of any R script to turn it into a Windows batch file (as described later). `movedir.bat` and `copydir.bat` are used for moving or copying packages from one library to another such as when R is upgraded to a new version. `el.js` runs its arguments in elevated mode (i.e. with Administrator privileges). `clip2r.js` copies the current clipboard into a running R instance. It can be used with `vim` or other text editor. `find-miktex.hta` displays a popup window showing where it found MiKTeX. ## R.bat ## ### Purpose ### The purpose of `R.bat` is to facilitiate the use of R from the Windows `cmd` line by eliminating the need to make any system changes. There is no need to modify the Windows path or to set any environment variables for standard configurations of R. It will automatically locate R (and Rtools and MiKTeX if installed) and then run `R.exe`, `Rgui.exe` or other command. Another scenario for which it is useful is when there are only restricted permissions available such as no ability to write to the registry. Windows supports 4 sets of environment variables (system, user, volatile, process) and the first three are stored in the registry but the last is stored only in the local process. `R.bat` can work with process environment variables so it can be used in such situations where there are minimal permissions. Like all the other utilities here, `R.bat` is a self contained no-install script with no dependencies so just place it anywhere on your Windows path or in the current directory. ### Typical Usage ### Typical usage of `R.bat` to launch R gui is the following ^[ If `R.exe` were on the Windows path and before `R.bat` then it would have to be written as follows: `R.bat gui`]: R gui This runs `Rgui.exe`. If further arguments are specified they are passed on to `Rgui.exe`. For example, R gui --help will run: Rgui.exe --help ### Subcommands ### If the first argument is optionally one of `cd`, `cmd`, `dir`, `gui`, `help`, `path`, `R`, `script`, `show`, `SetReg`, `tools`, `touch` or the same except for upper/lower case then that argument is referred to as the subcommand. If no subcommand is provided then the default subcommand is derived from the name of the script. If the script is named `R.bat` then the subcommand `R` is implied. If the script has been renamed then any leading `R` is removed from the name and the remainder becomes the default subcommand. For example, if `R.bat` were renamed `Rgui.bat` then issuing `Rgui` would be the same as running `R gui` . ### Other R Executables ### Other executable files that come with R (`R.exe`, `Rcmd.exe`, `Rscript.exe`) can be run in a similar way: R --help R cmd --help R script --help (`RSetReg.exe` is another executable that comes with R for Windows. It will be discussed later.) ### Support Subcommands ### There are also some support commands: R cd R dir R ls R help R show `R cd` changes directory to the `R_ROOT` directory (typically `C:\Program Files\R`). `R dir` displays the contents of that directory in chronological order - oldest first and most recent last. `R ls` is the same as `R dir`. `R show` shows the values of the `R_` environment variables used by `R.bat` . Below is a list with typical values. These values are determined by the script heuristically (or the user can set any before running `R.bat` or `R.bat` itself can be customized by setting any of them near top of the script). R_ARCH=x64 R_CMD=RShow R_HOME=C:\Program Files\R\R-2.15.3 R_MIKTEX_PATH=\Program Files (x86)\MiKTeX 2.9\miktex\bin R_PATH=C:\Program Files\R\R-2.15.3\bin\x64 R_REGISTRY=1 R_ROOT=C:\Program Files\R R_TOOLS=C:\Rtools R_TOOLS_PATH=C:\Rtools\bin;C:\Rtools\gcc-4.6.3\bin; R_TOOLS_VERSION=3.0.0.1927 R_VER=R-2.15.3 `R_PATH`, `R_MIKTEX_PATH` and `R_TOOLS_PATH` are the paths to the directories holding the `R`, `MiKTeX` and `Rtools` binaries (i.e. `.exe` files). `R_CMD` indicates the subcommand or if no subcommand specified then it is derived from the name of the script. For example if the script were renamed `Rgui.bat` then if no subcommand were specified it would default to `gui`. `R_ROOT` is the directory holding all the R installations. `R_HOME` is the directory of the particular R installation. `R_HOME` is made up of `R_ROOT` and `R_VER` so that `R_VER` represents the directory that holds the particular R version used. `R_ARCH` is `i386` or `x64` for 32 bit or 64 bit R respectively. It can also be specified as `32` or `64` in which case it will be translated automatically. See the `R show` output above for examples of values for these variables. ### Path Setting Subcommands ### The command R path adds `R_PATH`, `R_MIKTEX_PATH` and `R_TOOLS` to the Windows path for the current `cmd` line session. No other `cmd` line sessions are affected and there are no permanent changes to the system. Once this is run the R binaries will be on the path so they can be accessed directly without `R.bat` within the same Windows cmd line session. This mode of operation has the advantage that startup will be slightly faster since `R.bat` will not have to run each time that `R` is started. ^[On a 1.9 GHz Windows 8 machine `R.bat show` runs in 0.75 seconds.] Note that if both `R.bat` and `R.exe` exist on the Windows path then the first on the path will be called if one uses: R ...arguments... thus one may wish to enter `R.bat` or `R.exe` rather than just `R` for clarity. Alternately, rename `R.bat` to `Rpath.bat` in which case the command `R path` becomes just `Rpath` and `R` becomes unambiguous. (An alternative to `R path` is the `Rpathset.bat` utility which will be described later.) The command R tools is similar to `R path` except only `R_TOOLS_PATH` and `R_MIKTEX_PATH` are added to the path (but not `R_PATH`). This might be useful if you need to use those utilities without R. ### Selecting R Version ### For R installations using the standard locations and not specifying any of the R_ environment variables the registry will determine which version of R is used (assuming `R_REGISTRY` is not `0`). If R is not found in the registry or if `R_REGISTRY` is `0` then the R installation in `R_ROOT` which has the most recent date will be used. If we enter this at the `cmd` line: set R_VER=R-2.14.0 then for the remainder of this `cmd` line session that version will be used. If one wishes to use two different R versions at once we could spawn a new `cmd` line session: start and then enter the same set command into the new window. Now any use of R in the original window will use the default version whereas in the new `cmd` line window it will use the specified version. One can change the registry entry permanently to refer to a particlar version like this: cmd /c set R_VER=R-2.14.0 ^& R SetReg This requires Administrator privileges. If not already running as Administrator a window will pop up requesting permission to proceed. If the registry is empty or `R_REGISTRY=0` then the default version is not determined by the registry but is determined by which R install directory is the most recent. To make a particular R install directory the most recent run the following in a `cmd` line session with Administrator privileges: R dir el cmd /c set R_VER=R-2.14.0 ^& R touch The value of `R_VER` in the above line must be one of the directories listed by `R dir`. The `el.js` command used in the above code comes with these batch files and provides one way to elevate commands to have Administrator privileges. Note that `R SetReg` and `R touch` make permanent changes to the system (namely installing or uninstalling the R key and updating the date on a particular R directory, respectively) but the other subcommands make no permanent changes. ### Heuristic to Locate R ### 1. If `.\Rgui.exe` exists use implied `R_PATH` and skip remaining points. 2. If `.\{x64,i386}\Rgui.exe` or `.\bin\{x64,i386}\Rgui.exe` exists use implied `R_HOME`. 3. If `R_HOME` defined then derive any of `R_ROOT` and `R_VER` that are not already defined. 4. If `R_PATH` defined then derive any of `R_ROOT`, `R_HOME`, `R_VER` and `R_ARCH` that are not already defined. 5. If `R_REGISTRY=1` and R found in registry derive any of `R_HOME`, `R_ROOT` and `R_VER` that are not already defined. 6. If R_ROOT not defined try `%ProgramFiles%\R\*`, `%ProgramFiles(x86)%\R\*` and then `%SystemRoot%\R` else error. 7. If `R_VER` not defined use last directory in `cd %R_ROOT% & dir /od`. 8. if `R_ARCH` not defined try `%R_ROOT%\%R_VER%\bin\x64\Rgui.exe` and then `%R_ROOT%\%R_VER%\bin\i386\Rgui.exe` 9. If `R_ROOT`, `R_VER` and `R_ARCH` defined skip remaining points. 10. If `Rgui.exe` found on `PATH` use implied `R_PATH`. ## #Rscript.bat ## This is not a separate batch file but is yet another way to call `R.bat`. Its purpose is to turn an R script into a Windows batch file. 1. Copy `R.bat` to a file with the name `#Rscript.bat` like this (from the Windows cmd line): copy R.bat #Rscript.bat 2. Ensure that `#Rscript.bat` is on your windows path. Then we can turn an R script into a `.bat` file by (a) giving the R script a `.bat` extension and (b) putting this line as the first line in the script: `#Rscript %0 %*` This makes the script both a Windows batch file and an R script at the same time. When run as a batch file it will invoke `#Rscript.bat` which in turn will self call the script as an R script. (It would also be possible to run the script directly as an R script. In that case the #Rscript line would be ignored since it would be regarded as a comment by R.) For example, if we have a file `test.bat` with the following two lines: #Rscript %0 %* print(pi) then we can invoke it from the Windows cmd line like this: test ## #Rscript2.bat ## This batch file is used in exactly the same manner as #Rscript.bat . The only difference is that unlike #Rscript.bat which automatically finds R with this script the user must edit it to indicate where R is located. Although this involves an extra installation step in return the script is very simple so its less likely to go wrong and if something does go wrong then its relatively simple to fix since the script itself is simple. If you have a 64 bit system then the only part that needs to be changed is changing the definition of R_HOME to point to your version of R. If you have a 32 bit system then you will also have to modify the definition of R_ARCH on the appropriate line. There is more information on this in the comments at the top of the script. ## Rpathset.bat ## The command Rpathset adds `R_PATH`, `R_MIKTEX_PATH` and `R_TOOLS` to the Windows path for the current `cmd` line session. No other `cmd` line sessions are affected and there are no permanent changes to the system. Once this is run the R binaries will be on the path so they can be accessed directly without `R.bat` . `Rpathset` is an alternative to R path but unlike `R.bat`, `Rpathset.bat` does not have any automatic heuristics. Instead, it requires that the user manually set the relevant variables in its source. Running `Rpathset.bat` then sets the path accordingly and from then on in the session one can access `Rgui.exe`, etc. on the path. Although `Rpathset.bat` involves manual editing it does have the advantage that as a consequence it is very simple -- not much more than a collection of Windows batch set commands. This makes it easy to customize, less fragile to changes in the install procedures of `R` itself and is also more liklely to work on untested Windows configurations. `Rpathset.bat` might be used like this: Rpathset Rgui where `Rgui` is now directly accessing `Rgui.exe` as `Rpathset.bat` has added `R_PATH` to the Windows path. The set statements are documented in the source of the `Rpathset.bat` file itself. ## movedir.bat and copydir.bat ## `movedir.bat` and `copydir.bat` move or copy the packages from one library to another. If used to transfer packages from one version of R to another it is recommended that the user run `upgrade.packages()` in the target. For example, assuming the default location for the user libraries: cd %userprofile%\Documents\win-library copydir 2.15\library 3.0\library R.bat gui ... now enter update.packages(checkBuilt=TRUE) into R... (The `checkBuilt=TRUE` argument forces a rebuild and is normally not required when upgrading to another version that differs only in the minor version number, e.g. from 2.15.2 to 2.15.3.) `movedir.bat` and `copydir.bat` will not overwrite any existing package in the target library so they are particularly safe to use. (If you do wish to overwrite such packages delete them from the target first using the Windows `del` command.) ## el.js ## `el.js` runs its arguments elevated (i.e. with Administrator privileges). For example, el R touch The user will be prompted to allow elevation to proceed. ## clip2r.js ## This program writes the clipboard into the running R session. It can be used with `vim` or other editor. See the source for additional instructions. ## find-mixtex.hta ## This program displays a window showing where MiKTeX was found. It uses the MiKTeX API. This API is not used by `R.bat` . Instead `R.bat` just looks in common places. (Using this API may be incorporated into the `R.bat` heuristic in the future.) ## make-batchfiles-pdf.bat ## This batch file creates a pdf of this documentation from the markdown file `batchfiles.md` . `pandoc` must be installed for this to run. `pandoc` can be found [here](https://code.google.com/p/pandoc/downloads/list). It is run without arguments: make-batchfiles-pdf