1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322
|
\section{Windows Batch Files for R}
G. Grothendieck
Software and documentation is (c) 2013 GKX Associates Inc. and licensed
under \href{https://www.gnu.org/licenses/gpl-2.0.html}{GPL 2.0}.
\subsection{Introduction}
This document describes a number of Windows batch, javascript and
\texttt{.hta} files that may be used in conjunction with R. Each is self
contained and independent of the others. Each requires no installation -
just place it on the Windows path\footnote{To display the Windows path
enter \texttt{path} at the Windows \texttt{cmd} line.}.
\texttt{R.bat} and \texttt{Rpathset.bat} are alternatives to each other
intended to facilitate the use of R without having to permanently modify
the Windows system PATH or otherwise use the Windows control panel.
\texttt{R.bat} uses heuristics to automatically locate \texttt{R},
\texttt{MiKTeX} and \texttt{Rtools} while \texttt{Rpathset.bat} takes a
simpler approach of having the user manually edit the \texttt{set}
statements in it to configure it. \texttt{R.bat} does not require
changes when you install a new version of R but \texttt{Rpathset.bat}
does. \texttt{R.bat help} gives a quick overview of that batch file.
\texttt{movedir.bat} and \texttt{copydir.bat} are used for moving or
copying packages from one library to another.
\texttt{el.js} runs its arguments in elevated mode (i.e.~with
Administrator privileges).
\texttt{clip2r.js} copies the current clipboard into a running R
instance. It can be used with vim or other text editor.
\texttt{find-miktex.hta} displays a popup window showing where it found
MiKTeX.
\subsection{R.bat}
\subsubsection{Purpose}
The purpose of R.bat is to facilitate the use of R from the Windows
\texttt{cmd} line by eliminating the need to make any systems 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 \texttt{R.exe},
\texttt{Rgui.exe} or other command.
It is a self contained no-install script with no dependencies so just
place it anywhere on your Windows path.
\subsubsection{Typical Usage}
Typical usage to launch R gui is the following:
\begin{verbatim}
R.bat gui
\end{verbatim}
If R.exe is not on the Windows path or is after R.bat on the path then
the above can be shortened to:
\begin{verbatim}
R gui
\end{verbatim}
Either of these commands runs \texttt{Rgui.exe} along with further
arguments, if any. For example,
\begin{verbatim}
R.bat gui --help
\end{verbatim}
will run:
\begin{verbatim}
Rgui.exe --help
\end{verbatim}
\subsubsection{Other R Executables}
Other executable files that come with R (\texttt{R.exe},
\texttt{Rcmd.exe}, \texttt{Rscript.exe}) can be run in a similar way:
\begin{verbatim}
R.bat --help
R.bat cmd --help
R.bat script --help
\end{verbatim}
(\texttt{RSetReg.exe} is another executable that comes with R for
Windows. It will be discussed later.)
\subsubsection{Support Subcommands}
There are also some support commands:
\begin{verbatim}
R.bat cd
R.bat dir
R.bat help
R.bat show
\end{verbatim}
\texttt{R.bat cd} changes to the \texttt{R\_ROOT} directory (typically
\texttt{C:\textbackslash{}\textbackslash{}Program Files\textbackslash{}\textbackslash{}R}).
\texttt{R.bat dir} displays the contents of that directory.
\texttt{R.bat show} shows the values of the \texttt{R\_} environment
that \texttt{R.bat} uses. Here is a list with typical values. These
values are determined by the script heuristically (or the user can set
any before running \texttt{R.bat} or by customizing \texttt{R.bat}
itself by setting any of them near top of the script).
\begin{verbatim}
R_ARCH=x64
R_CMD=RShow
R_HOME=C:\\Program Files\\R\\R-2.15.2
R_MIKTEX_PATH=\\Program Files (x86)\\MiKTeX 2.9\\miktex\\bin
R_PATH=C:\\Program Files\\R\\R-2.15.2\\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.2
\end{verbatim}
\texttt{R\_PATH}, \texttt{R\_MIKTEX\_PATH} and \texttt{R\_TOOLS\_PATH}
are the paths to the directories holding the \texttt{R}, \texttt{MiKTeX}
and \texttt{Rtools} binaries.
\texttt{R\_CMD} indicates the subcommand or if no subcommand specified
then is derived from the name of the script. For example if the script
were renamed \texttt{Rgui.bat} then if no subcommand were specified it
would default to \texttt{gui}.
\texttt{R\_ROOT} is the directory holding all the R installations.
\texttt{R\_HOME} is the directory of the particular R installation.
\texttt{R\_HOME} is made up of \texttt{R\_ROOT} and \texttt{R\_VER} so
that \texttt{R\_VER} represents the directory that holds the particular
R version used. \texttt{R\_ARCH} is \texttt{i386} or \texttt{x64} for 32
bit or 64 bit R respectively. It can also be specified as \texttt{32} or
\texttt{64} in which case it will be translated automatically.
\subsubsection{Path Setting Subcommands}
The command
\begin{verbatim}
R.bat path
\end{verbatim}
adds \texttt{R\_PATH}, \texttt{R\_MIKTEX\_PATH} and \texttt{R\_TOOLS} to
the Windows path for the current \texttt{cmd} line session. No other
\texttt{cmd} line sessions are affected and there are no permanent
changes to the system. Once this is run one no longer needs R.bat in the
current session as the R binaries such as \texttt{R.exe},
\texttt{Rgui.exe} will be directly on the path. (An alternative to this
is the \texttt{Rpathset.bat} utility which will be described later.)
\begin{verbatim}
R.bat tools
\end{verbatim}
is similar except only \texttt{R\_TOOLS\_PATH} and
\texttt{R\_MIKTEX\_PATH} are added to the path. This might be useful if
you need to use those utilities without R.
\subsubsection{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 \texttt{R\_REGISTRY} is not 0). If R is
not found in the registry the R installation in \texttt{R\_ROOT} which
has the most recent date will be used.
We can change which version of R is used like this:
\begin{verbatim}
set R_VER=R-2.14.0
\end{verbatim}
and now for the remainder of this \texttt{cmd} line session that version
will be used. If one wants to use two different R versions at once we
could spawn a new \texttt{cmd} line session with the new version:
\begin{verbatim}
start
\end{verbatim}
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 and in the new
version will use the specified version.
One can change the registry entry permanently to refer to a particlar
version like this:
\begin{verbatim}
cmd /c set R_VER=R-2.14.0 ^& R.bat SetReg
\end{verbatim}
This requires Administrator privileges so a window will pop up
requesting permission to proceed.
If the registry is empty or \texttt{R\_REGISTRY=0} then the default
version 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 \texttt{cmd} line session with Administrator privileges:
\begin{verbatim}
cmd /c set R_VER=R-2.14.0 ^& R.bat touch
\end{verbatim}
The \texttt{el.js} command that comes with the batch utilities is one
way to elevate the command to run with such privileges:
\begin{verbatim}
el cmd /c set R_VER=R-2.14.0 ^& R.bat touch
\end{verbatim}
Note that \texttt{R.bat SetReg} and \texttt{R.bat touch} make permanent
changes to the system (namely installing or uninstalling the R key and
updating the date on a particular R directory) but the other subcommands
do not.
\subsubsection{Heuristic to Locate R}
\begin{enumerate}
\def\labelenumi{\arabic{enumi}.}
\item
If \texttt{.\textbackslash{}\textbackslash{}R.exe} exists use implied
\texttt{R\_PATH} and skip remaining points.
\item
If
\texttt{.\textbackslash{}\textbackslash{}\{x64,i386\}\textbackslash{}\textbackslash{}R.exe}
or
\texttt{.\textbackslash{}\textbackslash{}bin\textbackslash{}\textbackslash{}\{x64,i386\}\textbackslash{}\textbackslash{}R.exe}
exists use implied \texttt{R\_HOME}.
\item
If \texttt{R\_HOME} defined then derive any of \texttt{R\_ROOT} and
\texttt{R\_VER} that are not already defined.
\item
If \texttt{R\_PATH} defined then derive any of \texttt{R\_ROOT},
\texttt{R\_HOME}, \texttt{R\_VER} and \texttt{R\_ARCH} that are not
already defined.
\item
If \texttt{R\_REGISTRY=1} and R found in registry derive any of
\texttt{R\_HOME}, \texttt{R\_ROOT} and \texttt{R\_VER} that are not
already defined.
\item
If R\_ROOT not defined try
\texttt{\%ProgramFiles\%\textbackslash{}\textbackslash{}R\textbackslash{}\textbackslash{}*},
\texttt{\%ProgramFiles(x86)\%\textbackslash{}\textbackslash{}R\textbackslash{}\textbackslash{}*}
and then \texttt{\%SystemRoot\%\textbackslash{}\textbackslash{}R} else
error.
\item
If \texttt{R\_VER} not defined use last directory in
\texttt{cd \%R\_ROOT\% \& dir /od}.
\item
if \texttt{R\_ARCH} not defined try
\texttt{\%R\_ROOT\%\textbackslash{}\textbackslash{}\%}R\_VER\texttt{\%\textbackslash{}\textbackslash{}bin\textbackslash{}\textbackslash{}x64\textbackslash{}\textbackslash{}R.exe}
and then
\texttt{\%R\_ROOT\%\textbackslash{}\textbackslash{}\%}R\_VER\texttt{\%\textbackslash{}\textbackslash{}bin\textbackslash{}\textbackslash{}i386\textbackslash{}\textbackslash{}R.exe}
\item
If \texttt{R\_ROOT}, \texttt{R\_VER} and \texttt{R\_ARCH} defined skip
remaining points.
\item
If \texttt{R.exe} found on \texttt{PATH} use implied \texttt{R\_PATH}.
\end{enumerate}
\subsection{Rpathset.bat}
An alternative to
\begin{verbatim}
R.bat path
\end{verbatim}
is the \texttt{Rpathset.bat}. Unlike \texttt{R.bat},
\texttt{Rpathset.bat} is not automatic but requires that the user modify
the various set commands in it. Running \texttt{Rpathset.bat} then sets
the path accordingly and from then on in the session one can access
Rgui.exe, etc. on the path. Although \texttt{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.
The set statements are documented in the source of the file itself.
\subsection{movedir.bat and copydir.bat}
\texttt{movedir.bat} and \texttt{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
\texttt{upgrade.packages()} in the target. For example, assuming the
default location for the user libraries:
\begin{verbatim}
cd %userprofile%\\Documents\\win-library
copydir 2.15\\library 3.0\\library
R.bat gui
... now enter update.packages() into R...
\end{verbatim}
\subsection{el.js}
\texttt{el.js} runs its arguments elevated (i.e.~with Administrator
privileges).
\subsection{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.
\subsection{find-mixtex.hta}
This program displays a window showing where MiKTeX was found. It uses
the MiKTeX API. This API is not used by \texttt{R.bat} . It may be
incorporated into \texttt{R.bat} in the future.
|