2 Introducción a R mediante ejemplos
- Vídeo: https://youtu.be/j5Oxri134xQ
A continuación, se van a introducir distintos aspectos de R mediante ejemplos. No pretende ser un resumen de R sino un repaso de aspectos que se van a utilizar al tratar información geográfica. Se pueden encontrar verdaderas introducciones a R, por ejemplo, en:
- W. J. Owen: The R Guide3.
- G. Rodríguez: Introducing R4.
- P. Torfs, C. Braue: A (very) short introduction to R5.
- W. N. Venables, D. M. Smith and the R Core Team: An Introduction to R6.
The R Guide de W. J. Owen es posiblemente la más conocida.
2.1 Entorno de trabajo

Figura 2.1: Crear un nuevo script.
Trabajaremos con R desde RStudio: iniciamos RStudio que a su vez inicia R. La manera más inmediata de realizar un desarrollo sencillo en R es creando un nuevo archivo de R (un script)7, como se muestra en la figura 2.1, pulsando sobre el icono New file y seleccionando la opción R Script.

Figura 2.2: Ejecutar un nuevo script.
La ventana de RStudio tiene cuatro zonas (figura 2.2). La parte superior izquierda corresponde al archivo R que acabamos de crear. En esta zona iremos escribiendo el código R que desarrollemos (en este caso, copiando-y-pegando el de las figuras siguientes). Para ejecutar una línea de código, situamos el cursor en cualquier parte de la línea y pulsamos sobre el botón Run (figura 2.2). El cursor se sitúa en la línea siguiente para que podamos ejecutarla al volver a pulsar sobre el mismo botón8. En la ventana inferior izquierda, Console, se muestran las instrucciones que se envían a R y el resultado que este devuelve. Si se ha creado o modificado una variable, el resultado se puede ver en la ventana de la parte superior derecha, Environment.
2.2 Funcionamiento general
2.2.1 Asignación y operaciones aritméticas
A continuación, se muestran dos formas de asignación (=
y <-
). En la mayoría de la situaciones resultan equivalentes; puede haber diferencias dependiendo del ámbito de las variables. En las guías de estilo de R se recomienda usar una de ellas pero siempre la misma. Al poner una asignación entre paréntesis adicionalmente se presenta el resultado obtenido.
2.2.2 Constantes y funciones
En R se pueden usar funciones y constantes predefinidas. Obtenemos ayuda sobre lo que hace una función ejecutando la línea con ?
y el nombre de la función. La ayuda aparecerá en la zona inferior derecha de la ventana, se activará automáticamente la pestaña Help.
Pulsando sobre el botón Show in new window de la zona de ayuda de la ventana, se abre la ayuda en una nueva ventana, para poder leerla más fácilmente.
2.2.3 Definición y operaciones matemáticas con vectores
A continuación, se define un vector numérico y se realizan operaciones con él. Observa las diferencias entre la clase de los resultados que se obtienen (número o vector).
2.2.4 Selección de elementos en un vector
Los elementos de un vector se pueden seleccionar mediante diversos métodos. A continuación, se muestran algunos de ellos: un vector de índices, un vector de índices de los elementos que no se incluyen en el resultado, un vector de booleanos. En este último caso, se muestra cómo definirlo explícitamente o bien obtenerlo como resultado de una operación de comparación.
2.2.5 Unión de vectores
Mediante la función c()
se combinan elementos para formar un vector. Como se muestra a continuación, los elementos pueden ser también vectores. Como todos los elementos de un vector han de ser del mismo tipo, el tipo del resultado ha de ser el más general de los tipos de los vectores implicados, entendiendo por este, el tipo al que se puedan transformar el resto de tipos sin perder información.
2.3 Estructuras de datos
2.3.1 Vector
A continuación, podemos ver los valores y tamaño por defecto de un vector cuando se crea, según los parámetros que indiquemos o si lo creamos implícitamente; también se muestran distintas posibilidades que ofrece la función rep()
para crear vectores.
2.3.2 Data frame
Podemos crear un data frame a partir de vectores, a los que les asignamos nombre dentro de la estructura: son las columnas del data frame, como se muestra a continuación. Un data frame puede tener tantas columnas como deseemos (no necesariamente dos como en los ejemplos siguientes). Podemos acceder a las columnas mediante su nombre o bien su posición en la estructura. Los vectores que forman las columnas pueden no tener el mismo número de elementos, siempre que el mayor sea múltipo del resto.
n
r1
(d <- data.frame(persona = n, puntos = r1))
d$persona
d$puntos
colnames(d)
colnames(d) <- c("person", "score")
d$score
d[, "score"]
d[, 2]
d[2,]
d[2, 2]
d[2:5, ]
d[-c(1,6,7), ]
d[2:5, 2]
n2
(d2 <- data.frame(persona = n2, puntos = r1))
(d3 <- data.frame(persona = n2, puntos = c(1, 2)))
# Error: arguments imply differing number of rows: 14, 3
# (d4 <- data.frame(persona = n2, puntos = c(1, 2, 3)))
2.3.3 Matrix
A continuación, se muestran distintas formas de definir una matriz (matrix), según sus dimensiones y el orden de creación (por filas o por columnas). Asimismo, podemos ver cómo se le pueden asignar nombres a las filas y columnas de la matriz, y acceder a los elementos por nombre o por posición.
2.3.4 Factor
Cuando incluimos un vector de strings en un data frame, si incluimos el parámetro stringsAsFactors = TRUE
, lo trata como un factor: considera los valores distintos (levels) y representa los datos en función de esos valores, como se muestra a continuación. Por defecto se trata como string (el valor por defecto del parámetro es stringsAsFactors = FALSE
). Si definimos explícitamente los niveles a tener en cuenta en el factor, no se consideran los valores no incluidos entre los niveles.
2.4 Control de flujo
2.4.1 Iteraciones
A continuación, se muestran distintas formas de iterar sobre una estructura de ejemplo. También se puede ver que se puede imprimir sin necesidad de iterar por ella.
2.5 Funciones
2.5.1 Función con parámetros con valores por defecto
A continuación, se muestra la definición y uso de una función con un parámetro con valor por defecto. Las funciones devuelven el último valor calculado, se puede indicar explícitamente el resultado mediante return()
aunque no lo recomiendan las guías de estilo de R salvo que no sea la última instrucción de la función.
2.6 Leer y escribir estructuras de datos
2.6.1 Guardar un data frame en un archivo y volverlo a leer
Cuando trabajamos con archivos, es práctico configurar la carpeta de trabajo mediante setwd()
9 porque, de esta forma, basta con indicar el nombre del archivo. También se puede observar en el fragmento de código siguiente que, al escribir y leer un data frame, la estructura que se lee no coincide exactamente con la escrita: se le ha añadido una columna adicional con el número de línea. Si abrimos el archivo generado, se puede comprobar que la columna se ha generado al guardar los datos. Si queremos que no se almacene el número de fila lo tendremos que indicar al guardar el data frame, se hace mediante el parámetro row.names
. Se puede observar que la clase del resultado que obtenemos es un data frame.
2.6.2 Guardar y leer un data frame, e interperetar strings como factores
A continuación, escribe y lee el data frame con el mismo número de columnas. También se indica que interprete como factores los valores de los strings que lea.
2.6.3 Guardar y leer una matriz
En el caso de guardar y leer una matriz, si le hemos dado nombre a las filas, nos interesa guardar sus nombres y recuperarlos al leer los datos. Se puede observar que leemos un data frame, pero lo podemos transformar en una matriz eliminando la columna correspondiente al nombre de las filas y haciendo una conversión de tipos.
2.7 Plots básicos
2.7.1 Diagrama de dispersión e histograma
La función genérica para representar gráficamente objetos en R es plot()
. Como se muestra a continuación, en este caso, estamos representando puntos. La forma de representación de los puntos se determina mediante el parámetro pch
10. También podemos utilizar otras funciones para obtener otros tipos de representación, como hist()
, a continuación.
2.7.2 Línea con puntos
A continuación, se muestra cómo usar la misma función plot()
para representar los puntos unidos mediante una línea. También se pueden representar puntos en el mismo gráfico.
2.7.3 Polígonos y plots múltiples
En el ejemplo siguiente, se divide la superficie de representación en dos partes mediante la función par()
, una fila y dos columnas para poder mostrar conjuntamente dos figuras. Posteriormente, cuando se ha hecho la representación, se vuelve a dejar una sola columna mediante la misma función. En las dos representaciones se muestran los mismos datos, la diferencia entre ellas se produce por los parámetros asp
(para mantener la proporcionalidad de la figura) y type
(para no representar los datos propiamente dichos, sino establecer el área de representación que requieren).
2.7.4 Rectángulos, colores y transparencia
En el siguiente ejemplo, se muestra el uso de colores y la posibilidad de definir niveles de transparencia: se define mediante el cuarto parámetro de la función rgb()
, que es opcional.
par(mfrow=c(1,2))
plot(c(-1.5,1.5),c(-1.5,1.5),asp=1, type='n')
rect(-0.5,-0.5,0.5,0.5, border=NA, col=rgb(0,0.5,0.5))
rect(0,0,1,1, col=rgb(1,0.5,0.5))
plot(c(-1.5,1.5),c(-1.5,1.5),asp=1, type='n')
rect(-0.5,-0.5,0.5,0.5, border=NA, col=rgb(0,0.5,0.5,0.7))
rect(0,0,1,1, col=rgb(1,0.5,0.5,0.7))
par(mfrow=c(1,1))
2.8 Paquetes

