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 > ? >