Frederico Mestre
2015-Sep-29 10:52 UTC
[Rd] Error possibly related with environments/namespace
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
?
[[alternative HTML version deleted]]
Roger Bivand
2015-Sep-30 10:55 UTC
[Rd] Error possibly related with environments/namespace
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 > ? >