Figura 2.3: Instalar package.
La funcionalidad básica de R se amplía mediante paquetes (packages) que podemos añadir a la instalación. Los paquetes instalados se pueden ver desde la pestaña Packages de la zona inferior derecha de la ventana (figura 2.3). Si necesitamos usar un paquete que no está instalado aún, pulsando sobre el botón Install podemos indicar que se instale.

Figura 2.4: Acceso a la información de un package.
Un paquete puede contener funciones y datos. Podemos acceder a la información de un paquete pulsando sobre el primer icono que aparece a la derecha de su nombre y versión, en la pestaña Packages (figura 2.4). Para utilizar el contenido de un paquete fácilmente, tenemos que indicar que se cargue, esto se hace mediante la función library()
.
https://cran.r-project.org/doc/contrib/Torfs+Brauer-Short-R-Intro.pdf↩︎
Es recomendable agrupar los scripts que desarrollemos en un proyecto. Antes de crear el primer script crearemos el proyecto desde File > New Project.↩︎
Si seleccionamos varias líneas, al pulsar sobre el botón Run, se ejecutan todas. En esta actividad, nos interesará ejecutar línea a línea.↩︎
Actualiza el parámetro que se pasa a esta función en el fragmento de código siguiente con tu carpeta de trabajo.↩︎
En https://www.statmethods.net/advgraphs/parameters.html se pueden consultar los posibles valores que puede tomar este parámetro y el resultado obtenido en cada caso. También hay información de otros parámetros para definir el estilo de las líneas o los colores.↩︎