—————— Introducción a R - Bases ——————

“Herramientas de análisis cuantitativo y su aplicación en la conservación de la biodiversidad”

Ecodiversa Tropical


1. Objetivos de Aprendizaje

Al final de este taller usted podrá saber cómo:

  • Usar R como calculadora
  • Identificar y usar varios tipos de datos (ej: numéricos, caracteres)
  • Crear un objeto y asignar valores al objeto
  • Identificar y crear estructuras de datos (ej: vectores, data frames, listas y matrices)
  • Aplicar funciones básicas matemáticas y estadísticas
  • Enteder qué son funciones y paquetes en R
  • Saber utilizar las ayudas en R

2. Para empezar

¿Qué es R y RStudio?

R es un lenguaje y un ambiente para el análisis estadístico y la graficación.

RStudio es un Entorno de Desarrollo Integrado (Integrated Development Environment, IDE en inglés) que permite la integración de herramientes diseñadas para ser más productivos e interactivos en R.

R y RStudio son softwares de libre acceso (Open source) que puede ejecutar desde varias plataformas como: Windows, Mac y Linux.

Por favor cargue R y RStudio en su computador. Si tiene Windows usted necesitará instalar Rtools. Si usted tiene Mac, necesita instalar también Xtools del app store.

Explorando RStudio

R studio es una plataforma muy amigable para usar R.

Abra un nuevo R Script usando File > New File > R Script


Usted verá cuatro paneles como se muestran en la figura. Los paneles ofrecen una variedad de herramientas para facilitar el proceso de escribir, ejecutar y visualizar sus códigos y resultados.

Usted se familiarzará y conocerá la utilidad de cada de estos paneles a medida que avanza en estos tutoriales.

3. R como calculadora

Vamos a empezar a jugar un poco con R, como si fuera una calculadora básica. Para lo cual utilizaremos los siguientes operadores:

Operadores aritméticos

Operador Descripción
+ Adición
- Substracción
* Multiplicación
/ División
^ o ** Exponenciación

Operaciones básicas

Por ejemplo escriba la expresion 3 + 2 en el primer panel y luego ejecute el código oprimiendo el botón Run que se encuentra a la derecha del panel.

Puede utilzar también las teclas Ctrl y Enter (en Mac: Apple y Enter).

En cualquiera de los dos casos asegúrese de situarse en la línea o ilumunar las líneas que quiere ejecutar.

3 + 2
## [1] 5

En la consola podrá ver el resultado.

Unos ejemplos mas:

2^3
## [1] 8
7-9
## [1] -2

Usted puede hacer multiples cálculos usando punto y coma (‘;’) para separar los comandos. Como por ejemplo:

20 / 4; 14 - 8 
## [1] 5
## [1] 6

Ejercicio

Ahora es su turno de practicar:

Ejercicio!

Practique combinando diferentes operadores.

¿Cual es la difererencia entre estas operaciones?

14 - 8 * 2
(14 - 8) * 2

Tips!

El orden de las operaciones es importante, por ejemplo:

  • Parentesis () es primero, después viene
  • Exponentes,
  • Multiplicación y división (de izquierda a derecha), y finalmente
  • Adición y substracción (de izquierda a derecha)

4. Creando objetos en R

Información!

R es un programa orientado a objetos (object-oriented program en inglés). Esto quiere decir que casi todo en R es un objeto.

Un objeto en R es una estructura que posee unos atributos (tipo de datos) y unos métodos actuando en esos atributos.

Por ejemplo asignemos (usando estos dos símbolos juntos <-) el valor 1 al objeto x.

x <- 1
x
## [1] 1

Tips!

Este símbolo <- (que lo llamaremos igual, es una combinanción entre el simbolo < y guión en la mitad -) será utilizado de ahora en adelante en R para asignar (igual) valores a los objetos.

El símbolo = será utilizado en otro contexto: para los argumentos en funciones. Lo veremos más adelante.

Ahora bien, puede pensar en el objeto como una variable y asignarle un nombre, por ejemplo:

mi_variable <- 12
mi_variable
## [1] 12

Usted puede asignar al objeto no solo números sino tambien texto, como por ejemplo:

species_1 <- "Euglosa"
species_1
## [1] "Euglosa"

Ahora es su turno de practicar:

Ejercicio!

Recuerde poner el texto entre comillas. Intente este código y mire lo que pasa sin comillas.

#species_2 <- Bombus
#species_2

Ahora intente este código y mire lo que pasa si deja espacios en el nombre de la variable:

# mi variable2 <- 25
# mi variable2

¿Cuáles son los resultados?

5. Vectores

Ahora bien usted puede crear un objeto con varios elementos, los llamaremos vectores.

Utilizaremos la función c() para concadenar tres valores separados por comas ,.

Creemos una variable mis_numeros con tres valores. Por ejemplo:

mis_numeros <- c(1,2,3)
mis_numeros
## [1] 1 2 3

Podriamos crear un vector con 50 números consecutivos. No es necesario escribir los 50 números. Aquí es donde R empieza a tener más sentido y desplegar su potencial.

Para eso podemos utlizar la siguiente expresion:

mis_numeros2 <- c(1:50)
mis_numeros2
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
## [36] 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

En general usted puede crear vectores que tengan valores númericos, texto, factores o lógicos. Por ejemplo:

mis_letras <- c("b", "a", "c", "ab", "b")
mis_letras
## [1] "b"  "a"  "c"  "ab" "b"

Utilicemos la función class() para ver que tipo de datos tenemos en el objeto que creamos. Veremos mas adelante qué es una función, pero usted ya se puede darse cuenta de qué se trata.

class(mis_letras)
## [1] "character"

Ejercicio

Ahora es su turno de practicar:

Ejercicio!

Defina los objetos d y e con los numeros 8 y 7 usando comillas ""

d <- "8"
e <- "9"

Después sume los dos objetos d + e

¿Qué obtiene? y ¿Por qué?

Para pensar son 7 y 8 tipo numérico o carácter?

Esto nos lleva a ver en detalle los tipos de datos que usted podría utilizar en R.

6. Tipo de datos

A continuación presentaremos los tipos de datos más comunes que se manejan en R.

  • numeric (en inglés) “numérico”, para valores numéricos
  • character or string (en inglés) “caracteres”, para texto que incluye letras y otros símbolos
  • logical o Boolean (en inglés) “lógicos”, VERDADERO/FALSO (TRUE/FALSE en inglés)
  • factor en inglés) “factores”, para variables categóricas
  • missing values (NA, “Not Available”. en inglés) para valores que no se encuentran disponibles.

Veamos unos ejemplos:

Numérico (numeric)

a <- 5
a
## [1] 5

Usted puede utilizar la función class() para visualizar el ‘modo’ del objeto.

class(a)
## [1] "numeric"

Veamos otro ejemplo:

con la función typeof() usted puede ver el modo del valor numérico. Hay dos tipos en el modo numérico.: double e integer.

b <- 7
b
## [1] 7

¿Qué clase es?

class(b)
## [1] "numeric"

¿Qué tipo de valor númerico es?

typeof(b)
## [1] "double"

En este caso es double. Todos los números reales se guardan en el formato de double precisión.

Si usted quiere un número entero, puede utilizar la función as.integer(), que asigna al objecto b el modo integer al valor 9.

c <- as.integer(9)
typeof(c)
## [1] "integer"

Veamos qué pasa con un decimal:

s <- 10.2
s
## [1] 10.2

¿Qué clase es?

class(s)
## [1] "numeric"

¿Qué tipo de valor númerico es?

typeof(s)
## [1] "double"

¿Qué pasa si asignamos el modo integer a un decimal? Bueno, parece que perdemos precisión:

t <- as.integer(40.25)
t
## [1] 40

Carácter (Character or string)

Asignemos este texto Euglosa a la variable:

d <- "Euglosa"
d
## [1] "Euglosa"

