2 + 2[1] 4
Ahora que sabemos cómo trabajar con RStudio y con scripts, podemos comenzar a entender cómo funciona realmente R.
R funciona esencialmente creando objetos y utilizando después operadores y funciones para hacer cosas con esos objetos.
En este módulo comenzaremos con algunos de los componentes más básicos del lenguaje R.
Lo primero que necesitamos hacer es abrir RStudio, abrir nuestro proyecto intro-r-course y crear un nuevo script de R.
Guarda el script dentro de la carpeta scripts con el nombre:
module-02.R
Utilizaremos este script durante todo el módulo.
R funciona básicamente dándole instrucciones escritas mediante comandos o expresiones.
Un comando muy sencillo en R puede ser:
Si escribimos esto en nuestro script, no ocurrirá nada hasta que le indiquemos a R que ejecute o evalúe el comando.
Para ejecutar una línea de código, coloca el cursor sobre esa línea y utiliza:
Windows: Ctrl + Enter
Mac: Command + Enter
También puedes hacer clic en el botón Run de RStudio.
Si quieres ejecutar varias líneas al mismo tiempo, selecciónalas y utiliza el mismo atajo.
Comencemos con algo sencillo:
R debería devolver:
[1] 4
Cuando ejecutamos esta línea, el resultado aparece en la Consola.
En este caso, R nos indica que al evaluar el comando se produjo un objeto que contiene el número 4.
Recuerda: R trabaja con objetos.
También podemos utilizar paréntesis para agrupar operaciones:
R devuelve:
[1] 9.833333
Al igual que en las matemáticas tradicionales, las operaciones dentro de los paréntesis se evalúan primero.
A veces queremos escribir notas dentro de nuestro script para recordar qué hace el código.
Si simplemente escribimos texto normal dentro de un script e intentamos ejecutarlo, R probablemente devolverá un error porque intentará interpretar nuestras palabras como código.
Para evitarlo, utilizamos el símbolo #.
# R ignora esta línea porque comienza con #
# number <- 23
# R también ignora esta línea
2 # R evalúa el 2, pero ignora todo lo que aparece después de #[1] 2
R devuelve:
[1] 2
Todo lo que aparece después de # en una línea se considera un comentario.
Utiliza comentarios frecuentemente en tus scripts.
Tu yo del futuro te lo agradecerá.
Hasta ahora, los resultados de nuestras operaciones aparecen en la Consola, pero a medida que seguimos ejecutando comandos esos resultados desaparecen de nuestra vista.
La mayoría de las veces querremos asignar un resultado a un objeto para poder utilizarlo nuevamente más adelante.
En R, normalmente asignamos algo a un objeto utilizando:
<-
Por ejemplo:
Acabamos de crear dos objetos, cada uno de los cuales contiene un número.
Observa que R no imprimió nada en la Consola.
Los valores fueron almacenados dentro de los objetos.
Para ver qué contiene un objeto, simplemente ejecutamos su nombre:
R devuelve:
[1] 56
El atajo para escribir <- en RStudio es:
Windows: Alt + -
Mac: Option + -
¡Pruébalo!
Puedes elegir casi cualquier nombre para un objeto, pero existen algunas reglas importantes.
R distingue entre mayúsculas y minúsculas.
Por ejemplo:
y:
son dos nombres diferentes.
Si solamente existe big_number e intentas ejecutar:
R devolverá un error.
También debemos evitar utilizar acentos o caracteres especiales en nombres de objetos, archivos, carpetas y columnas. Aunque pueden funcionar en muchos casos, las diferencias en la codificación de caracteres pueden generar problemas innecesarios.
Los nombres de objetos:
+, -, *, /, #, %, [ ], { }, ( ) o ~,mean.Lo más importante es que el nombre del objeto nos dé alguna información sobre lo que contiene.
Compara:
con:
El segundo nombre es mucho más fácil de entender cuando regresamos al script más adelante.
Algunas formas comunes de escribir nombres de objetos largos son:
o:
A lo largo de este curso utilizaremos principalmente snake_case:
Ten cuidado al reutilizar el nombre de un objeto.
Asignar algo nuevo a un objeto que ya existe reemplazará su valor anterior.
Por ejemplo:
devuelve:
[1] 56
Pero ahora hagamos esto:
R ahora devuelve:
[1] "fifty six"
El número original 56 fue reemplazado.
R puede almacenar diferentes tipos de información.
Por ahora nos enfocaremos en cuatro tipos básicos:
Más adelante combinaremos estos valores en estructuras de datos más complejas como vectores, matrices, listas y data frames.
Los objetos numéricos contienen números.
Pueden contener números enteros o números con decimales.
Como estos objetos contienen números, podemos realizar operaciones matemáticas con ellos.
Por ejemplo:
Podemos seguir utilizando el objeto que acabamos de crear:
Y podemos continuar combinando objetos y operaciones:
O hacer algo un poco más complicado:
| Operador | Operación |
|---|---|
+ |
Suma |
- |
Resta |
* |
Multiplicación |
/ |
División |
^ |
Potencia |
También podemos comparar valores utilizando operadores relacionales.
En lugar de devolver un número, estas comparaciones devuelven un valor lógico: TRUE o FALSE.
Por ejemplo:
Otro ejemplo:
Y:
Observa que para comprobar si dos valores son iguales necesitamos utilizar dos signos de igual:
| Operador | Operación |
|---|---|
< |
Menor que |
<= |
Menor o igual que |
> |
Mayor que |
>= |
Mayor o igual que |
== |
Igual a |
!= |
Diferente de |
Por ejemplo:
Los objetos de tipo character contienen texto.
El texto en R normalmente debe colocarse entre comillas:
o:
Por ejemplo:
También podemos almacenar frases completas:
Ahora, ¿qué ocurre si hacemos esto?
Aunque 69 parece un número, las comillas le indican a R que debe tratarlo como texto.
Esto significa que no podemos utilizarlo directamente en operaciones aritméticas:
R devolverá un error.
Sin embargo, los operadores relacionales también pueden utilizarse con valores de tipo character.
Por ejemplo:
En este caso, R utiliza el orden alfabético.
También podemos comparar texto directamente:
Recuerda que R distingue entre mayúsculas y minúsculas.
Otro ejemplo:
Los objetos lógicos contienen uno de dos valores:
TRUE
FALSE
Básicamente representan si una condición se cumple o no.
Podemos crear directamente un objeto lógico:
Los valores lógicos son especialmente útiles cuando utilizamos operadores relacionales.
Por ejemplo:
También podemos combinar condiciones lógicas.
Por ejemplo, el operador | significa OR (o):
porque al menos una de las dos condiciones es verdadera.
Utilizaremos mucho más los valores lógicos cuando comencemos a filtrar y manipular bases de datos.
A veces una observación o un valor no existe o no fue registrado.
En R, los valores faltantes se representan mediante:
NA
Es muy importante entender que NA no es lo mismo que cero.
Imagina que estamos contando ranas en estanques.
Un valor de:
0
podría significar:
Visitamos el estanque y no observamos ninguna rana.
En cambio:
NA
podría significar:
Nunca visitamos ese estanque, por lo que no sabemos cuántas ranas había.
Son situaciones muy diferentes.
Podemos crear un objeto que contenga un valor faltante:
Los valores faltantes son extremadamente comunes en bases de datos reales y más adelante aprenderemos cómo identificarlos y trabajar con ellos.
Las funciones son operaciones predefinidas diseñadas para realizar una tarea específica.
La mayoría de las funciones de R siguen una estructura general como esta:
function_name(object)
Por ejemplo, la función:
nos indica con qué tipo de objeto estamos trabajando.
Prueba:
Ahora prueba con el objeto que creamos anteriormente:
También podemos revisar un valor lógico:
Y:
Un NA por sí solo se almacena de manera predeterminada como un valor lógico faltante. Más adelante, cuando trabajemos con bases de datos, veremos que también pueden existir valores faltantes dentro de variables numéricas, de texto y de otros tipos.
Las funciones reciben información mediante argumentos.
Por ejemplo:
Aquí:
3.14159
es el valor que queremos que utilice la función, mientras que:
digits = 2
le indica a round() cuántos decimales queremos conservar.
Diferentes funciones aceptan diferentes argumentos.
No necesitas memorizarlos todos.
R proporciona documentación para sus funciones.
Por ejemplo:
o:
abrirán la página de ayuda de round().
Aprender R no consiste en memorizar cada función y cada uno de sus argumentos.
Aprender a encontrar la documentación que necesitas es mucho más útil.
Muchas funciones ya vienen incluidas cuando instalamos R. A estas funciones normalmente nos referimos como funciones de R base (base R).
Sin embargo, una gran parte de las capacidades de R proviene de funciones creadas por la comunidad y distribuidas mediante paquetes.
Para utilizar las funciones de un paquete, generalmente necesitamos:
Vamos a instalar un pequeño paquete llamado beepr.
beepr permite que R reproduzca sonidos.
Ejecuta:
Recuerda que necesitas una conexión a Internet para instalar un paquete.
Normalmente solamente necesitas instalar un paquete una vez en tu computador.
Una vez instalado el paquete, necesitamos cargarlo en nuestra sesión actual de R.
A diferencia de install.packages(), normalmente ejecutamos library() cada vez que comenzamos una nueva sesión de R y queremos utilizar ese paquete.
Ahora podemos utilizar una de las funciones incluidas en beepr:
Si todo funcionó correctamente, tu computador debería reproducir un sonido.
Existen miles de paquetes de R.
La mayoría están disponibles a través de un repositorio llamado CRAN, aunque los paquetes también pueden distribuirse de otras maneras.
Una de las formas más sencillas de encontrar un paquete es simplemente buscar lo que quieres hacer.
Por ejemplo:
paquete para calcular el índice de diversidad de Shannon en R
Una búsqueda de este tipo probablemente te llevará a paquetes como vegan.
El siguiente paso será aprender cómo funciona ese paquete leyendo su documentación, ejemplos o tutoriales.
Esta actividad debería tomar aproximadamente 15–20 minutos.
Abre tu proyecto intro-r-course y crea un nuevo script llamado:
practice-02.R
Guárdalo dentro de la carpeta scripts.
Completa las siguientes actividades:
species que contenga el nombre de una especie animal.station que contenga el nombre de una estación de cámara, por ejemplo "CT01".detections que contenga un número.detections es mayor que 10.class() para revisar el tipo de cada uno de los siguientes valores:round().Tu script podría verse así:
# Práctica del Módulo 2
# Objetos character
species <- "Raccoon"
station <- "CT01"
# Objeto numérico
detections <- 15
# ¿El número de detecciones es mayor que 10?
detections > 10[1] TRUE
[1] 25
[1] 15
[1] 100
[1] 4
[1] "numeric"
[1] "character"
[1] "logical"
[1] "logical"
Los nombres y valores de tus objetos pueden ser diferentes.
Lo importante es que practiques:
<-,character y lógicos,