R statistics: Difference between revisions

From GRASS-Wiki
Jump to navigation Jump to search
(use TOC template)
(13 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{toc|right}}
{{toc|right}}


High quality statistic analysis in GRASS GIS is possible thanks to an interface to the most powerful statistics analysis package around: '''''R''''' (http://www.r-project.org).
=== Overview ===


There is support for:
High quality statistic analysis in GRASS GIS is possible thanks to an interface to one of the most powerful statistics analysis package around: '''''R''''' ([http://www.r-project.org/ http://www.r-project.org]). This R ←→ GRASS GIS interface is provided by the [https://cran.r-project.org/package=rgrass7 rgrass7] ''R'' addon package. The possibility to directly interact with R strongly increases the statistical and geospatial analysis capabilities of GRASS. 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. 
* The [http://cran.r-project.org/web/packages/spgrass6/ '''spgrass6'''] ''R'' addon package provides a convenient R ←→ GRASS GIS 6 interface
* The [http://cran.r-project.org/web/packages/rgrass7/ '''rgrass7'''] ''R'' addon package provides a convenient R ←→ GRASS GIS 7 interface


Using R in GRASS GIS directly can has two meanings:
R can be used in conjunction with GRASS GIS in different ways:


* The '''first''' is that R is run "on top of" GRASS, transferring GRASS data to R to run statistical functions on the imported data as R objects in memory, and possibly transfer the results back to GRASS.
* ''Running R 'on top of' GRASS'', transferring GRASS data to R to run statistical functions on the imported data as R objects in memory, and possibly transfer the results back to GRASS. GRASS raster and vector data can be imported in R using the [https://rdrr.io/rforge/rgrass7/man/readVECT.html readVECT()] and [https://rdrr.io/rforge/rgrass7/man/readRAST.html readRAST()] function provided by [http://cran.r-project.org/web/packages/rgrass7/ rgrass7]. Similarly, results can be written back using the [https://rdrr.io/rforge/rgrass7/man/readRAST.html writeRAST()] and [https://rdrr.io/rforge/rgrass7/man/readVECT.html writeVECT()] functions.
* The '''second''' is to leave the data mostly in GRASS, and to use R as a scripting language "on top of" GRASS with execGRASS() - in this case, little data is moved to R, so memory constraints are not important, but R functionality is available.
* ''Using R as a scripting language in GRASS''. GRASS functions can be run from R using the [https://rdrr.io/rforge/rgrass7/man/execGRASS.html execGRASS()] function in the ''rgrass7'' package. R scripting tools, such as powerful string-processing tools and functions for manipulating file names, 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 extent the geospatial capability of R by: (1) offering an extensive and robust set of geospatial tools, and (2) provides a way to work with very large (larger-than-memory) spatial data sets. See Using 'GRASS GIS functionality within a R session' below for more information.


=== Overview ===
In practice, one will often combine different approaches, with scripts running GRASS functions, importing resulting layers in R for further analysis and visualization, and creating new layers in R that are imported back in GRASS.
 
=== Installation ===
 
==== Installation of R core software ====


* [https://cran.r-project.org/web/views/Spatial.html CRAN Task View: Analysis of Spatial Data]
''Note: the ...-devel packages are needed if you want to install extra packages incl. '''rgrass7''' on your computer.''


=== Installation ===
Fedora:
  sudo dnf install R-core
  # further packages needed in order to locally compile "rgrass7"
  sudo dnf install proj-epsg proj-nad proj-devel gdal-devel sqlite-devel xml2 libxml2-devel R-core-devel


See [[R_statistics/Installation]]
Ubuntu:
  sudo apt-get install r-base
  # further packages needed in order to locally compile "rgrass7"
  sudo apt-get install proj-bin proj-data libproj-dev libgdal-dev libsqlite3-dev libxml2-dev r-base-dev


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


Start the ''R'' help browser:
<source lang="rsplus">
help.start()
install.packages("rgrass7", dependencies = TRUE)
</source>


* GRASS GIS 6: Select the '''Packages''' entry and then '''spgrass6'''.
This will install '''''rgrass7''''' and all its dependencies. To use the package, you first need to load it:
* GRASS GIS 7: Select the '''Packages''' entry and then '''rgrass7'''.


=== Using R within a GRASS GIS session ===
<source lang="rsplus">
library("rgrass7")
</source>


* GRASS GIS 6: See [[R_statistics/spgrass6]]
If you are using Rstudio, you can install the rgrass7 package in the usual way (tool → packages). For further instructions and for trouble shooting, see [[R_statistics/Installation]]
* GRASS GIS 7: See [[R_statistics/rgrass7]]


=== Using GRASS GIS functionality within a R session ===
=== How to use ===


To call GRASS functionality from R, use the initGRASS() function to define the GRASS settings:
You can use Using R in conjunction with GRASS GIS in two different ways: (1) run R within a GRASS GIS session, and (2) run GRASS GIS within a R session.


    library(spgrass6)
==== Using R within a GRASS GIS session ====
   
    # 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
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/rgrass7]].


    R CMD BATCH batch.R
==== Using GRASS GIS functionality within a R session ====


The result is (shorted here):
If you are primarily a R user, who wants to take advantage of the advanced geospatial functions in GRASS, you probably want to use GRASS GIS within a R session. To connect to a GRASS GIS database from within R (or Rstudio), see the instructions on [[R_statistics/rgrass7]]. If you are a first time GRASS GIS User, you may want to check out the information for [https://grass.osgeo.org/grass7/ first time users] first.


    cat batch.Rout
=== Examples ===
   
    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


* [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.


=== Getting help ===


=== Getting Support ===
==== Manual pages ====
If you are in R and have loaded the rgrass7 package, you can get the help page of ''rgrass7'' by typing:


* Primary support for ''R'' + GRASS and the ''spgrass6'' package is through the [http://lists.osgeo.org/mailman/listinfo/grass-stats grass-stats] mailing list.
<source lang="rsplus">
?rgrass7
</source>


=== See also ===
Similarly, to get help for a specific function, e.g., for the function ''readRAST()'', you type:


* R. Bivand, 2007: [http://spatial.nhh.no/R/etc/FBK07 Interfacing R and OSGeo projects: status and perspectives] (Presentation with slides and scripts)
<source lang="rsplus">
?readRAST
</source>


* http://grass.ibiblio.org/statsgrass/index.php#grassR
You can also start the ''R'' help page in your browser:


* Using GRASS and R: http://grassold.osgeo.org/statsgrass/grass6_r_interface.html
<source lang="rsplus">
help.start()
</source>


* Connecting R to RDBMS: http://grassold.osgeo.org/statsgrass/r_and_dbms.html
Now, to get the information about the package, select the '''Packages''' entry and then '''rgrass7'''.  


* [http://www.r-project.org R-Statistics homepage]
==== Support from the community ====


* [http://r-spatial.sourceforge.net/ R-spatial main web page]
Primary support for ''R'' + GRASS and the ''rgrass7'' package is through the [http://lists.osgeo.org/mailman/listinfo/grass-stats grass-stats] mailing list.


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


* 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
==== R ====


* A detailed example on the use of GRASS and R, with spearfish data: http://casoilresource.lawr.ucdavis.edu/drupal/node/438
* [http://r-spatial.org/ R][http://r-spatial.org/ -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://github.com/edzer/sp R Classes and Methods for Spatial Data] -  <code>sp</code> package
* [https://github.com/r-spatial/sf Simple Features for R] - <code>sf</code> package.
* [https://blog.dominodatalab.com/applied-spatial-data-science-with-r/ Applied Spatial Data Science with R] (blog post with examples)


* 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.
==== Related ====


* [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.
* [https://rpy2.bitbucket.io/ Python interface to the R Programming Language]: can be used to run R in GRASS Python scripts.


* [http://rpy.sourceforge.net/ RPy] - Python interface to the R Programming Language
==== Articles & books ====


=== Open tickets ===
* 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
* [http://www.grassbook.org/ GRASS Book], see last chapter
* [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://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)


* Ticket {{trac|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)
==== Older (but still useful) links ====


=== Workshop material ===
* [https://web.archive.org/web/20090623093535/http://grass.osgeo.org/statsgrass/grass_geostats.html Using GRASS GIS 6 and R]
* [http://grassold.osgeo.org/statsgrass/r_and_dbms.html Connecting R to RDBMS]
* 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)


* 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)'''
=== Note for users of the legacy GRASS GIS 6 ===


=== Articles ===
If you are still using GRASS GIS 6, see [[R_statistics/spgrass6]] for instructions and examples of using GRASS GIS in conjunction with R. However, you are strongly encouraged to upgrade to GRASS GIS 7. Not only does it offer many improvements and new functionalities (see this [https://trac.osgeo.org/grass/wiki/Grass7/NewFeatures overview of New features]), it also provides a smoother R-GRASS integration on the Windows platform.


* [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).
About 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 a 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.
* [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://www.grassbook.org GRASS Book, last chapter]


[[Category:Installation]]
[[Category:Installation]]

Revision as of 14:31, 13 February 2018

Overview

High quality statistic analysis in GRASS GIS is possible thanks to an interface to one of the most powerful statistics analysis package around: R (http://www.r-project.org). This R ←→ GRASS GIS interface is provided by the rgrass7 R addon package. The possibility to directly interact with R strongly increases the statistical and geospatial analysis capabilities of GRASS. 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 conjunction with GRASS GIS in different ways:

  • Running R 'on top of' GRASS, transferring GRASS data to R to run statistical functions on the imported data as R objects in memory, and possibly transfer the results back to GRASS. GRASS raster and vector data can be imported in R using the readVECT() and readRAST() function provided by rgrass7. Similarly, results can be written back using the writeRAST() and writeVECT() functions.
  • Using R as a scripting language in GRASS. GRASS functions can be run from R using the execGRASS() function in the rgrass7 package. R scripting tools, such as powerful string-processing tools and functions for manipulating file names, 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 extent the geospatial capability of R by: (1) offering an extensive and robust set of geospatial tools, and (2) provides a way to work with very large (larger-than-memory) spatial data sets. See Using 'GRASS GIS functionality within a R session' below for more information.

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

Installation

Installation of R core software

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

Fedora:

 sudo dnf install R-core
 # further packages needed in order to locally compile "rgrass7"
 sudo dnf install proj-epsg proj-nad proj-devel gdal-devel sqlite-devel xml2 libxml2-devel R-core-devel

Ubuntu:

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

Installation of the rgrass7 package

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

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

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

library("rgrass7")

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

How to use

You can use Using R in conjunction with GRASS GIS in two different ways: (1) run R within a GRASS GIS session, and (2) run GRASS GIS within a R session.

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/rgrass7.

Using GRASS GIS functionality within a R session

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

Examples

Getting help

Manual pages

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

?rgrass7

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

?readRAST

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 rgrass7.

Support from the community

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

Useful links

R

Related

Articles & books

Older (but still useful) links

Note for users of the legacy GRASS GIS 6

If you are still using GRASS GIS 6, see R_statistics/spgrass6 for instructions and examples of using GRASS GIS in conjunction with R. However, you are strongly encouraged to upgrade to GRASS GIS 7. Not only does it offer many improvements and new functionalities (see this overview of New features), it also provides a smoother R-GRASS integration on the Windows platform.

About 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 a 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.