¿Qué clase es?

class(d)
## [1] "character"

Podemos guardar un texto más complejo, como por ejemplo:

especie_3 <- "Bombus afinis"
especie_3
## [1] "Bombus afinis"

¿Qué clase es?

class(especie_3)
## [1] "character"

Valores lógicos (logical)

Los valores lógicos (logical or Boolean en inglés) se presentan como verdadero of falso (TRUE or FALSE). Serán de mucha utilidad en la programación en R.

Por ejemplo, asignemos el valor FALSE a la variable3.

variable3 <- FALSE
variable3
## [1] FALSE

¿Qué clase es?

class(variable3)
## [1] "logical"

Pero más interesante es indagar la condición de una variable:

# Definamos una variable

variable4 <- 5 # Asignamos el valor a un objeto
variable4      # Presentamos el valor
## [1] 5

¿Es el objeto mayor que 6?

variable4 > 6 
## [1] FALSE

¿Es el obejto menor que 6?

variable4 < 6 
## [1] TRUE

Tips!

Este símbolo # se utilza en R para preceder comentarios en el código, pero no afecta la ejecución de las operaciones o funciones.

Es muy importante para documentar lo que usted hace con sus códigos. Puede utilizarlos como títulos de una sección o comentarios a cada línea. Por ejemplo:

# Definamos una variable

variable5 <- 45 # Asignamos el valor a un objeto
variable5       # Presentamos el valor
## [1] 45

Factores (factor)

Un factor es una variable categórica con un grupo conocido de valores, que llamaremos niveles. Los factores serán muy importantes en análisis estadísticos y modelamiento.

Por ejemplo, la cobertura vegetal en un mapa puede tener tres valores (bosques, pastos y urbana).

Contruyamos un objeto que contenga estos valores y sea un factor.

cob_veg <- c("bosques", "pastos", "urbana")
cob_veg
## [1] "bosques" "pastos"  "urbana"

¿Qué clase es?

class(cob_veg)
## [1] "character"

Parece que el vector sigue siendo texto. Para que sea un factor tenermos que usar la función as.factor().

cob_veg2 <- as.factor(c("bosques", "pastos", "urbana"))
cob_veg2
## [1] bosques pastos  urbana 
## Levels: bosques pastos urbana

¿Qué clase es?

class(cob_veg2)
## [1] "factor"

Valores no disponibles (missing values, NA)

En sus tablas de datos provenientes de hojas de cálculo usted se va a encontrar con esta situación: celdas donde no hay valores. En general R lee esto como NA (es decir un valor no disponible).

Por ejemplo, creemos un vector con nombres de generos de especies en donde el tercero no está disponible. Note que NA no está con comillas (no es un caracter). R lo lee como un valor no disponible (NA).

mis_datos1 <- c("Euglosa", "Bombus", NA, "Apis")
mis_datos1
## [1] "Euglosa" "Bombus"  NA        "Apis"

7. Estructura de datos

Ya vimos que un vector es una secuencia de elementos del mismo modo.

Por ejemplo:

v1 <- c(2,4,6,8,10)
v1
## [1]  2  4  6  8 10

Pero hay diferentes tipos de estructuras en los datos como: tablas, matrices y listas.

Tablas data frames

La más familiar para usted es una tabla, que en lenguaje de R se conoce como data frame.

La podemos construir con base en vectores. Por ejemplo, utilicemos tres vectores con diferentes modos y creemos un tabla utilizando la función data.frame():

species <- c("Euglosa", "Bombus", NA, "Apis")
largo_abdomen <- c(2.1, 3.0, 4, 2.8)
lugar <- c("Cali", "Sitio_1", "2", NA)

df <- data.frame(species, lugar, largo_abdomen)
df
##   species   lugar largo_abdomen
## 1 Euglosa    Cali           2.1
## 2  Bombus Sitio_1           3.0
## 3    <NA>       2           4.0
## 4    Apis    <NA>           2.8

