Hello all,
I've got a problem with a function in a R package I've developed
(MetaLandSim).
One of the outputs of my function is the plotting of four images (combining
a graph and a map). This plotting is made in a graphical device, with the
graph in one side and the map in the other.
My function works perfectly fine until it has to plot the map. Then it
stops and I get an error.
However if I load the exact same function in R it runs perfectly well.
This has something to do with environments, but I can't understand whats
wrong. It is also related with the plotting, since if I set the argument
plot.directions to FALSE I get no error.
Here's the code:
#Loading packages
library(MetaLandSim)
library(rgrass7)
#Loading required data
data(rg_exp)
#Loading required maps
presences <- system.file("examples/presences.asc", package="MetaLandSim")
mask <- system.file("examples/landmask.asc", package="MetaLandSim")
#Start GRASS using rgrass7
initGRASS("C:/Program Files (x86)/GRASS GIS 7.0.0", home=tempdir())
#Running function
range.map <- range_raster(presences.map=presences, re.out=rg_exp,
mask.map=mask,plot.directions=TRUE)
Cheers,
Frederico Mestre
?
Error possibly related with environments/namespace
2 messages · Frederico Mestre, Roger Bivand
1 day later
Frederico Mestre <mestre.frederico <at> gmail.com> writes:
Hello all, I've got a problem with a function in a R package I've developed (MetaLandSim).
The function with the problem is a GRASS script embedded in a portmanteau function (doing too much at once). This list is not appropriate, and http://lists.osgeo.org/mailman/listinfo/grass-stats would be much more appropriate, as this has nothing to do with the development of R internals. The function should return an S3 object (list of objects) with plot and summary methods. Then you can see where problems are happening.
However if I load the exact same function in R it runs perfectly well.
This has something to do with environments, but I can't understand whats
wrong. It is also related with the plotting, since if I set the argument
plot.directions to FALSE I get no error.
Here's the code:
#Loading packages
library(MetaLandSim)
library(rgrass7)
#Loading required data
data(rg_exp)
#Loading required maps
presences <- system.file("examples/presences.asc", package="MetaLandSim")
mask <- system.file("examples/landmask.asc", package="MetaLandSim")
#Start GRASS using rgrass7
initGRASS("C:/Program Files (x86)/GRASS GIS 7.0.0", home=tempdir())
#Running function
range.map <- range_raster(presences.map=presences, re.out=rg_exp,
mask.map=mask,plot.directions=TRUE)
The example fails because you expect a mask to be set, and remove it - if it
isn't there, the GRASS script fails. Adding:
execGRASS("r.mask", raster="map.mask") gets me further, but isn't the
problem, which is (in this case):
Browse[2]>
debug: image(raster(readRAST("Nprobability")), main = "Northern probability")
Browse[2]>
Creating BIL support files...
Exporting raster as floating values (bytes=8)
100%
Error in image.default(raster(readRAST("Nprobability")), main = "Northern
probability") :
'z' must be a matrix
so there is an issue here, which might be addressed by raster::raster
(untried). Main take-home point - write simple functions and leave plota and
summaries to methods used on the output objects - anything else is hard to
debug and maintain.
Hope this clarifies,
Roger
Cheers, Frederico Mestre ?