How to test for a layer in GRASS GIS mapset using rgrass7
On Tue, 4 Dec 2018, Christian Willmes wrote:
Hello,
I am not sure if this is the correct list to ask this specific question about
executing GRASS GIS from R Scripts.
My problem is how to determine if a layer exists in the current GRASS GIS
mapset or not.
During my script I use r.mapcalc from GRASS GIS to do some expensive
computation. So I want to store and reuse the resulting layer, wich is
produced according to a variable value, in case I need this layer for the
specific variable value again.
If I just omit the overwrite tag it does not work, becasue GRASS GIS stops
the execution on this event.
Error in execGRASS("r.mapcalc", expression = expr) : The command:
r.mapcalc expression="rsl40 = GEBCO_2014_2D_4326 >= -40"
produced an error (1) during execution:
FEHLER: output map <rsl40> exists. To overwrite, use the --overwrite flag
Error in execGRASS("r.mapcalc", expression = expr) : The command:
r.mapcalc expression="land_NA_1_rsl40? =? if( rsl40 , 1 ,null())"
produced an error (1) during execution:
FEHLER: output map <land_NA_1_rsl40> exists. To overwrite, use the
??????? --overwrite flag
So, I tryed to check if a certain layer already exists in the mapset to test
if the computation needs/can be executed or not.
Using the following:
if(execGRASS("g.findfile", element="cell", file=lyrname, mapset='"."')){
??? return(FALSE)
? }else{
??? return(TRUE)
? }
You need to wrap the test in try() if it may not succeed (in nc):
oo <- try(execGRASS("g.findfile", element="cell", file="slope",
mapset="'.'", intern=TRUE), silent=TRUE)
ifelse(class(oo) == "try-error", FALSE, TRUE)
and use intern to capture the output if the file exists. However, you can,
as Rich says, simply overwrite existing files if you wish.
Here it stops, if the layer does not exist:
Note that your R script does not stop, simply g.findfile has returned 1 rather than 0 on exit. Hope this clarifies, Roger
Fehler in execGRASS("g.findfile", element = "cell", file = lyrname, mapset =
"\".\"") :
? The command:
g.findfile element=cell file=rsl40 mapset="."
produced an error (1) during execution:
Does anyone know a solution to this?
Thank you very much!
Best,
Christian
Roger Bivand Department of Economics, Norwegian School of Economics, Helleveien 30, N-5045 Bergen, Norway. voice: +47 55 95 93 55; e-mail: Roger.Bivand at nhh.no https://orcid.org/0000-0003-2392-6140 https://scholar.google.no/citations?user=AWeghB0AAAAJ&hl=en