El data.frame que creamos es muy parecido a la estructura de una hoja de cálculo, es decir con filas y columnas.

Puede ver como el nombre de la variable que creamos se convierte en el encabezado de la columna (que es en si una variable).

En el “Taller de manipulación de datos” veremos más en detalle las propiedades de los dataframes y cómo manejarlos.

Por ahora utilicemos la funcion str() para ver la estructura del objeto df; es decir el dataframe que creamos. Por favor tómese un tiempo para ver la información que contiene.

str(df)
## 'data.frame':    4 obs. of  3 variables:
##  $ species      : Factor w/ 3 levels "Apis","Bombus",..: 3 2 NA 1
##  $ lugar        : Factor w/ 3 levels "2","Cali","Sitio_1": 2 3 1 NA
##  $ largo_abdomen: num  2.1 3 4 2.8

Matrices matrix

Una matriz es una colección de elementos del mismo modo organizado en una distribución rectangular de dos dimensiones.

Por ejemplo

var_1 <- c(2,4,6)
var_2 <- var_1 *10

matrix_1 <- cbind(var_1, var_2)
matrix_1
##      var_1 var_2
## [1,]     2    20
## [2,]     4    40
## [3,]     6    60

Se parece mucho a un data frame, pero su etructura es un poco diferente. Veamos:

class(matrix_1)
## [1] "matrix"
str(matrix_1)
##  num [1:3, 1:2] 2 4 6 20 40 60
##  - attr(*, "dimnames")=List of 2
##   ..$ : NULL
##   ..$ : chr [1:2] "var_1" "var_2"

Utilicemos ahora la funcion matrix() para crear una matriz.

my_matrix <- matrix(   # Función
  1:6,                 # vector con elementos 
  nrow=2,              # número de filas 
  ncol=3,              # número de columnas 
  byrow = TRUE)        # llenar la matriz usando filas (SI) 

my_matrix
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6

Ejercicio

Ahora es su turno de practicar:

Ejercicio!

  1. Compare la estructura del data frame y la matriz.

  2. ¿Cual es la difererencia entre esta matriz y la anterior?

df
##   species   lugar largo_abdomen
## 1 Euglosa    Cali           2.1
## 2  Bombus Sitio_1           3.0
## 3    <NA>       2           4.0
## 4    Apis    <NA>           2.8
str(df)
## 'data.frame':    4 obs. of  3 variables:
##  $ species      : Factor w/ 3 levels "Apis","Bombus",..: 3 2 NA 1
##  $ lugar        : Factor w/ 3 levels "2","Cali","Sitio_1": 2 3 1 NA
##  $ largo_abdomen: num  2.1 3 4 2.8
mi_matrix2
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6
str(mi_matrix2)
##  int [1:2, 1:3] 1 2 3 4 5 6

Lista list

La lista es un vector que contiene varios objetos, usted podra diferneciarlos por que estan entre dos parentesis cuadrados, es decir [[1]], [[2]], [[3]], en el ejemplo de abajo:

species <- c("Euglosa", "Bombus", NA, "Apis")
largo_abdomen <- c(2.1, 3.0, 4, 2.8)
lugar <- c("Cali", "Sitio_1", "2", NA)


mi_lista <- list(species, lugar, largo_abdomen)
mi_lista
## [[1]]
## [1] "Euglosa" "Bombus"  NA        "Apis"   
## 
## [[2]]
## [1] "Cali"    "Sitio_1" "2"       NA       
## 
## [[3]]
## [1] 2.1 3.0 4.0 2.8

Veamos la estructura:

str(mi_lista)
## List of 3
##  $ : chr [1:4] "Euglosa" "Bombus" NA "Apis"
##  $ : chr [1:4] "Cali" "Sitio_1" "2" NA
##  $ : num [1:4] 2.1 3 4 2.8

En resumen

En la tabla mostramos un pequeño resumen de las características de las estructuras de los datos:

