../../_images/logo_R.png

Guida rapida R

R è un ambiente di software libero per il calcolo statistico e la grafica.

Questa Guida Rapida descrive come:

  • usa R per l’aritmetica semplice

  • carica alcuni dati da uno shapefile e mappali

  • fai una trasformazione di coordinate

  • traccia alcuni punti di dati su una mappa

Avvia R

R è essenzialmente un programma a riga di comando, anche se sono disponibili interfacce grafiche. Si digita una linea di codice al prompt, si preme invio, e l’interprete R la valuta e restituisce il risultato.

Suggerimento

Non temere la linea di comando - è una fonte di grande potere. Usate le frecce su e giù per richiamare i comandi in modo da poter modificare gli errori. Premi CTRL-C se sei bloccato e dovresti riavere il prompt.

Choose Geospatial ‣ Spatial Tools ‣ R Statistics. A terminal window opens running R.

Si può iniziare con una semplice aritmetica.

> 3*2
[1] 6

> 1 + 2 * 3 / 4
[1] 2.5

> sqrt(2)
[1] 1.414214

> pi * exp(-1)
[1] 1.155727

Una gamma completa di funzioni aritmetiche, trigonometriche e statistiche sono integrate, e altre migliaia sono disponibili da pacchetti nell’archivio CRAN.

Il prompt principale in R è >, ma c’è anche il prompt di continuazione +`, che appare se R si aspetta più input per fare un’espressione valida. Lo vedrai se dimentichi una parentesi di chiusura o una parentesi.

> sqrt(
+ 2
+ )
[1] 1.414214

Dati di costruzione

Ti starai chiedendo cosa ci faccia il misterioso «uno» tra parentesi quadre nell’output. Questo ti sta dicendo che il risultato è un numero. R può memorizzare cose in vettori unidimensionali, matrici bidimensionali e array multidimensionali. Ci sono molte funzioni che possono generare queste cose. Ecco una semplice sequenza:

> seq(1, 5, len=10)
[1] 1.000000 1.444444 1.888889 2.333333 2.777778 3.222222 3.666667 4.111111
[9] 4.555556 5.000000

Ora puoi vedere che il [9] ci sta dicendo che 4,555 è il nono valore nel vettore.

Se si costruisce una matrice si ottengono le etichette delle righe e delle colonne:

> m = matrix(1:12, 3, 4)
> m
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12

Gli elementi delle matrici possono essere estratti usando le parentesi quadre, con gli indici di riga e colonna separati da virgole. Lascia vuoto un indice per ottenere un’intera riga come vettore. Usa un indice vettoriale per ottenere più righe o colonne come una matrice più piccola:

> m[2,4]
[1] 11

> m[2,]
[1]  2  5  8 11

> m[,3:4]
     [,1] [,2]
[1,]    7   10
[2,]    8   11
[3,]    9   12

I data frame sono strutture di dati che rispecchiano il tipo di struttura che si trova in un RDBMS come Postgres o MySQL. Ogni riga può essere pensata come un record, con le colonne che sono come i campi in un database. Come in un database, ogni campo deve essere dello stesso tipo per ogni record.

In molti modi funzionano come le matrici, ma puoi anche ottenere e impostare le colonne per nome usando $-notation:

> d = data.frame(x=1:10, y=1:10, z=runif(10)) # z is 10 random numbers
> d
        x  y          z
    1   1  1 0.44128080
    2   2  2 0.09394331
    3   3  3 0.51097462
    4   4  4 0.82683828
    5   5  5 0.21826740
    6   6  6 0.65600533
    7   7  7 0.59798278
    8   8  8 0.19003625
    9   9  9 0.24004866
    10 10 10 0.35972749

> d$z
 [1] 0.44128080 0.09394331 0.51097462 0.82683828 0.21826740 0.65600533
 [7] 0.59798278 0.19003625 0.24004866 0.35972749

> d$big = d$z > 0.6  # d$big is now a boolean true/false value
> d[1:5,]
  x y          z   big
1 1 1 0.44128080 FALSE
2 2 2 0.09394331 FALSE
3 3 3 0.51097462 FALSE
4 4 4 0.82683828  TRUE
5 5 5 0.21826740 FALSE

> d$name = letters[1:10] # create a new field of characters
> d[1:5,]
  x y          z   big name
  1 1 1 0.44128080 FALSE    a
  2 2 2 0.09394331 FALSE    b
  3 3 3 0.51097462 FALSE    c
  4 4 4 0.82683828  TRUE    d
  5 5 5 0.21826740 FALSE    e

Caricamento dei dati della mappa

Ci sono molti pacchetti per la manipolazione dei dati spaziali e le statistiche. Alcuni sono inclusi qui e altri possono essere scaricati da CRAN.

Qui caricherai due shapefile - i confini del paese e i luoghi popolati dai dati di Natural Earth. Usa due pacchetti aggiuntivi per ottenere la funzionalità spaziale:

> library(sf)           # Simple Features manipulation Library
> library(ggplot2)      # Plotting library

> countries <- st_read(dsn = "~/data/natural_earth2/ne_10m_admin_0_countries.shp")
> places <- st_read(dsn = "~/data/natural_earth2/ne_10m_populated_places.shp")
> ggplot(countries) + geom_sf()

Questo ci dà una semplice mappa del mondo:

../../_images/r_plot1.png

Quando un set di dati OGR viene letto in R in questo modo, otteniamo un oggetto che si comporta in molti modi come un data frame. Possiamo usare il campo admin` per sottoporre i dati del mondo e ottenere solo il Regno Unito:

> uk <- countries[countries$admin == 'United Kingdom',]
> ggplot(uk) + geom_sf()
../../_images/r_plot2.png

Questo sembra un po” schiacciato per chi vive qui, dato che abbiamo più familiarità con un sistema di coordinate centrato sulla nostra latitudine. Attualmente l’oggetto non ha un sistema di coordinate assegnato.

Hai bisogno di assegnare un SR all’oggetto prima di poterlo trasformare con la funzione sf::st_transform del pacchetto sf. Trasforma in EPSG:27700 che è il sistema di griglia Ordnance Survey of Great Britain:

> ukos <- st_transform(uk,27700)
> ggplot(ukos) + geom_sf()
../../_images/r_plot2_1.png

Questo traccia la mappa di base dei dati trasformati. Ora vuoi aggiungere alcuni punti dal set di dati dei luoghi popolati. Anche in questo caso sottoinvesti i punti che vuoi e li trasformi in coordinate Ordnance Survey Grid Reference:

> ukpop <- places[places$SOV0NAME == 'United Kingdom',]
> ukpop <- st_transform(ukpop,27700)

Aggiungi questi punti alla mappa di base, scalando la loro dimensione per la radice quadrata della popolazione (perché questo rende un simbolo con area proporzionale alla popolazione), imposta il colore al rosso e il carattere di tracciatura a un blob solido:

> ggplot() +
>   geom_sf(data = ukos) +                                                          # add UK shape to the map
>   geom_sf(data = ukpop,                                                           # add the Populated places
>           aes(size = ukpop$POP_MAX/100000),                       # fix size of points (by area)
>           colour = 'red', alpha = 1/5) +                          # set points colour and transparency
>   coord_sf(crs = 27700, datum= sf::st_crs(27700),         # set a bounding box
>            xlim = st_bbox(ukos[c(1,3)]),                          # for the map
>            ylim = st_bbox(ukos[c(2,4)])
>           ) +
>   ggtitle('Uk Population centre sizes') +                         # set the map title
>       theme(legend.position = 'bottom') +                         # Legend position
>           scale_size_area(name = 'Population \nin 100K')  # 0 value means 0 area + legend title

e appare la tua immagine finale:

../../_images/r_plot3.png

Suggerimento

Per uscire da R, digita q() e premi invio. R ti chiederà se vuoi salvare il tuo spazio di lavoro come file immagine dei dati di R. Quando riavvii R da una directory con un file .RData, esso ripristinerà tutti i suoi dati da lì.

Vignette

In passato, la documentazione per i pacchetti R tendeva ad essere costituita da pagine di aiuto scritte in modo sommario per ogni funzione. Ora gli autori dei pacchetti sono incoraggiati a scrivere una “vignetta” come amichevole introduzione al pacchetto. Se esegui la funzione vignette() senza argomenti otterrai la lista di quelle vignette sul tuo sistema. Prova vignette("sf1") per un’introduzione leggermente tecnica al pacchetto R spatial.

E ora?

Per informazioni generali su R, prova la Introduzione a R ufficiale o qualsiasi documentazione della pagina principale del R Project.

Per ulteriori informazioni sugli aspetti spaziali di R, il posto migliore per iniziare è probabilmente il R Spatial Task View

You might also want to check out the R-Spatial and RSpatial pages.