R for Macroecology Lecture 4

Download Report

Transcript R for Macroecology Lecture 4

R for Macroecology
GIS + R = Awesome
R and GIS

My point of view


The best approach is to do everything in R, interacting with
GIS software only when necessary
But,

You can also take the opposite approach, through integrated R
functionality within GRASS GIS
Today’s plan



Geographic data types in R
Handling huge files
R in GIS
Geographic data in R

Data types



Vector
Raster
Packages


maptools
raster
Package maptools

readShapePoly() reads in a GIS shape file



Can be plotted
Various functions for converting among formats
Merge polygons
Package raster

the raster package has everything you need for handling
rasters

Read, write, plot, all kinds of queries and manipulations
What is a raster object?

A raster contains




A vector of values
A size (nrow, ncol)
Spatial information (extent, projection, datum)
A raster can have some of these things missing (for
example, no data values, or no projection)
What is a raster object?
> mat = raster(“MAT.tif”)
> mat
class
: RasterLayer
dimensions : 2882, 2880, 8300160 (nrow, ncol,
ncell)
resolution : 0.004166667, 0.004166667 (x, y)
extent
: 0, 12, 48, 60.00833 (xmin, xmax, ymin,
ymax)
projection : +proj=longlat +ellps=WGS84 +datum=WGS84
+no_defs +towgs84=0,0,0
values
: C:/Users/brody/Documents/Teaching/R for
Macroecology/Week 4/MAT.tif
min
: ?
max
: ?
Where’s the data?
Raster objects are different!

Normal objects are stored in memory, for fast access

Raster objects are not always



When you define a raster object R looks at the summary
information and remembers the hard drive locations
Small rasters often do reside in memory
Advantages and disadvantages
The structure of a raster object

