[GRASS-stats] can't initiate Grass with initGRASS() in R

William McCoy wdmccoy at geo.umass.edu
Sat Aug 28 14:56:48 EDT 2010


At the suggestion of Roger Bivand, I am moving this issue from r-sig-geo.

I am using spgrass6, but I can't seem to initiate a grass session. I
managed to do this correctly months ago, but can't seem to now. Here
is my code and sessionInfo:

> library(spgrass6)
Loading required package: sp
Loading required package: rgdal
Geospatial Data Abstraction Library extensions to R successfully
loaded
Loaded GDAL runtime: GDAL 1.7.2, released 2010/04/23
Path to GDAL shared files: /usr/local/share/gdal
Loaded PROJ.4 runtime: Rel. 4.7.1, 23 September 2009
Path to PROJ.4 shared files: (autodetected)
Loading required package: XML
GRASS GIS interface loaded with GRASS version: (GRASS not running)
> loc <- initGRASS(gisBase = "/usr/local/grass-6.4.0svn/", home =
> tempdir())
g.gisenv: symbol lookup error: g.gisenv: undefined symbol:
G__no_gisinit
g.gisenv: symbol lookup error: g.gisenv: undefined symbol:
G__no_gisinit
g.gisenv: symbol lookup error: g.gisenv: undefined symbol:
G__no_gisinit
g.gisenv: symbol lookup error: g.gisenv: undefined symbol:
G__no_gisinit
g.gisenv: symbol lookup error: g.gisenv: undefined symbol:
G__no_gisinit
g.region: symbol lookup error: g.region: undefined symbol: G__gisinit
Error in if (file.exists(file) == FALSE) if (!missing(asText) &&
asText == :
argument is of length zero
Error in parseGRASS(cmd) : g.region not parsed

> sessionInfo()
R version 2.11.1 (2010-05-31)
i386-redhat-linux-gnu

locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=C LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats graphics grDevices utils datasets methods base

other attached packages:
[1] spgrass6_0.6-19 XML_3.1-1 rgdal_0.6-28 sp_0.9-66

loaded via a namespace (and not attached):
[1] grid_2.11.1 lattice_0.18-8 tools_2.11.1


Note that dropping the final "/" in my argument to gisBase in the
initGRASS() call does not change the results.

This is on a Fedora 13 system that has both the grass63 package
installed via rpm and also I have grass64svn updated (as of 27 Aug 2010)
compiled and installed.  I have the same problem whether I set gisBase
to the grass63 installation or the grass64svn installation.

Roger responded to my initial message on r-sig-geo with the following:


> Something has happened to your GRASS installation and/or the
> LD_LIBRARY_PATH environment variable. The GRASS binary modules are
> being found, but the libraries (shared objects) they call are not.
> Try to set debug(initGRASS), then step through looking at what is in
> environment variables, etc. After the if () for conditionally setting
> the PATH, look at:
>
> Sys.getenv("PATH") list.files(Sys.getenv("PATH"))
>
> and similarly for LD_LIBRARY_PATH:
>
> Sys.getenv("LD_LIBRARY_PATH")
> list.files(Sys.getenv("LD_LIBRARY_PATH"))
>
> I suspect that the test:
>
> eLDPATH <- Sys.getenv("LD_LIBRARY_PATH")
> grep(basename(Sys.getenv("GISBASE")), eLDPATH)
>
> is not empty, so the LD_LIBRARY_PATH does not get edited to include
> the actual locations of the *.so files.
>
> Have you changed the definitions of these environment variables in a
> .bashrc or similar between this working and no longer working?
> Before starting R, say:
>
> echo $PATH echo $LD_LIBRARY_PATH
>
> to see if that sheds any light on things.
>
> Hope this helps,
>
> Roger


Here is the output from debug after the PATH-setting if() call:


> Browse[2]> Sys.getenv("PATH")
>
>
>
> PATH
> "/usr/local/texlive/2009/bin/i386-linux:/usr/lib/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib/ccache:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/wdmccoy/bin:/usr/local/grass-6.4.0svn/bin:/usr/local/grass-6.4.0svn/scripts"
>
> Browse[2]> list.files(Sys.getenv("PATH"))
> character(0)
> Browse[2]> Sys.getenv("LD_LIBRARY_PATH")
>
>
> LD_LIBRARY_PATH
> "/usr/lib/R/lib:/usr/local/lib:/usr/lib/jvm/jre/lib/i386/server:/usr/lib/jvm/jre/lib/i386:/usr/lib/jvm/java/lib/i386:/usr/java/packages/lib/i386:/lib:/usr/lib:/usr/local/grass-6.4.0svn/lib"
>
> Browse[2]> list.files(Sys.getenv("LD_LIBRARY_PATH"))
> character(0)
>

Here is the output from 'echo $PATH' and 'echo $LD_LIBRARY_PATH':

>
> [wdmccoy at boreas ~]$ echo $PATH
> /usr/local/texlive/2009/bin/i386-linux:/usr/lib/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib/ccache:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/wdmccoy/bin
>
>

>
> [wdmccoy at boreas ~]$ echo $LD_LIBRARY_PATH
>
>

I.e., there is nothing in LD_LIBRARY_PATH. The reason grass64 works by
itself (outside of R) is because I have a grass64.conf file in
/etc/ld.so.conf.d and that .conf file contains the single line:

/usr/local/grass-6.4.0svn/lib


I have checked that ldconfig is run and I have tried setting and 
exporting LD_LIBRARY_PATH before running R -- all to no avail.

Does anyone have any ideas about getting this to work in R?


Thanks, Bill


-- 
William D. McCoy
Geosciences
University of Massachusetts
Amherst, MA 01003


More information about the grass-stats mailing list