The functions provide an interface to GRASS commands run through
system, based on the values returned by the --interface description
flag using XML parsing. If required parameters are omitted, and
have declared defaults, the defaults will be used.
Usage
execGRASS(
cmd,
flags = NULL,
...,
parameters = NULL,
intern = NULL,
ignore.stderr = NULL,
Sys_ignore.stdout = FALSE,
Sys_wait = TRUE,
Sys_input = NULL,
Sys_show.output.on.console = TRUE,
Sys_minimized = FALSE,
Sys_invisible = TRUE,
echoCmd = NULL,
redirect = FALSE,
legacyExec = NULL
)
stringexecGRASS(
string,
intern = NULL,
ignore.stderr = NULL,
Sys_ignore.stdout = FALSE,
Sys_wait = TRUE,
Sys_input = NULL,
Sys_show.output.on.console = TRUE,
Sys_minimized = FALSE,
Sys_invisible = TRUE,
echoCmd = NULL,
redirect = FALSE,
legacyExec = NULL
)
doGRASS(
cmd,
flags = NULL,
...,
parameters = NULL,
echoCmd = NULL,
legacyExec = NULL
)
parseGRASS(cmd, legacyExec = NULL)
# S3 method for class 'GRASS_interface_desc'
print(x, ...)
getXMLencoding()
setXMLencoding(enc)Arguments
- cmd
GRASS command name.
- flags
character vector of GRASS command flags.
- ...
for
execGRASSanddoGRASS, GRASS module parameters given as R named arguments directly. For theprintmethod, other arguments to print method. The storage modes of values passed must match those required in GRASS, so a single GRASS string must be a character vector of length 1, a single GRASS integer must be an integer vector of length 1 (may be an integer constant such as 10L), and a single GRASS float must be a numeric vector of length 1. For multiple values, use vectors of suitable length.- parameters
list of GRASS command parameters, used if GRASS parameters are not given as R arguments directly; the two methods for passing GRASS parameters may not be mixed. The storage modes of values passed must match those required in GRASS, so a single GRASS string must be a character vector of length 1, a single GRASS integer must be an integer vector of length 1 (may be an integer constant such as 10L), and a single GRASS float must be a numeric vector of length 1. For multiple values, use vectors of suitable length.
- intern
default NULL, in which case set internally from
get.useInternOption; a logical (not 'NA') which indicates whether to make the output of the command an R object. Not available unless 'popen' is supported on the platform.- ignore.stderr
default NULL, taking the value set by
set.ignore.stderrOption, a logical indicating whether error messages written to 'stderr' should be ignored.- Sys_ignore.stdout, Sys_wait, Sys_input
pass extra arguments to
system.- Sys_show.output.on.console, Sys_minimized, Sys_invisible
pass extra arguments to
systemon Windows systems only.- echoCmd
default NULL, taking the logical value set by
set.echoCmdOption, print GRASS command to be executed to console.- redirect
default
FALSE, ifTRUE, add "2>&1" to the command string and setinterntoTRUE; only used in legacy mode.- legacyExec
default NULL, taking the logical value set by
set.legacyExecOptionwhich is initialised toFALSEon "unix" platforms andTRUEotherwise. IfTRUE, usesystem, ifFALSEusesystem2and divert stderr to temporary file to record error messages and warnings from GRASS modules.- string
a string representing one full GRASS statement, using shell syntax: command name, optionally followed by flags and parameters, all separated by whitespaces. Parameters follow the key=value format; if ’value’ contains spaces, then ’value’ must be quoted
- x
object to be printed
- enc
character string to replace UTF-8 in header of XML data generated by GRASS module –interface-description output when the internationalised messages are not in UTF-8 (known to apply to French, which is in latin1)
Value
parseGRASS returns a GRASS_interface_desc object,
doGRASS returns a character string with a proposed GRASS command -
the expanded command name is returned as an attribute, and execGRASS
and stringexecGRASS return what system or system2
return, particularly depending on the intern argument when the
character strings output by GRASS modules are returned.
If intern is FALSE, system returns the module exit
code, while system2 returns the module exit code with
"resOut" and "resErr" attributes.
Details
parseGRASS checks to see whether the GRASS command has been parsed
already and cached in this session; if not, it reads the interface
description, parses it and caches it for future use. doGRASS assembles
a proposed GRASS command with flags and parameters as a string, wrapping
parseGRASS, and execGRASS is a wrapper for doGRASS,
running the command through system (from 0.7-4, the ...
argument is not used for passing extra arguments for system). The
command string is termed proposed, because not all of the particular needs of
commands are provided by the interface description, and no check is made for
the existence of input objects. Support for multiple parameter values added
with help from Patrick Caldon. Support for defaults and for direct use of
GRASS parameters instead of a parameter list suggested by Rainer Krug.
stringexecGRASS is a wrapper around execGRASS, and accepts a
single shell statement as a string (following GRASS's command syntax).
Note
If any package command fails with a UTF-8 error from the XML package, try
using setXMLencoding to work around the problem that GRASS modules
declare –interface-description output as UTF-8 without ensuring that it is
(French is of 6.4.0 RC5 latin1).
Author
Roger S. Bivand, e-mail: Roger.Bivand@nhh.no
Examples
# Run examples if in an active GRASS session in the nc_basic_spm_grass7
Sys.setenv("_SP_EVOLUTION_STATUS_" = "2")
run <- FALSE
GISRC <- Sys.getenv("GISRC")
if (nchar(GISRC) > 0) {
location_name <- read.dcf(GISRC)[1, "LOCATION_NAME"]
if (location_name == "nc_basic_spm_grass7") {
run <- TRUE
}
}
# Save and set echo command option
echoCmdOption <- get.echoCmdOption()
set.echoCmdOption(TRUE)
#> [1] FALSE
if (run) {
# Read and print GRASS interface description for 'r.slope.aspect'
print(parseGRASS("r.slope.aspect"))
}
#> Warning: cannot open file '/file208c3a621f3f': No such file or directory
#> Error in file(con, "r"): cannot open the connection
if (run) {
# Assemble the 'r.slope.aspect' command with specified parameters as a string
doGRASS(
"r.slope.aspect",
flags = c("overwrite"),
elevation = "elevation.dem",
slope = "slope",
aspect = "aspect"
)
}
#> Warning: cannot open file '/file208c3ee72a50': No such file or directory
#> Error in file(con, "r"): cannot open the connection
if (run) {
# Alternatively, specify parameters as a list
params <- list(elevation = "elevation",
slope = "slope",
aspect = "aspect")
doGRASS("r.slope.aspect",
flags = c("overwrite"),
parameters = params)
}
#> Warning: cannot open file '/file208c4a6575a5': No such file or directory
#> Error in file(con, "r"): cannot open the connection
if (run) {
# Read and print GRASS interface description for 'r.buffer'
print(parseGRASS("r.buffer"))
}
#> Warning: cannot open file '/file208c68b2e838': No such file or directory
#> Error in file(con, "r"): cannot open the connection
if (run) {
# Assemble the 'r.buffer' with specified parameters as as string
doGRASS(
"r.buffer",
flags = c("overwrite"),
input = "schools",
output = "bmap",
distances = seq(1000, 15000, 1000)
)
}
#> Warning: cannot open file '/file208c336a6fa7': No such file or directory
#> Error in file(con, "r"): cannot open the connection
if (run) {
# Alternatively, specify parameters as a list
params <- list(
input = "schools",
output = "bmap",
distances = seq(1000, 15000, 1000)
)
doGRASS("r.buffer", flags = c("overwrite"), parameters = params)
}
#> Warning: cannot open file '/file208c3c028b63': No such file or directory
#> Error in file(con, "r"): cannot open the connection
if (run) {
# Restore original echo command option
set.echoCmdOption(echoCmdOption)
# Try executing 'r.stats' command which will fail because "fire_blocksgg"
# does not exist in the mapset
try(res <- execGRASS("r.stats", input = "fire_blocksgg", flags = c("C", "n")),
silent = FALSE)
}
#> Warning: cannot open file '/file208c1f1d8f18': No such file or directory
#> Error in file(con, "r") : cannot open the connection
if (run) {
# Execute 'r.stats' with legacyExec and print the result
res <- execGRASS(
"r.stats",
input = "fire_blocksgg",
flags = c("C", "n"),
legacyExec = TRUE
)
print(res)
}
#> [1] 1
if (run) {
# If the command failed, retrieve error message
if (res != 0) {
resERR <- execGRASS(
"r.stats",
input = "fire_blocksgg",
flags = c("C", "n"),
redirect = TRUE,
legacyExec = TRUE
)
print(resERR)
}
}
#> Warning: running command 'r.stats -C -n input=fire_blocksgg 2>&1' had status 1
#> [1] "ERROR: Raster map <fire_blocksgg> not found"
#> attr(,"status")
#> [1] 1
if (run) {
# Use 'stringexecGRASS' to run a command and print the result
res <- stringexecGRASS("r.stats -p -l input=geology", intern = TRUE)
print(res)
stringexecGRASS(
"r.random.cells --overwrite --quiet output=samples distance=1000 ncells=100 seed=1"
)
}
#> Warning: cannot open file '/file208c34ea952b.err': No such file or directory
#> Error in file(con, "r"): cannot open the connection
if (run) {
# Alternatively, run the same command using 'execGRASS'
execGRASS(
"r.random.cells",
flags = c("overwrite", "quiet"),
output = "samples",
distance = 1000,
ncells = 100L,
seed = 1L
)
}
#> Warning: cannot open file '/file208c52604c26': No such file or directory
#> Error in file(con, "r"): cannot open the connection