Igual modo Diferente modo
1 dimensión Vector lista
ej.: (2,3,4,5) ej.: objeto 1: (2,3,4,5); objeto 2 (“A”, “B”, “C”)
2 dimensiones Matriz data frame
image image

8. Funciones

Ya hemos visto algunas funciones como c(), class(), list(), str(), etc. Pero no hemos definido que es una función.

Información!

Una función es una serie de códigos autónomos que realizan una tarea específica.

Las funciones pueden tomar cualquier estructura de datos (ej: valor, vector, dataframe, etc.), los procesan y finalmente retornan un resultado.

R tiene funciones construídas en sus paquetes base que usted ha visto anteriormente.

Pero veamos otras como: sqrt(), log() y abs() entre otras. Por ejemplo:

Raíz cuandrada

sqrt(25)
## [1] 5

Potencia

3^2
## [1] 9

Valor absoluto

abs(-43)
## [1] 43

Logaritmo natural

log(10)
## [1] 2.302585

Logaritmos, con diferentes bases

log10(20)
## [1] 1.30103

Tips!

R es sensitivo a mayúsculas y minúsculas, por eso Log(10) no funcionaría. Puede intentarlo.

Obtendrá un mensaje de error como este:

Error in Log10() : could not find function “Log10”

No se preocupe, trate de entender que quiere decir el mensaje. A veces no son muy claros, es decir el problema está escrito en términos muy técnicos.

Pero puede buscar en el internet (copie y peque en su buscador el mensaje de error), hay muchas personas que han pasado por lo mismo y presentan la solución.

Funciones triginométricas: ej.: sin()

sin(10/2)
## [1] -0.9589243

Tips!

Recuerde entonces que usted puede escribir el nombre de la función seguido de parentesis redondo ().

Tenge en cuenta que todos los nombres de las funciones vienen en inlgés. Usted se familiarizará con los nombres a medida que las utilice.

Además, existe en R una ayuda cuando usted trata de encontralas:

Cuando usted empieza a escribir, R inicia una busqueda dentro de su base de datos de funciones con similar ortografía, de tal forma que usted puede seleccionar la función que desea. Usted puede ver una descripción de lo que hace la función. Tal como se ve en la figura:

image

Las funciones pueden ser muy útiles. Por ejemplo, veamos como la función round() que le permite redondear a dos decimales la constante matemática π.

round(pi, 2)
## [1] 3.14

Pero puede redondear al número menor utilizando floor():

floor(19.8)
## [1] 19

O redondear al número mayor utilizando ceiling():

ceiling(19.8)
## [1] 20

Ejercicio

Ahora es su turno de practicar:

Ejercicio!

Intente este codigo. ¿Qué sucede?

# sqrt("flor")
Tips!

Practique, practique, practique!!

Obtendrá muchos mensajes con: Error No se precoupe!

Si no enntiende trate de nuevo y/o busque soluciones en el internet! Mucha gente ha pasado por los mismos problemas

Es un proceso de apredizaje que mejorará substancialmente si practica

9. Operadores lógicos

Los operadores lógicos serán de mucha utilidad para el análisis de datos y modelamiento.

Operador Descripción
> mayor que
>= mayor o igual que
== exactamente igual a
!= no igual a

Por ejemplo: ¿es t1 mayor que t2?

t1 <- 5
t2 <- 7

m <- t1 > t2
m
## [1] FALSE

Por ejemplo: ¿es t1 menor que t2?

n <- t1 < t2
n
## [1] TRUE

10. Paquetes

Introducción

Hemos visto como una función realiza una tarea específica, utilizando los datos que usted provee y generando finalmente un resultado.

Ahora bien, veamos que es un paquete (package en inglés) en R y su relación con las funciones:

Información!

Una paquete (package) en R es una colección de funciones, datos y un códigos creado para una funcionalidad específica.

Por ejemplo, el paquete base tiene un sinnúmero de funciones, algunas de las cuales ya hemos visto, como as.integer(), as.factor(), mean(), etc.

