Chapter 16 Appendix B Invoking R
Users of R on Windows or macOS should read the OS-specific section first, but command-line use is also supported.
B.1 Invoking R from the command line
When working at a command line on UNIX or Windows, the command ‘R’ can be used both for starting the main R program in the form
R [options] [<infile] [>outfile],
or, via the R CMD
interface, as a wrapper to various R tools (e.g., for processing files in R documentation format or manipulating add-on packages) which are not intended to be called “directly”.
At the Windows command-line, Rterm.exe
is preferred to R
.
You need to ensure that either the environment variable TMPDIR
is unset or it points to a valid place to create temporary files and directories.
Most options control what happens at the beginning and at the end of an R session. The startup mechanism is as follows (see also the on-line help for topic ‘Startup’ for more information, and the section below for some Windows-specific details).
-
Unless –no-environ was given, R searches for user and site files to process for setting environment variables. The name of the site file is the one pointed to by the environment variable
R_ENVIRON
; if this is unset, R_HOME/etc/Renviron.site is used (if it exists). The user file is the one pointed to by the environment variableR_ENVIRON_USER
if this is set; otherwise, files .Renviron in the current or in the user’s home directory (in that order) are searched for. These files should contain lines of the form ‘name=value’. (Seehelp(“Startup”)
for a precise description.) Variables you might want to set includeR_PAPERSIZE
(the default paper size),R_PRINTCMD
(the default print command) andR_LIBS
(specifies the list of R library trees searched for add-on packages). -
Then R searches for the site-wide startup profile unless the command line option –no-site-file was given. The name of this file is taken from the value of the
R_PROFILE
environment variable. If that variable is unset, the default R_HOME/etc/Rprofile.site is used if this exists. -
Then, unless –no-init-file was given, R searches for a user profile and sources it. The name of this file is taken from the environment variable
R_PROFILE_USER
; if unset, a file called .Rprofile in the current directory or in the user’s home directory (in that order) is searched for. - It also loads a saved workspace from file .RData in the current directory if there is one (unless –no-restore or –no-restore-data was specified).
-
Finally, if a function
.First()
exists, it is executed. This function (as well as.Last()
which is executed at the end of the R session) can be defined in the appropriate startup profiles, or reside in .RData.
In addition, there are options for controlling the memory available to the R process (see the on-line help for topic ‘Memory’ for more information). Users will not normally need to use these unless they are trying to limit the amount of memory used by R.
R accepts the following command-line options.
-
–help
-h -
Print short help message to standard output and exit successfully.
- –version
-
Print version information to standard output and exit successfully.
- –encoding=enc
-
Specify the encoding to be assumed for input from the console or
stdin
. This needs to be an encoding known toiconv
: see its help page. (–encoding enc
is also accepted.) The input is re-encoded to the locale R is running in and needs to be representable in the latter’s encoding (so e.g. you cannot re-encode Greek text in a French locale unless that locale uses the UTF-8 encoding). - RHOME
-
Print the path to the R “home directory” to standard output and exit successfully. Apart from the front-end shell script and the man page, R installation puts everything (executables, packages, etc.) into this directory.
-
–save
–no-save -
Control whether data sets should be saved or not at the end of the R session. If neither is given in an interactive session, the user is asked for the desired behavior when ending the session with q(); in non-interactive use one of these must be specified or implied by some other option (see below).
- –no-environ
-
Do not read any user file to set environment variables.
- –no-site-file
-
Do not read the site-wide profile at startup.
- –no-init-file
-
Do not read the user’s profile at startup.
-
–restore
–no-restore
–no-restore-data -
Control whether saved images (file .RData in the directory where R was started) should be restored at startup or not. The default is to restore. (–no-restore implies all the specific –no-restore-* options.)
- –no-restore-history
-
Control whether the history file (normally file .Rhistory in the directory where R was started, but can be set by the environment variable
R_HISTFILE
) should be restored at startup or not. The default is to restore. - –no-Rconsole
-
(Windows only) Prevent loading the Rconsole file at startup.
- –vanilla
-
Combine –no-save, –no-environ, –no-site-file, –no-init-file and –no-restore. Under Windows, this also includes –no-Rconsole.
-
-f file
–file=file -
(not
Rgui.exe
) Take input from file: ‘-’ meansstdin
. Implies –no-save unless –save has been set. On a Unix-alike, shell metacharacters should be avoided in file (but spaces are allowed). - -e expression
-
(not
Rgui.exe
) Use expression as an input line. One or more -e options can be used, but not together with -f or –file. Implies –no-save unless –save has been set. (There is a limit of 10,000 bytes on the total length of expressions used in this way. Expressions containing spaces or shell metacharacters will need to be quoted.) - –no-readline
-
(UNIX only) Turn off command-line editing via readline. This is useful when running R from within Emacs using the ESS (“Emacs Speaks Statistics”) package. See The command-line editor, for more information. Command-line editing is enabled for default interactive use (see –interactive). This option also affects tilde-expansion: see the help for
path.expand
. -
–min-vsize=N
–min-nsize=N -
For expert use only: set the initial trigger sizes for garbage collection of vector heap (in bytes) and cons cells (number) respectively. Suffix ‘M’ specifies megabytes or millions of cells respectively. The defaults are 6Mb and 350k respectively and can also be set by environment variables
R_NSIZE
andR_VSIZE
. - –max-ppsize=N
-
Specify the maximum size of the pointer protection stack as N locations. This defaults to 10000, but can be increased to allow large and complicated calculations to be done. Currently the maximum value accepted is 100000.
- –max-mem-size=N
-
(Windows only) Specify a limit for the amount of memory to be used both for R objects and working areas. This is set by default to the smaller of the amount of physical RAM in the machine and for 32-bit R, 1.5Gb26, and must be between 32Mb and the maximum allowed on that version of Windows.
-
–quiet
–silent
-q -
Do not print out the initial copyright and welcome messages.
- –slave
-
Make R run as quietly as possible. This option is intended to support programs which use R to compute results for them. It implies –quiet and –no-save.
- –interactive
-
(UNIX only) Assert that R really is being run interactively even if input has been redirected: use if input is from a FIFO or pipe and fed from an interactive program. (The default is to deduce that R is being run interactively if and only if stdin is connected to a terminal or
pty
.) Using -e, -f or –file asserts non-interactive use even if –interactive is given.Note that this does not turn on command-line editing.
- –ess
-
(Windows only) Set
Rterm
up for use byR-inferior-mode
in ESS, including asserting interactive use (without the command-line editor) and no buffering of stdout. - –verbose
-
Print more information about progress, and in particular set R’s option
verbose
toTRUE
. R code uses this option to control the printing of diagnostic messages. -
–debugger=name
-d name -
(UNIX only) Run R through debugger name. For most debuggers (the exceptions are
valgrind
and recent versions ofgdb
), further command line options are disregarded, and should instead be given when starting the R executable from inside the debugger. -
–gui=type
-g type -
(UNIX only) Use type as graphical user interface (note that this also includes interactive graphics). Currently, possible values for type are ‘X11’ (the default) and, provided that ‘Tcl/Tk’ support is available, ‘Tk’. (For back-compatibility, ‘x11’ and ‘tk’ are accepted.)
- –arch=name
-
(UNIX only) Run the specified sub-architecture.
- –args
-
This flag does nothing except cause the rest of the command line to be skipped: this can be useful to retrieve values from it with
commandArgs(TRUE)
.
Note that input and output can be redirected in the usual way (using ‘<’ and ‘>’), but the line length limit of 4095 bytes still applies. Warning and error messages are sent to the error channel (stderr
).
The command R CMD
allows the invocation of various tools which are useful in conjunction with R, but not intended to be called “directly”. The general form is
R CMD command args
where command is the name of the tool and args the arguments passed on to it.
Currently, the following tools are available.
-
BATCH
-
Run R in batch mode. Runs
R –restore –save
with possibly further options (see?BATCH
). -
COMPILE
-
(UNIX only) Compile C, C++, Fortran … files for use with R.
-
SHLIB
-
Build shared library for dynamic loading.
-
INSTALL
-
Install add-on packages.
-
REMOVE
-
Remove add-on packages.
-
build
-
Build (that is, package) add-on packages.
-
check
-
Check add-on packages.
-
LINK
-
(UNIX only) Front-end for creating executable programs.
-
Rprof
-
Post-process R profiling files.
-
Rdconv
Rd2txt
-
Convert Rd format to various other formats, including HTML, LaTeX, plain text, and extracting the examples.
Rd2txt
can be used as shorthand forRd2conv -t txt
. -
Rd2pdf
-
Convert Rd format to PDF.
-
Stangle
-
Extract S/R code from Sweave or other vignette documentation
-
Sweave
-
Process Sweave or other vignette documentation
-
Rdiff
-
Diff R output ignoring headers etc
-
config
-
Obtain configuration information
-
javareconf
-
(Unix only) Update the Java configuration variables
-
rtags
-
(Unix only) Create Emacs-style tag files from C, R, and Rd files
-
open
-
(Windows only) Open a file via Windows’ file associations
-
texify
-
(Windows only) Process (La)TeX files with R’s style files
Use
R CMD command --help
to obtain usage information for each of the tools accessible via the R CMD
interface.
In addition, you can use options –arch=, –no-environ, –no-init-file, –no-site-file and –vanilla between R
and CMD
: these affect any R processes run by the tools. (Here –vanilla is equivalent to –no-environ –no-site-file –no-init-file.) However, note that R CMD
does not of itself use any R startup files (in particular, neither user nor site Renviron files), and all of the R processes run by these tools (except BATCH
) use –no-restore. Most use –vanilla and so invoke no R startup files: the current exceptions are INSTALL
, REMOVE
, Sweave
and SHLIB
(which uses –no-site-file –no-init-file).
R CMD cmd args
for any other executable cmd
on the path or given by an absolute filepath: this is useful to have the same environment as R or the specific commands run under, for example to run ldd
or pdflatex
. Under Windows cmd can be an executable or a batch file, or if it has extension .sh
or .pl
the appropriate interpreter (if available) is called to run it.
B.2 Invoking R under Windows
There are two ways to run R under Windows. Within a terminal window (e.g. cmd.exe
or a more capable shell), the methods described in the previous section may be used, invoking by R.exe
or more directly by Rterm.exe
. For interactive use, there is a console-based GUI (Rgui.exe
).
The startup procedure under Windows is very similar to that under UNIX, but references to the ‘home directory’ need to be clarified, as this is not always defined on Windows. If the environment variable R_USER
is defined, that gives the home directory. Next, if the environment variable HOME
is defined, that gives the home directory. After those two user-controllable settings, R tries to find system defined home directories. It first tries to use the Windows “personal” directory (typically My Documents
in recent versions of Windows). If that fails, and environment variables HOMEDRIVE
and HOMEPATH
are defined (and they normally are) these define the home directory. Failing all those, the home directory is taken to be the starting directory.
You need to ensure that either the environment variables TMPDIR
, TMP
and TEMP
are either unset or one of them points to a valid place to create temporary files and directories.
Environment variables can be supplied as ‘name=value’ pairs on the command line.
If there is an argument ending .RData (in any case) it is interpreted as the path to the workspace to be restored: it implies –restore and sets the working directory to the parent of the named file. (This mechanism is used for drag-and-drop and file association with RGui.exe
, but also works for Rterm.exe
. If the named file does not exist it sets the working directory if the parent directory exists.)
The following additional command-line options are available when invoking RGui.exe
.
-
–mdi
–sdi
–no-mdi -
Control whether
Rgui
will operate as an MDI program (with multiple child windows within one main window) or an SDI application (with multiple top-level windows for the console, graphics and pager). The command-line setting overrides the setting in the user’s Rconsole file. - –debug
-
Enable the “Break to debugger” menu item in
Rgui
, and trigger a break to the debugger during command line processing.
Under Windows with R CMD
you may also specify your own .bat, .exe, .sh or .pl file. It will be run under the appropriate interpreter (Perl for .pl) with several environment variables set appropriately, including R_HOME
, R_OSTYPE
, PATH
, BSTINPUTS
and TEXINPUTS
. For example, if you already have latex.exe on your path, then
R CMD latex.exe mydoc
will run LaTeX on mydoc.tex, with the path to R’s share/texmf macros appended to TEXINPUTS
. (Unfortunately, this does not help with the MiKTeX build of LaTeX, but R CMD texify mydoc
will work in that case.)
B.3 Invoking R under macOS
There are two ways to run R under macOS. Within a Terminal.app
window by invoking R
, the methods described in the first subsection apply. There is also console-based GUI (R.app
) that by default is installed in the Applications
folder on your system. It is a standard double-clickable macOS application.
The startup procedure under macOS is very similar to that under UNIX, but R.app
does not make use of command-line arguments. The ‘home directory’ is the one inside the R.framework, but the startup and current working directory are set as the user’s home directory unless a different startup directory is given in the Preferences window accessible from within the GUI.
B.4 Scripting with R
If you just want to run a file foo.R of R commands, the recommended way is to use R CMD BATCH foo.R
. If you want to run this in the background or as a batch job use OS-specific facilities to do so: for example in most shells on Unix-alike OSes R CMD BATCH foo.R &
runs a background job.
You can pass parameters to scripts via additional arguments on the command line: for example (where the exact quoting needed will depend on the shell in use)
R CMD BATCH "--args arg1 arg2" foo.R &
will pass arguments to a script which can be retrieved as a character vector by
args <- commandArgs(TRUE)
This is made simpler by the alternative front-end Rscript
, which can be invoked by
Rscript foo.R arg1 arg2
and this can also be used to write executable script files like (at least on Unix-alikes, and in some Windows shells)
#! /path/to/Rscript
args <- commandArgs(TRUE)
...
q(status=<exit status code>)
If this is entered into a text file runfoo and this is made executable (by chmod 755 runfoo
), it can be invoked for different arguments by
runfoo arg1 arg2
For further options see help(“Rscript”)
. This writes R output to stdout and stderr, and this can be redirected in the usual way for the shell running the command.
If you do not wish to hardcode the path to Rscript
but have it in your path (which is normally the case for an installed R except on Windows, but e.g. macOS users may need to add /usr/local/bin to their path), use
#! /usr/bin/env Rscript
...
At least in Bourne and bash shells, the #!
mechanism does not allow extra arguments like #! /usr/bin/env Rscript –vanilla
.
One thing to consider is what stdin()
refers to. It is commonplace to write R scripts with segments like
chem <- scan(n=24)
2.90 3.10 3.40 3.40 3.70 3.70 2.80 2.50 2.40 2.40 2.70 2.20
5.28 3.37 3.03 3.03 28.95 3.77 3.40 2.20 3.50 3.60 3.70 3.70
and stdin()
refers to the script file to allow such traditional usage. If you want to refer to the process’s stdin, use “stdin”
as a file
connection, e.g. scan(“stdin”, …)
.
Another way to write executable script files (suggested by François Pinard) is to use a here document like
#!/bin/sh
[environment variables can be set here]
R --slave [other options] <<EOF
R program goes here...
EOF
but here stdin()
refers to the program source and “stdin”
will not be usable.
Short scripts can be passed to Rscript
on the command-line via the -e flag. (Empty scripts are not accepted.)
Note that on a Unix-alike the input filename (such as foo.R) should not contain spaces nor shell metacharacters.