../../_images/logo_R.png

Inicio rápido de R

R es un entorno y lenguaje de programación para análisis estadístico y gráficos.

Esta Guía de Inicio Rápido describe cómo:

  • usar R para aritmética simple

  • cargar datos desde un shapefile y mapearlos

  • hacer una transformación de coordenadas

  • dibujar algunos datos puntuales en un mapa

Iniciar R

R es esencialmente un programa de línea de comando, aunque tiene disponibles también interfaces de usuario. Se escribe una línea de código en el prompt, se presiona return y el intérprete de R evalúa y muestra el resultado.

Truco

No teman la línea de comando - es una fuente de gran poder. Usando las flechas arriba y abajo para recuperar comandos para que pueda editar errores. Presione CTRL-C si se atasca y debe obtener el mensaje de nuevo.

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

Puede comenzar con la aritmética simple.

> 3*2
[1] 6

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

> sqrt(2)
[1] 1.414214

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

Una gama completa de funciones aritméticas, trigonométricas y estadísticas están integradas, y miles más están disponibles en los paquetes del archivo CRAN.

El mensaje principal en R es >, pero también está el indicador de continuación +, que aparece si R espera más entrada para hacer una expresión válida. Verás esto si olvidas un corchete de cierre o paréntesis.

> sqrt(
+ 2
+ )
[1] 1.414214

Construyendo datos

Uno se puede preguntar por qué aparece un misterioso “uno” entre corchetes en la salida. Esto nos dice que el resultado es un número. R puede almacenar contenido en vectores unidimensionales, matrices bidimensionales y arrays multidimesionales. Hay muchas funciones que pueden crear estos objetos. Aquí está una secuencia simple:

> 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

Ahora se puede ver que [9] nos está diciendo que 4.555 es el noveno valor del vector.

Si se construye una matriz, se obtienen etiquetas de fila y columna:

> 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

Los elementos de las matrices se pueden extraer usando corchetes, con los índices de fila y columna separados por comas. Si se deja uno de los índices en blanco se obtiene la fila entera como un vector. Se puede usar como índice un vector para obtener múltiples filas y columnas como una matriz más pequeña:

> 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

Los data frames son estructuras de datos que imitan el tipo de estructura que nos encontramos en un SGBDR como Postgres o MySQL. Se puede pensar en cada fila como un registro y cada columna como un campo en la base de datos. Como en una base de datos, cada campo debe de ser del mismo tipo para todos los registros.

En general funcionan mucho como las matrices, pero además se pueden seleccionar un conjunto de columnas por nombre usando la notación $:

> 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

Cargando datos de mapas

Hay muchos paquetes para la manipulación y estadística de datos espaciales. Algunos vienen incluidos aquí y otros tienen que ser descargados desde CRAN.

Aquí cargaremos dos shapefiles - las fronteras de paises y las áreas pobladas de la base de datos Natural Earth. Usaremos dos paquetes para conseguir la funcionalidad espacial:

> 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()

Con esto obtenemos un sencillo mapa del mundo:

../../_images/r_plot1.png

Cuando se lee un conjunto de datos OGR en R de esta forma, obtenemos un objeto que se comporta bastante como un data frame. Podemos usar el campo admin para seleccionar de entre los datos mundiales sólo el Reino Unido:

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

Esto puede parecer un poco aplastado a cualquiera que viva allí, ya que estarán más acostumbrados a un sistema de coordenadas centrado en su latitud. Actualmente el objeto no tiene un sistema de coordenadas asignado.

Necesitamos asignar un CRS al objeto antes de poder transformarlo con la función sf::st_transform del paquete sf. Lo transformamos a EPSG:27700, que es sistema de referencia de coordenadas del Servicio Cartográfico de Reino Unido

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

Esto dibuja el mapa básico de los datos transformados. Ahora queremos añadir algunos puntos del conjunto de datos de áreas pobladas. De nuevo, hacemos un subconjutno de los puntos y los transformamos al sistema de referencia de coordenadas del Servicio Cartográfico:

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

Agregamos estos puntos al mapa base, escalando su tamaño por la raíz cuadrada escalada de la población (porque eso hace un símbolo con área proporcional a la población), establecemos el color en rojo y el carácter de trazado en una burbuja sólida:

> 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

y aparece nuestra imagen final:

../../_images/r_plot3.png

Truco

Para salir de R, escriba q() y pulse return. R le preguntará si desea guardar su espacio de trabajo como un archivo de imagen de datos de R. Cuando se inicia R de nuevo desde un directorio con un .RData archivo que restaurará todos sus datos desde allí.

Viñetas

En el pasado, la documentación de los paquetes de R tendía a ser simplemente la página de ayuda para cada función. Ahora, se anima a os autores de paquetes a escribir una “viñeta” como una introducción amistosa al paquete. Si ejecuta la función vignete() sin argumentos, obtendrá la lista de todas las viñetas disponibles en el sistema. Pruebe vignette("sf1") para una introducción ligeramente técnica al paquete espacial R.

¿Qué sigue?

Para información general sobre R, consulte la Introducción a R o cualquier documentación de la página principal del Proyecto R.

Para obtener más información sobre los aspectos espaciales de R, el mejor lugar para comenzar es probablemente la Vista de Tareas Espaciales de R

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