Desde finales de los 90’s colaboradores alrededor del mundo y de diferentes disciplinas del conocimiento han generado más de 18,000 paquetes (CRAN project) en R .

Esta figura creada por dacorzig se muestra cómo ha crecido el número de paquetes que se han incluido en R a lo largo de estos años.

Fuente: dacorzig

Existen paquetes para diferentes propósitos, por ejemplo: cargar bases de datos, manipular datos, realizar análisis, modelamiento, simulaciones, crear gráficas y mapas, etc.

Por ejemplo:

  • ENMEval: es un paquete para la implementación de modelos de distribición de especies.

  • ape: es un paquete para análisis filogenético y evolución.

Ahora bien, los desarrolladores de los paquetes han avanzado un poco más y han creado colecciones de paquetes dentro de una sola estructura. La idea es que todos los paquetes compartan una misma filosofía, gramática y estructura de datos.

El más popular es tydiverse que le permite importar, ordenar, manipular, analizar y visualizar datos.

Estos paquetes los verá en detalle en el “Taller de Manejo de datos”.

Ahora veamos cómo puede instalar los paquetes en su computador y luego cargarlos en su sesión de RStudio.

Cómo Instalar paquetes

Para instalar un paquete, por ejemplo ggplot2, usted puede utilizar el menu Tools >> Install Packages.

En la ventana que aparece puede empezar a digitar ggplot2, seleccione el paquete y finalmente presione “Install”.

Puede también digitar en su sesión de Rstudioinstall.packages("ggplot2") y ejecutar esta línea.

Cómo cargar paquetes

Una vez tiene sus paquetes instalados en su computador tiene que cargar el paquete en la sesión de RStudio, utilizando la función library(), en este caso usted quiere cargar el paquete ggplot2 entonces usted escribiría:

  • library(ggplot2), y luego ejecute esta línea.

Una vez hecho todo esto, tendrá disponible el paquete en su sesión de RStudio.

Recuerde que la instalación la hace una sola vez, a no ser que quiera actualizar la versión del paquete.

Ahora bien, el paquete lo debe cargar cada vez que abre una sesión.

Puede ver la información relacionada con su sesión con esta función sessionInfo().

11. Ayudas disponibles

Aprender a escribir códigos que realicen las tareas que usted quiere es un proceso que requiere mucha práctica., especialmente cuando uste está empezando.

Es un proceso de ensayo y error. Los errores le ensenarán mucho a crecer en este proceso. Practique mucho!

Hay muchos recursos que puede utilizar en los cuales puede encontrar respuestas

Panel de ayuda

El primero es el panel de ayuda.

Puede digitar lo que necesita saber, por ejemplo algo sobre el paquete ggplot2:

Lo que le ofrecerá algunos vínculos de utilidad.

Pero tambien puede utilizar la función help() para buscar información sobre una función, por ejemplo mean():

Usted obtendrá en la ayuda información de como usar la función. La sección de ejemplos le puede dar claves para saber cómo escribir sus códigos.

Tips!

El panel de ayudas es de gran utilidad, pero a veces no es suficiente.

Entonces puede ir a la web a buscar ayuda. En especial cuando tiene un mensaje de “Error” en la ejecución de su código.

Copie y péguelo en el buscador y de seguro encontrará alguien que pasó por el mismo problema y encontró una solución..

Usted tambien puede buscar información sobre algunos operadores utilizando el símbolo de pregunta seguido del operador entre comillas:

?">"

Ayuda en la web

¿Dónde hacer preguntas o encontrar respuestas?

Relacionadas con R:

Relacionadas con análisis estadístico:

Ecología y R:


Comunidad de usuarios.

Aunque no hay un soporte formal, sí se encuentra una comunidad muy fuerte de usuarios; además de herramientas y ayudas online que facilitan su uso.

  • R Studio community es una comunidad que comparte información acerca de R Studio y temas relacionados con R.

Documentos.

También se encuentran una serie de libros y tutoriales que son de gran utilidad para el usuario, por ejemplo:

Otras herramientas.


###########################################################################