Stored as a big vector
1
2
3
4
5
6
7
8
9
.
.
.
.
n
ncol = 8
1 2 3 4 5 6 7 8
9 . . . .
. . . .
. . . .
. . . .
. . . .
. . . . . . . . . . .n
Create a new raster
> newRaster = raster(nrows = 10,ncols = 6,xmn = 0,xmx =
6,ymn = 50,ymx = 60,crs = "+proj=longlat
+datum=WGS84")
> newRaster
class
: RasterLayer
dimensions : 10, 6, 60 (nrow, ncol, ncell)
resolution : 1, 1 (x, y)
extent
: 0, 6, 50, 60 (xmin, xmax, ymin, ymax)
projection : +proj=longlat +datum=WGS84 +ellps=WGS84
+towgs84=0,0,0
values
: none
Create a new raster
> newRaster = setValues(newRaster,1:60)
> plot(newRaster)
Getting values from a raster
> newRaster[22]
[1] 22
> newRaster[2,4]
[1] 10
> getValues(newRaster)[12]
[1] 12
Plotting a raster

plot()




colors



xlim and ylim control plotting window (just like usual)
col specifies the color palette (this works a bit differently)
subsample (defaults to TRUE) determines whether or not to
plot every pixel (if TRUE, only plots at most maxpixel pixels)
rbg(), rainbow(), heat.colors(),
terrain.colors(), topo.colors()
I also like the colors in fBasics package
Can also use image()

Similar, but no scale bar
Plotting examples
plot(newRaster,col = rgb(seq(0,1,0.2),0.5,0.5))
plot(newRaster,maxpixels = 7)
plot(newRaster,xlim =
c(2,5),ylim = c(52,59),col
= rainbow(50))
A few useful ways to explore rasters

zoom()


Opens a new active plotting window with the selected region
click()

Queries a value, if xy = TRUE, also returns the x and y
coordinates
Practice with this stuff
Seeing a function

Many of R’s functions are written in R!
> lm
function (formula, data, subset, weights, na.action,
method = "qr", model = TRUE, x = FALSE, y = FALSE, qr
= TRUE, singular.ok = TRUE, contrasts = NULL, offset,
...)
{
ret.x <- x
ret.y <- y
cl <- match.call()
...
}

You can define your own variations on core functions
Timing your code



We are getting to the point where running time can be
limiting
There are often multiple possible solutions, it can be
worth your time to try to find the fastest
Sys.time()
> S = Sys.time()
> x = rnorm(1000000)
> E = Sys.time()
> E-S
Time difference of 0.375 secs
Handling giant rasters


Huge rasters can be a pain to work with
They can regularly be larger than your RAM

R solves this by not reading into RAM

But – if you are doing lots of queries on a raster, it can be
much faster to convert it to a matrix first

Do what you want to do, and then use rm() to free up
the memory that the matrix was using
Raster data in different formats
Raster
Slow access
Little RAM usage
1
7
13
19
25
31
37
43
49
55
2
8
14
20
26
32
38
44
50
56
3
9
15
21
27
33
39
45
51
57
4
10
16
22
28
34
40
46
52
58
5
11
17
23
29
35
41
47
53
59
6
12
18
24
30
36
42
48
54
60
Matrix
Fast access
Heavy RAM usage
Rows and columns match raster
1
2
3
4
5
6
.
.
.
.
60
Vector
Fast access
Heavy RAM usage
Entries in same order as raster
Raster data in different formats
getValues()
as.matrix()
1
7
13
19
25
31
37
43
49
55
2
8
14
20
26
32
38
44
50
56
3
9
15
21
27
33
39
45
51
57
4
10
16
22
28
34
40
46
52
58
5
11
17
23
29
35
41
47
53
59
6
12
18
24
30
36
42
48
54
60
1
2
3
4
5
6
.
.
.
.
60
Raster data in different formats
getValues()
as.matrix()
raster()
1
7
13
19
25
31
37
43
49
55
2
8
14
20
26
32
38
44
50
56
3
9
15
21
27
33
39
45
51
57
4
10
16
22
28
34
40
46
52
58
5
11
17
23
29
35
41
47
53
59
6
12
18
24
30
36
42
48
54
60
setValues()
1
2
3
4
5
6
.
.
.
.
60
Raster data in different formats
getValues()
as.matrix()
raster()
1
7
13
19
25
31
37
43
49
55
2
8
14
20
26
32
38
44
50
56
3
9
15
21
27
33
39
45
51
57
4
10
16
22
28
34
40
46
52
58
5
11
17
23
29
35
41
47
53
59
6
12
18
24
30
36
42
48
54
60
setValues()
as.matrix(
,by.row = T)
as.vector(t())
1
2
3
4
5
6
.
.
.
.
60
Hard drive management

It can be a pain to have large rasters clogging up your
hard drive

It would be nice to be able to store them zipped, unzip
them automatically when you need them in R, and then
delete the unzipped data

Fortunately, that’s easy!
unzipping and deleting

R function unzip()

You point it to the file you want unzipped, and it does it

Then read in the unzipped file

When you are done with it, use file.remove() to
delete it, leaving just the compressed data behind, to save
space

BE VERY CAREFUL!
Remote data

You can do even better – if data are stored at stable
URLs, you can download, unzip, work on and delete data
all from R

download.file(url,filename)
unzip(filename)



do stuff
file.remove(filename)
Command lines

Anything you can run on a command line can be done
from R, using shell()

Do file manipulations, run scripts, run executables
Linking R and GIS



File formats
Generating Arc scripts in R
Running R within GRASS GIS
File formats

writeRaster()



tif, img, grd, asc, sdat, rst, nc, envi, bil
For me, I have found that tif seems to produce hassle-free
integration with Arc and others
write.shapefile() (package shapefiles)

Also has functions for shp, shx and dbf specifically
Arc scripts from R

It’s probably not the best way, but if there is something
you want to do in Arc, you can generate the script using
R
R and GRASS

GRASS is a free GIS

R commands can be accessed from within GRASS using
the spgrass6 package in R

Lets you do any statistical thing you’d like from within a
(fairly) standard GIS