R statistics: Difference between revisions

From GRASS-Wiki
Jump to navigation Jump to search
mNo edit summary
 
(84 intermediate revisions by 12 users not shown)
Line 1: Line 1:
'''Q:''' How do I enjoy high quality statistic analysis in GRASS?
{{toc|right}}


'''A:''' Well, GRASS has got an interface to the most powerful statistics analysis package around: '''''R''''' (http://www.r-project.org)
=== Overview ===
: The [http://cran.r-project.org/web/packages/spgrass6/ '''spgrass6'''] ''R'' addon package provides the R ←→ GRASS interface.


=== Quick start ===
High quality statistical analyses in GRASS GIS are possible thanks to an interface to one of the most powerful statistical analysis packages around: '''''R''''' ([http://www.r-project.org/ https://www.r-project.org]). This R ←→ GRASS GIS interface is provided by the [https://cran.r-project.org/package=rgrass rgrass] ''R''  package. The possibility to directly interact with R strongly increases the statistical and geospatial analysis capabilities of GRASS GIS. See [https://cran.r-project.org/web/views/Spatial.html CRAN Task View: Analysis of Spatial Data] for an overview of the R packages and functions that can be used for reading, visualizing, and analyzing spatial data. 
For the impatient just start it:


  > R
R can be used in combination with GRASS GIS in different ways:
 
  #and install packages directly from the net
  pkgs <- c('akima', 'spgrass6', 'RODBC', 'VR', 'gstat')
 
  install.packages(pkgs, dependencies=TRUE, type='source')


or to get all packages for spatial analysis in one:
* ''Running R 'on top of' GRASS'': which involves transferring GRASS data to R to run statistical functions on the imported data, and possibly write the results back to GRASS. GRASS raster and vector data can be imported in R using the [https://search.r-project.org/CRAN/refmans/rgrass/html/readVECT.html read_VECT()] and [https://search.r-project.org/CRAN/refmans/rgrass/html/readRAST.html read_RAST()] functions provided by [http://cran.r-project.org/web/packages/rgrass/ rgrass]. Similarly, results can be written back using the [https://search.r-project.org/CRAN/refmans/rgrass/html/readRAST.html write_RAST()] and [https://search.r-project.org/CRAN/refmans/rgrass/html/readVECT.html write_VECT()] functions. When we read GRASS maps into R, they become R objects stored in memory, more specifically terra objects, i.e., SpatRaster and SpatVector objects that can then be coerced to other types of R spatial objects.
* ''Using R as a scripting language in GRASS'': GRASS functions can be run from R using the [https://search.r-project.org/CRAN/refmans/rgrass/html/execGRASS.html execGRASS()] function in the ''rgrass'' package. R scripting tools, such as powerful string-processing tools, can be used to 'glue' different functions and tools together.
* ''Using GRASS GIS as a geospatial library in R'': GRASS GIS can be used to extend the geospatial capabilities of R by: (1) offering an extensive and robust set of geospatial tools, and (2) providing a way to work with very large (larger-than-memory) spatial data sets. See Using 'GRASS GIS functionality within an R session' below for more information.


  > R
In practice, one will often combine different approaches, with scripts running GRASS functions, reading resulting maps into R for further analysis, modeling and visualization, and creating new layers in R that are imported back into GRASS.


  #To automatically install the spatial task view, the ctv package needs to be installed, e.g., via
=== Current State ===
  install.packages("ctv")
  library("ctv")


  install.views("Spatial")
R Windows binary packages distributed by the Comprehensive R Archive Network (CRAN) using OSGeo software (chiefly PROJ, GDAL and GEOS) use custom built binaries compatible with the build train used by R and are static linked; at present both 32-bit and 64-bit binaries are deployed. CRAN packages for macOS are also static linked to custom built binaries, again using the build train used by R. Static linkage is used to avoid having to deploy a package manager for external software on which R packages depend, since CRAN as a package manager already supports over 15000 packages with three binary versions (devel, release, old release) for Windows and macOS.
  #or
  update.views("Spatial")
 
 
Once you have '''''R''''' and '''''spgrass6''''' on your system, have a look at this tutorial:
: http://grass.osgeo.org/statsgrass/grass_geostats.html


=== Installation ===
=== Installation ===


First of all you need to install '''''R''''' onto your system.
==== Installation of R core software ====
 
R and many of its addon packages are pre-built and distributed through the CRAN network of mirrors. In addition many Linux distributions prepackage R and a number of the most popular addon toolboxes.
 
All the necessary functions for the GRASS 6 interface are now in packages on CRAN, so that on Linux/Unix (or Mac OSX) installing '''rgdal''' from source with PROJ4 and GDAL installed, or Windows installing from binary, the required packages are: '''sp'''; '''maptools''' (now includes spmaptools); '''rgdal''' (now includes spGDAL, spproj); '''spgrass6''' - now all on CRAN.
 
==== Source packages ====
 
From the R console first pick a local mirror:
chooseCRANmirror()
 
you can then see what it picked with
options("repos")
 
To permanently save the mirror site add it to <tt>~/.Rprofile</tt>. For example:
options(repos=c(CRAN="<nowiki>http://cran.stat.auckland.ac.nz</nowiki>"))
 
 
and then run <tt>install.packages()</tt> as in the Quick Start section above.
 
For more information see http://cran.r-project.org/doc/manuals/R-admin.html
 
==== Linux ====
 
===== Debian and Ubuntu =====
 
''R'' and a number of pre-build cran packages are already present in the main repositories. Start with:
 
# apt-get install r-base r-cran-vr r-cran-rodbc r-cran-xml
 
Once those are installed start "<tt>R</tt>" at the command prompt and install the libraries not packaged by the OS:
: ''n.b. <tt>r-cran-sp</tt> is now shipped as an official Debian/Ubuntu package and can be installed with <tt>apt</tt> as above''
 
install.packages("sp")
install.packages("gstat")
 
Debian/Lenny ships with ''R'' 2.7.1 which is too old for the modern ''rgdal'' package. So we have to fetch an old one from the archive and build it from the Linux command line:
$ wget http://cran.r-project.org/src/contrib/Archive/rgdal/rgdal_0.6-24.tar.gz
$ R CMD INSTALL -l /usr/local/lib/R/site-library rgdal_0.6-24.tar.gz
 
If you are using a newer version of R than that you can install the ''rgdal'' CRAN package directly:
  install.packages("rgdal")
 
And finally, back inside the ''R'' session:
install.packages("spgrass6")
 
 
* [http://cran.r-project.org/bin/linux/debian/README Debian] and [http://cran.r-project.org/bin/linux/ubuntu/README Ubuntu] specific help is also available from the R-project website.
 
You can also use the CRAN Debian package repository: (pick one; adjust distribution as needed [here "Debian/testing"])
deb http://debian.cran.r-project.org/cran2deb/debian-i386 testing/
deb http://debian.cran.r-project.org/cran2deb/debian-amd64 testing/
 
===== RPM based =====
 
* '''RedHat, Suse, Mandrake''' and similar distros: take the latest '''''R''''' RPM and install it
 
==== Mac OSX ====
 
* for install.packages() you might have to rely on building packages from source code. try:
install.packages("spgrass6", type="source", dependencies = TRUE)
 
==== MS Windows ====
 
* Installation:
install.packages("spgrass6", dependencies = TRUE)
 
* Usage I:
On Windows, the easiest way is calling GRASS from R with ''initGRASS()'' from the R package spgrass6. After GRASS has been initialized for R, you have access to GRASS commands from within R. For an example, see http://geomorphometry.org/content/geomorphometry-r-saga-ilwis-grass
 
Go down to the part of the script with the GRASS example, adjust
 
  loc <- initGRASS("C:/GRASS", home=tempdir())
 
as appropriate for your system.
 
* Usage II (taken from the grass-stats-ML):
 
http://lists.osgeo.org/pipermail/grass-stats/2010-September/001274.html
 
at the moment there is following for a Grass-R-connection implemented in WinGrass64
 
(1) the WinGrass64-installer searches during installation for a installed R and writes -
if found - the R-installation-path to %PATH% in the grass64.bat-starting script
(see http://trac.osgeo.org/grass/browser/grass/branches/develbranch_6/mswindows/GRASS-Installer.nsi#L660)
 
(2) you can start "Grass-command-line" - it's a windows-command-line, not a msys-rxvt-terminal
(you can find this starting option under Programs -> Grass64 -> Grass command line; but not as a desktop icon)
 
with this starting option you start a Grass-session in the good old text mode.
if you type R in the command line, then you start R inside a Grass-session like in Linux.
 
[...]
 
Ticket #1103 (new enhancement) WinGrass64 - windows-commandline not released:
 
a Grass-session with wxGui, command-line and R inside a Grass-session would
be possible (as already does in WinGrass7)
 
Ticket #1149 (new enhancement) WinGrass - load R-installation-path dynamically into PATH:
 
Wingrass would recognize also an upgraded R-installation (which does not at the moment)
 
=== Command help ===
 
Start the ''R'' help browser:
help.start()
 
* Select '''Packages''' and then '''spgrass6'''.
 
=== Running ===
: ''by Roger Bivand''
 
The ''R'' interface for GRASS 5.4 was provided by a CRAN package called ''grass''. Changes going forward to the current GRASS 6 release meant that the interface had to be rewritten, and this provided the opportunity to adapt it to the ''sp'' CRAN package classes. Because GRASS provides the same kinds of data as ''sp'' classes handle, and relies on much of the same open source infrastructure (PROJ.4, GDAL, OGR), this step seemed sensible. Wherever possible ''spgrass6'' tries to respect the current region in GRASS to avoid handling raster data with different resolutions or extents. ''R'' is assumed to be running within GRASS:
 
==== Startup ====
* Start GRASS. At the GRASS command line start ''R''.
: ''In this example we will use the sample Spearfish dataset.''
 
Reset the region settings to the defaults
GRASS> g.region -d
 
Load the ''spgrass6'' library:
> library(spgrass6)
 
Get the GRASS environment (mapset, region, map projection, etc.); you can display the metadata for your location by printing G:
> G <- gmeta6()
 
==== Reading in data ====
Read in two raster maps:
> spear <- readRAST6(c("geology", "elevation.dem"),
+          cat=c(TRUE, FALSE), ignore.stderr=TRUE,
+          plugin=NULL)
 
 
The metadata are accessed and available, but are not (yet) used to structure the ''sp'' class objects, here a SpatialGridDataFrame object filled with data from two Spearfish layers. Here is a plot of the elevation data:
> image(spear, attr = 2, col = terrain.colors(20))
 
Add a title to the plot:
> title("Spearfish elevation")
 
[[Image:R_stats_elev.png|center]]
 
In addition, we can show what is going on inside the objects read into R:
> '''str(G)'''
<pre>
List of 26
$ GISDBASE    : chr "/home/rsb/topics/grassdata"
$ LOCATION_NAME: chr "spearfish57"
$ MAPSET      : chr "rsb"
$ DEBUG        : chr "0"
$ GRASS_GUI    : chr "text"
$ projection  : chr "1 (UTM)"
$ zone        : chr "13"
$ datum        : chr "nad27"
$ ellipsoid    : chr "clark66"
$ north        : num 4928010
$ south        : num 4913700
$ west        : num 589980
$ east        : num 609000
$ top          : num 1
$ bottom      : num 0
$ nsres        : num 30
$ nsres3      : num 30
$ ewres        : num 30
$ ewres3      : num 30
$ tbres        : num 1
$ rows        : int 477
$ rows3        : int 477
$ cols        : int 634
$ cols3        : int 634
$ depths      : int 1
$ proj4        : chr "+proj=utm +zone=13 +a=6378206.4 +rf=294.9786982 +no_defs +nadgrids=/home/rsb/topics/grass61/grass-6.1.cvs/etc/nad/conus"
</pre>
 
 
> '''summary(spear)'''
<pre>
Object of class SpatialGridDataFrame
Coordinates:
              min    max
coords.x1  589980  609000
coords.x2 4913700 4928010
Is projected: TRUE
proj4string : [+proj=utm +zone=13 +a=6378206.4 +rf=294.9786982 +no_defs +nadgrids=/home/rsb/topics/grass61/grass-6.1.cvs/etc/nad/conus]
Number of points: 2
Grid attributes:
  cellcentre.offset cellsize cells.dim
1            589995      30      634
2          4913715      30      477
Data attributes:
      geology      elevation.dem 
sandstone:74959  Min.  : 1066 
limestone:61355  1st Qu.: 1200 
shale    :46423  Median : 1316 
sand    :36561  Mean  : 1354 
igneous  :36534  3rd Qu.: 1488 
(Other)  :37636  Max.  : 1840 
NA's    : 8950  NA's  :10101 
</pre>
 
==== Summarizing data ====
We can create a table of cell counts:
> '''table(spear$geology)'''
{| class="wikitable" border="1"
!metamorphic
!transition
!igneous
!sandstone
!limestone
!shale
!sandy shale
!claysand
!sand
|-
|11693
|142
|36534
|74959
|61355
|46423
|11266
|14535
|36561
|}
 
And compare with the equivalent GRASS module:
> '''execGRASS("r.stats", flags=c("c", "l"), parameters=list(input="geology"), ignore.stderr=TRUE)'''
<pre>
1 metamorphic 11693
2 transition 142
3 igneous 36534
4 sandstone 74959
5 limestone 61355
6 shale 46423
7 sandy shale 11266
8 claysand 14535
9 sand 36561
* no data 8950
</pre>
 
 
Create a box plot of geologic types at different elevations:
> '''boxplot(spear$elevation.dem ~ spear$geology, medlwd = 1)'''
 
[[Image:R_stats_boxplot_geo.png|center]]


==== Exporting data back to GRASS ====
(see also [[R statistics/Installation]])
Finally, a SpatialGridDataFrame object is written back to a GRASS raster map:


First prepare some data: (square root of elevation)
''Note: the ...-devel packages are needed if you want to install extra packages incl. '''rgrass''' on your computer.''
> spear$sqdem <- sqrt(spear$elevation.dem)


Fedora:
  sudo dnf install R
  # further packages needed in order to locally compile "rgrass"
  sudo dnf install proj-devel proj-data gdal-devel sqlite-devel xml2 libxml2-devel udunits2-devel


Export data from ''R'' back into a GRASS raster map:
Ubuntu:
> writeRAST6(spear, "sqdemSP", zcol="sqdem", ignore.stderr=TRUE)
  sudo apt-get install r-base
  # further packages needed in order to locally compile "rgrass"
  sudo apt-get install proj-bin proj-data libproj-dev libgdal-dev libsqlite3-dev libxml2-dev r-base-dev


==== Installation of the rgrass package  ====
To install the R package '''rgrass''' on newer versions of R, you simply start R and install the package directly with:


Check that it imported into GRASS ok:
<source lang="rsplus">
> '''execGRASS("r.info", parameters=list(map="sqdemSP"))'''
install.packages("rgrass", dependencies = TRUE)
</source>


<pre>
This will install '''''rgrass''''' and all its dependencies. To use the package, you first need to load it:
+----------------------------------------------------------------------------+
| Layer:    sqdemSP                        Date: Sun May 14 21:59:26 2006    |
| Mapset:  rsb                            Login of Creator: rsb            |
| Location: spearfish57                                                      |
| DataBase: /home/rsb/topics/grassdata                                      |
| Title:    ( sqdemSP )                                                    |
|----------------------------------------------------------------------------|
|                                                                            |
|  Type of Map:  raster              Number of Categories: 255              |
|  Data Type:    FCELL                                                      |
|  Rows:        477                                                        |
|  Columns:      634                                                        |
|  Total Cells:  302418                                                    |
|        Projection: UTM (zone 13)                                          |
|            N:    4928010    S:    4913700  Res:    30                    |
|            E:    609000    W:    589980  Res:    30                    |
|  Range of data:    min =  32.649654 max = 42.895222                      |
|                                                                            |
|  Data Source:                                                            |
|                                                                            |
|                                                                            |
|                                                                            |
|  Data Description:                                                       |
|    generated by r.in.gdal                                                  |
|                                                                            |
|                                                                            |
+----------------------------------------------------------------------------+
</pre>


=== Calling GRASS functionality in R batch job ===
<source lang="rsplus">
library(rgrass)
</source>


To call GRASS functionality within a R batch job, use the initGRASS() function to define the GRASS settings:
If you are using Rstudio, you can install the rgrass package in the usual way (tool → packages). For further instructions and for troubleshooting, see [[R_statistics/Installation]].


    library(spgrass6)
=== How to use ===
   
    # initialisation and the use of spearfish60 data
    initGRASS(gisBase = "/usr/local/grass-6.4.1", home = tempdir(),
              gisDbase = "/home/neteler/grassdata/",
              location = "spearfish60", mapset = "user1", SG="elevation.dem",
              override = TRUE)
   
    system("g.region -d")
    # verify
    gmeta6()
   
    spear <- readRAST6(c("geology", "elevation.dem"),
              cat=c(TRUE, FALSE), ignore.stderr=TRUE,
              plugin=NULL)
   
    summary(spear$geology)


Run this script with
==== Using R within a GRASS GIS session ====


    R CMD BATCH batch.R
If you are primarily a GIS user who wants to run e.g., some statistical tests not available in GRASS, you probably want to run R from within a GRASS GIS session. To do so, first start GRASS GIS and then start R (or RStudio) from the GRASS GIS command line. For more information and examples, see [[R_statistics/rgrass]].


The result is (shorted here):
==== Using GRASS GIS functionality within an R session ====


    cat batch.Rout
If you are primarily an R user who wants to take advantage of the geospatial functions in GRASS, you probably want to use GRASS GIS within an R session. To connect to a GRASS GIS database from within R (or Rstudio), see the instructions on [[R_statistics/rgrass]]. If you are a first time GRASS GIS user, you may want to check out the information for [https://grass.osgeo.org/learn/newcomers/ first time users].
   
    R version 2.10.0 (2009-10-26)
    Copyright (C) 2009 The R Foundation for Statistical Computing
    ISBN 3-900051-07-0
    ...
    > 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)
    >
    > # initialisation and the use of spearfish60 data
    > initGRASS(gisBase = "/usr/local/grass-6.4.1", home = tempdir(), gisDbase = "/home/neteler/grassdata/",
    +          location = "spearfish60", mapset = "user1", SG="elevation.dem", override = TRUE)
    gisdbase    /home/neteler/grassdata/
    location    spearfish60
    mapset      user1
    rows        477
    columns    634
    north      4928010
    south      4913700
    west        589980
    east        609000
    nsres      30
    ewres      30
    projection  +proj=utm +zone=13 +a=6378206.4 +rf=294.9786982 +no_defs
    +nadgrids=/usr/local/grass-6.4.1/etc/nad/conus +to_meter=1.0
    Warning messages:
    1: In dir.create(gisDbase) : '/home/neteler/grassdata' already exists
    2: In dir.create(loc_path) :
      '/home/neteler/grassdata//spearfish60' already exists
    >
    > system("g.region -d")
    > # verify
    > gmeta6()
    gisdbase    /home/neteler/grassdata/
    location    spearfish60
    mapset      user1
    rows        477
    columns    634
    north      4928010
    ...
    >
    > spear <- readRAST6(c("geology", "elevation.dem"),
    +          cat=c(TRUE, FALSE), ignore.stderr=TRUE,
    +          plugin=NULL)
    >
    > summary(spear$geology)
    metamorphic  transition    igneous  sandstone  limestone      shale
          11693        142      36534      74959      61355      46423
    sandy shale    claysand        sand        NA's
          11266      14535      36561        8950
    >
    >
    > proc.time()
      user  system elapsed
      2.891  0.492  3.412


=== Examples ===


=== Getting Support ===
* [https://grasswiki.osgeo.org/wiki/Temporal_data_processing/GRASS_R_raster_time_series_processing Temporal data processing wiki]; a tutorial about time series processing with GRASS GIS and R.
* A short guide on how to [https://tutorials.ecodiv.earth/toc/from_grass_to_r.html get a GRASS function output in R].
* [https://tutorials.ecodiv.earth/toc/grass-import-glcf.html Importing GLCF MODIS woody plant cover] in a GRASS GIS database using an R script.
* [https://tutorials.ecodiv.earth/toc/grass-r-gbif.html Use R to obtain gbif data] and import it in a GRASS GIS database.
* [https://veroandreo.github.io/grass_ncsu_2023/studio_index.html Using Satellite Data for Species Distribution Modeling with GRASS GIS and R]: Workshop at NCSU, April 2023.


* Primary support for ''R'' + GRASS and the ''spgrass6'' package is through the [http://lists.osgeo.org/mailman/listinfo/grass-stats grass-stats] mailing list.
=== Getting help ===


=== GRASS Modules ===
==== Manual pages ====
If you are in R and have loaded the rgrass package, you can get help by typing:


* {{cmd|v.krige|version=65}}: Perform kriging operations in the GRASS environment, using R software functions in background.
<source lang="rsplus">
: Special requirements: '''python-rpy2''' (not ''python-rpy''!)
?rgrass
</source>


(merge info from man page here)
Similarly, to get help for a specific function, e.g., for the function ''read_RAST()'', you type:


=== See also ===
<source lang="rsplus">
?read_RAST
</source>


* R. Bivand, 2007: [http://spatial.nhh.no/R/etc/FBK07 Interfacing R and OSGeo projects: status and perspectives] (Presentation with slides and scripts)
You can also start the ''R'' help page in your browser:


* http://grass.ibiblio.org/statsgrass/index.php#grassR
<source lang="rsplus">
help.start()
</source>


* Using GRASS and R: http://grass.osgeo.org/statsgrass/grass6_r_interface.html
Now, to get the information about the package, select the '''Packages''' entry and then '''rgrass'''.  


* Connecting R to RDBMS: http://grass.osgeo.org/statsgrass/r_and_dbms.html
==== Support from the community ====


* [http://www.r-project.org R-Statistics homepage]
Primary support for ''R'' + GRASS and the ''rgrass'' package is through the [https://lists.osgeo.org/mailman/listinfo/grass-stats grass-stats] mailing list.


* [http://r-spatial.sourceforge.net/ R-spatial main web page]
=== Useful links ===


* [http://geodacenter.asu.edu/r-spatial-projects R Spatial Projects at ASU]
==== R ====


* Neural Networks with GRASS and R (posted by Markus Neteler on the grass-user mailing list) http://www.uam.es/proyectosinv/Mclim/pdf/MBenito_EcoMod.pdf
* [https://r-spatial.org/ R][https://r-spatial.org/ r-spatial main web page]
* [https://cran.r-project.org/web/views/Spatial.html CRAN Task View: Analysis of Spatial Data]
* [https://cengel.github.io/rspatial/2_spDataTypes.nb.html Introduction to Spatial Data Types in R]
* [https://blog.dominodatalab.com/applied-spatial-data-science-with-r/ Applied Spatial Data Science with R] (blog post with examples)
* [https://rsbivand.github.io/rgrass/articles/coerce.html Coercion between object formats] (rgrass vignette)
* [https://rsbivand.github.io/rgrass/articles/use.html Use of GRASS interface] (rgrass vignette)
* [https://rsbivand.github.io/foss4g_2022/modernizing_220822.html Modernizing the R-GRASS interface: confronting barn-raised OSGeo libraries and the evolving R.*spatial package ecosystem] (Workshop at FOSS4G 2022, Florence)


* A detailed example on the use of GRASS and R, with spearfish data: http://casoilresource.lawr.ucdavis.edu/drupal/node/438
==== Related ====


* Using R and GRASS with cygwin: It is possible to use Rterm inside the GRASS shell in cygwin, just as in Unix/Linux or OSX. You should not, however, start Rterm from a cygwin xterm, because Rterm is not expecting to be run in an xterm under Windows, and loses its input. If you use the regular cygwin bash shell, but need to start display windows, start X from within GRASS with startx &, and then start Rterm in the same cygwin shell, not in the xterm.
* [https://rpy2.bitbucket.io/ Python interface to the R Programming Language]: can be used to run R in GRASS Python scripts.


* [http://r-spatial.sourceforge.net/ Spatial data in R] (<code>sp</code>) is a '''''R''''' library that provides classes and methods for spatial data (points, lines, polygons, grids), and to new or existing spatial statistics '''''R''''' packages that use sp, depend on sp, or will become dependent on <code>sp</code>, such as <code>maptools</code>, <code>rgdal</code>, <code>splancs</code>, '''<code>spgrass6</code>''', <code>gstat</code>, <code>spgwr</code> and many others.
==== Articles & books ====


* [http://rpy.sourceforge.net/ RPy] - Python interface to the R Programming Language
* Neural Networks with GRASS and R [https://dx.doi.org/10.1016/j.ecolmodel.2006.03.015 DOI: 10.1016/j.ecolmodel.2006.03.015]
* [http://www.asdar-book.org/ Applied Spatial Data Analysis with R]. Roger S. Bivand, Edzer Pebesma and V. Gómez-Rubio. UseR! Series, Springer. 2nd ed. 2013, xviii+405 pp., Softcover. ISBN: 978-1-4614-7617-7
* [https://www.grassbook.org/ GRASS Book], see last chapter
* [https://www.osgeo.org/journal OSGeo Journal] vol. 1 May 2007 (R. Bivand. Using the R— GRASS interface. ''OSGeo Journal'', 1:31-33, May 2007. ISSN 1614-8746).
* [https://grass.osgeo.org/newsletter/grassnews3.html GRASS News vol.3], June 2005 (R. Bivand. Interfacing GRASS 6 and R. ''GRASS Newsletter'', 3:11-16, June 2005. ISSN 1614-8746)


=== Articles ===
==== Older (but still useful) links ====


* [http://grass.osgeo.org/newsletter/grassnews3.html GRASS News vol.3], June 2005 (R. Bivand. Interfacing GRASS 6 and R. ''GRASS Newsletter'', 3:11-16, June 2005. ISSN 1614-8746).
* [https://web.archive.org/web/20090623093535/http://grass.osgeo.org/statsgrass/grass_geostats.html Using GRASS GIS 6 and R]
* [http://www.osgeo.org/journal OSGeo Journal] vol. 1 May 2007 (R. Bivand. Using the R— GRASS interface. ''OSGeo Journal'', 1:31-33, May 2007. ISSN 1614-8746).
* [http://grassold.osgeo.org/statsgrass/r_and_dbms.html Connecting R to RDBMS]
* [http://www.grassbook.org GRASS Book, last chapter]
* R. Bivand, 2007: [http://spatial.nhh.no/R/etc/FBK07 Interfacing R and OSGeo projects: status and perspectives]: Presentation with slides and scripts.
* M. Neteler and M. Metz, 2011: ''Introduction to GRASS GIS''. GEOSTAT 2011 Landau. [http://geostat-course.org/Topic_NetelerMetz_2011 Download workshop material] (includes a R session)


[[Category:Installation]]
[[Category:Installation]]
Line 463: Line 130:
[[Category:Linking to other languages]]
[[Category:Linking to other languages]]
[[Category:R]]
[[Category:R]]
[[Category:Statistics]]

Latest revision as of 19:58, 19 April 2023

Overview

High quality statistical analyses in GRASS GIS are possible thanks to an interface to one of the most powerful statistical analysis packages around: R (https://www.r-project.org). This R ←→ GRASS GIS interface is provided by the rgrass R package. The possibility to directly interact with R strongly increases the statistical and geospatial analysis capabilities of GRASS GIS. See CRAN Task View: Analysis of Spatial Data for an overview of the R packages and functions that can be used for reading, visualizing, and analyzing spatial data.

R can be used in combination with GRASS GIS in different ways:

  • Running R 'on top of' GRASS: which involves transferring GRASS data to R to run statistical functions on the imported data, and possibly write the results back to GRASS. GRASS raster and vector data can be imported in R using the read_VECT() and read_RAST() functions provided by rgrass. Similarly, results can be written back using the write_RAST() and write_VECT() functions. When we read GRASS maps into R, they become R objects stored in memory, more specifically terra objects, i.e., SpatRaster and SpatVector objects that can then be coerced to other types of R spatial objects.
  • Using R as a scripting language in GRASS: GRASS functions can be run from R using the execGRASS() function in the rgrass package. R scripting tools, such as powerful string-processing tools, can be used to 'glue' different functions and tools together.
  • Using GRASS GIS as a geospatial library in R: GRASS GIS can be used to extend the geospatial capabilities of R by: (1) offering an extensive and robust set of geospatial tools, and (2) providing a way to work with very large (larger-than-memory) spatial data sets. See Using 'GRASS GIS functionality within an R session' below for more information.

In practice, one will often combine different approaches, with scripts running GRASS functions, reading resulting maps into R for further analysis, modeling and visualization, and creating new layers in R that are imported back into GRASS.

Current State

R Windows binary packages distributed by the Comprehensive R Archive Network (CRAN) using OSGeo software (chiefly PROJ, GDAL and GEOS) use custom built binaries compatible with the build train used by R and are static linked; at present both 32-bit and 64-bit binaries are deployed. CRAN packages for macOS are also static linked to custom built binaries, again using the build train used by R. Static linkage is used to avoid having to deploy a package manager for external software on which R packages depend, since CRAN as a package manager already supports over 15000 packages with three binary versions (devel, release, old release) for Windows and macOS.

Installation

Installation of R core software

(see also R statistics/Installation)

Note: the ...-devel packages are needed if you want to install extra packages incl. rgrass on your computer.

Fedora:

 sudo dnf install R
 # further packages needed in order to locally compile "rgrass"
 sudo dnf install proj-devel proj-data gdal-devel sqlite-devel xml2 libxml2-devel udunits2-devel

Ubuntu:

 sudo apt-get install r-base
 # further packages needed in order to locally compile "rgrass"
 sudo apt-get install proj-bin proj-data libproj-dev libgdal-dev libsqlite3-dev libxml2-dev r-base-dev

Installation of the rgrass package

To install the R package rgrass on newer versions of R, you simply start R and install the package directly with:

install.packages("rgrass", dependencies = TRUE)

This will install rgrass and all its dependencies. To use the package, you first need to load it:

library(rgrass)

If you are using Rstudio, you can install the rgrass package in the usual way (tool → packages). For further instructions and for troubleshooting, see R_statistics/Installation.

How to use

Using R within a GRASS GIS session

If you are primarily a GIS user who wants to run e.g., some statistical tests not available in GRASS, you probably want to run R from within a GRASS GIS session. To do so, first start GRASS GIS and then start R (or RStudio) from the GRASS GIS command line. For more information and examples, see R_statistics/rgrass.

Using GRASS GIS functionality within an R session

If you are primarily an R user who wants to take advantage of the geospatial functions in GRASS, you probably want to use GRASS GIS within an R session. To connect to a GRASS GIS database from within R (or Rstudio), see the instructions on R_statistics/rgrass. If you are a first time GRASS GIS user, you may want to check out the information for first time users.

Examples

Getting help

Manual pages

If you are in R and have loaded the rgrass package, you can get help by typing:

?rgrass

Similarly, to get help for a specific function, e.g., for the function read_RAST(), you type:

?read_RAST

You can also start the R help page in your browser:

help.start()

Now, to get the information about the package, select the Packages entry and then rgrass.

Support from the community

Primary support for R + GRASS and the rgrass package is through the grass-stats mailing list.

Useful links

R

Related

Articles & books

Older (but still useful) links