system {base}
Description
system invokes the OS command specified by command.
Usage
system(command, intern = FALSE,
ignore.stdout = FALSE, ignore.stderr = FALSE,
wait = TRUE, input = NULL, show.output.on.console = TRUE,
minimized = FALSE, invisible = TRUE)
Arguments
- command
- the system command to be invoked, as a character string.
- intern
- a logical (not
NA) which indicates whether to capture the output of the command as an R character vector. - ignore.stdout, ignore.stderr
- a logical (not
NA) indicating whether messages written to ‘stdout’ or ‘stderr’ should be ignored. - wait
- a logical (not
NA) indicating whether the R interpreter should wait for the command to finish, or run it asynchronously. This will be ignored (and the interpreter will always wait) ifintern = TRUE. - input
- if a character vector is supplied, this is copied one string per line to a temporary file, and the standard input of
commandis redirected to the file.
Details
command is parsed as a command plus arguments separated by spaces. So if the path to the command (or an argument) contains spaces, it must be quoted e.g. by shQuote.
The ordering of arguments after the first two has changed from time to time: it is recommended to name all arguments after the first.
There are many pitfalls in using system to ascertain if a command can be run --- Sys.which is more suitable.
Values
If intern = TRUE, a character vector giving the output of the command, one line per character string. (Output lines of more than 8095 bytes will be split.) If the command could not be run an R error is generated. If command runs but gives a non-zero exit status this will be reported with a warning and in the attribute "status" of the result: an attribute "errmsg" may also be available
If intern = FALSE, the return value is an error code ( for success), given the invisible attribute (so needs to be printed explicitly). If the command could not be run for any reason, the value is 127. Otherwise if wait = TRUE the value is the exit status returned by the command, and if wait = FALSE it is (the conventional success value).
Differences between Unix and Windows
How processes are launched differs fundamentally between Windows and Unix-alike operating systems, as do the higher-level OS functions on which this R function is built. So it should not be surprising that there are many differences between OSes in how system behaves. For the benefit of programmers, the more important ones are summarized in this section.
- The most important difference is that on a Unix-alike
systemlaunches a shell which then runscommand. On Windows the command is run directly -- useshellfor an interface which runscommandvia a shell (by default the Windows shellcmd.exe, which has many differences from the POSIX shell).This means that it cannot be assumed that redirection or piping will work in
system(redirection sometimes does, but we have seen cases where it stopped working after a Windows security patch), andsystem2(orshell) must be used on Windows. - What happens to
stdoutandstderrwhen not captured depends on how R is running: Windows batch commands behave like a Unix-alike, but from the Windows GUI they are generally lost.system(intern = TRUE)captures ‘stderr’ when run from the Windows GUI console unlessignore.stderr = TRUE. - The behaviour on error is different in subtle ways (and has differed between R versions).
- The quoting conventions for
commanddiffer, butshQuoteis a portable interface. - Arguments
show.output.on.console,minimized,invisibleonly do something on Windows (and are most relevant toRguithere).
Documentation reproduced from R 3.0.1. License: GPL-2.
