4 Primeros pasos en R

Ya tienes instalado Rstudio y R en to computador (R Core Team, 2018), te preguntarás ¿y ahora qué? Un script vacío y una consola con un cursor parpadeante pueden ser intimidantes a primera vista. ¡No te preocupes!, ya estamos listos para empezar con nuestros primeros comandos.

4.1 Primeras línea de código

Antes de iniciar, es importante recordar que si aún no tienes un script abierto, puedes crear uno empleando la barra de menú File | New File | R Script. O con los atajos del teclado: Shift + Ctrl + n (en Windows) o Shift + Command + n (en macOS). Es necesario crear un script nuevo, lo usaremos para guardar los comandos que estudiaremos a continuación.

Generalmente, lo más conveniente es escribir y guardar el script y, a partir de éste, ejecutar los comandos necesarios. Si escribiesemos los comandos directamente en la consola, los perderíamos y no podríamos recuperarlos para repetir el ejercicio o reciclar código en un proyecto futuro.

Antes de empezar a ver algunos comandos, es importante mencionar que los comandos se dividen en dos grandes tipos:

  • Asignaciones
  • Expresiones

Las asignaciones piden a R que guarde el resultado de ejecutar una orden en un elemento al que llamaremos objeto. Veamos un ejemplo muy sencillo. En tu script escribe la siguiente línea y ejecútala en la consola9:

#Asignación de un valor a un objeto
x <- 1

En este caso asignamos al objeto x el valor de uno. Noten que inmediatamente en su workspace se registra el objeto x que se ha creado (ver panel superior izquierdo en la pestaña Enviroment).

El signo <- representa en R el comando asignar lo que está a la derecha del signo al objeto a la izquierda del signo10. Vale la pena mencionar que R es sensible al uso de mayúsculas. Así que, el objeto x es diferente al X.

También puedes notar que realmente escribimos dos líneas de código, la primera inicia con el signo #. Este signo le informa a R que todo lo que se encuentra a la derecha de este signo no será evaluado. Es decir, el signo # se puede emplear para hacer comentarios del código que se escribe. Comentar el código es una buena práctica, pues nos ayuda en un futuro a recordar lo que está haciendo cada parte del código. Y más importante aún, si otra persona mira el código podrá entenderlo más fácilmente. Recuerda que R es un lenguaje de programación y cada persona se expresa de manera diferente en cada lenguaje.



Recomendación de Estilo

Cuando se asigne un valor o resultado a un objeto emplea el signo <- y no =.

# Buena práctica
x <- 1

# Mala práctica
x = 1



Antes mencionamos que existen dos tipos de comandos: las asignaciones y las expresiones. Las expresiones son una orden que se da a R de ejecutar una o muchas tareas empleando objetos y parámetros (de ser necesarios). Estos comandos son conocidos en la comunidad de R como funciones. Y los objetos y parámetros que emplea el comando para hacer una operación se conocen como argumentos. En general, las funciones en R tienen la forma:
función(argumentos)

Por ejemplo, la función print() emplea como argumento principal un y realiza la tarea de imprimir dicho objeto en la consola. Veamos un ejemplo:

print(x) 
## [1] 1

Otra función básica11 es help(), que sirve para visualizar la ayuda asociada a otra función y tiene como uno de sus argumentos el nombre de la función sobre el cual se quiere pedir ayuda. Por ejemplo,

#Pedir ayuda sobre la función print()
help(print) 

Tras ejecutar esta línea de código, en el panel inferior izquierdo se nos activa la pestaña Help y se muestra la documentación de la función print(). Nota que en esa ventana puedes buscar la documentación de cualquier función digitando la palabra clave en el espacio que tiene una lupa. Esta es una de las ventajas de Rstudio frente a la interfaz de R que no permite esta búsqueda de ayuda fácilmente.

4.2 Operaciones básicas

Veamos las operaciones básicas que podemos hacer con objetos. Creemos un segundo objeto y:

y <- 2

4.2.1 Operaciones aritméticas básicas

Con los objetos podemos hacer operaciones aritméticas sencillas, como sumar o restar. En el Cuadro 4.1 se presentan los operadores aritméticos más sencillos que tiene R.

# suma
x + y
## [1] 3
# resta
x - y
## [1] -1
# multiplicación
x * y
## [1] 2
#división
x / y
## [1] 0.5
# x elevada a la y
y^x
## [1] 2



Cuadro 4.1: Operadores aritméticos en R
Operador Descripción
\(+\) Suma
\(-\) Sustracción
\(*\) Multiplicación
\(/\) División
\(\wedge\) Exponente
\(\%\%\) Módulo (Residuo de la división)
\(\%/\%\) Parte entera de la división



Recomendación de Estilo

Deja un espacio antes y después de operadores binarios como +, -, * y /. También deja espacios antes de abrir y cerrar paréntesis, a menos que estés evaluando una función.

# Buena práctica
w <- z * (x + y) + 2

# Mala práctica
w<-z*(x+y)+2



También podemos asignar el valor de una operación a un objeto, por ejemplo

z <- x^2 + y^4
z
## [1] 17

En este caso ya tenemos tres objetos en nuestro workspace (ver panel superior izquierdo en la pestaña Enviroment). Si se deseas monitorear en la consola todos los objetos que tenemos en el workspace podemos emplear la función objects() sin necesidad de argumentos12

objects()
## [1] "modified_plot" "regular_plot"  "source"        "x"            
## [5] "y"             "z"

También existen funciones que permiten realizar operaciones relativamente sencillas, como por ejemplo, encontrar la raíz cuadrada (sqrt()), el logaritmo natural (log()), o el logaritmo base 10 (log10()).

# raíz cuadrada 
sqrt(z)
## [1] 4.123106
# logaritmo natural
log(10)
## [1] 2.302585
#logaritmo base 10
log10(10)
## [1] 1

Bueno, ya te puedes hacer una idea de cómo funciona R para hacer estas operaciones. Recuerda que este lenguaje de programación tiene muy buena documentación y puedes encontrar rápidamente la función que necesitas para hacer una operación aritmética. Por ejemplo, en Google puedes buscar la operación o tarea que desees seguido del término “en R”13 . ¡Inténtalo!

4.2.2 Operaciones de relación y lógicos

R también permite comparar dos objetos y determinar si son iguales, diferentes, etc. En el Cuadro 4.2 se presentan los operadores disponibles en R para hacer comparaciones entre objetos (que sean comparables).



Cuadro 4.2: Operadores de relación en R
Operador Descripción
< Menor que
> Mayor que
<= Menor o igual que
>= Mayor o igual que
== Igual a
!= No es igual a



Por ejemplo, si queremos saber si los objetos x y y son iguales empleamos la siguiente linea de código:

# ¿es x igual a y?
x == y
## [1] FALSE

Nota que el resultado será una respuesta de verdadero (TRUE) o falso (FALSE). En este caso al nos ser iguales la respuesta es FALSE. Naturalmente, el resultado de estas operaciones de comparación, también se pueden guardar en objetos.

# asignar la respuesta de ¿es x igual a y
# al objeto w
 w <- x == y
w
## [1] FALSE

También podemos hacer operaciones lógicas en R empleando los operadores que se presentan en el Cuadro 4.3.



Cuadro 4.3: Operadores lógicos en R
Operador Descripción
! NO lógico
& Y lógico
| ó lógico



Por ejemplo, supongamos que queremos chequear si el objeto y es más grande que y, y al mismo tiempo si la raíz cuadrada del objeto z es mayor que 3. Esto lo podemos hacer con la siguiente línea de código:

y > x & sqrt(z) > 3 
## [1] TRUE



Recomendación de Estilo

Deja un espacio antes y después de operadores de comparación y lógicos.

# Buena práctica
 z != y & log(z) > 3 

# Mala práctica
 z!=y&log(z) > 3 



4.3 Diferentes formas de crear objetos

Hasta ahora hemos discutido cómo crear objetos que contienen un número o que son resultado de evaluar una función. Los objetos con solo un número no son muy interesantes, pero antes de pasar a crear objetos más complejos (ver Capítulo 5) o con bases de datos (ver Capítulo 8), veamos cómo crear un objeto con varios números.

Supongamos que queremos guardar en un objeto las compras en millones de pesos durante el primer año de operación de la compañía de 4 clientes. Eso puede hacerse directamente de la siguiente manera:

# asignamos al objeto ventas_1 los números 2 , 3 , 4.5 y 5 
# (en ese orden)
ventas_1 <- c(2, 3, 4.5, 5)
ventas_1 
## [1] 2.0 3.0 4.5 5.0

Nota que en este caso hemos creado un objeto que tiene un nombre que incluye números, letras (alfanumérico) y un carácter especial (_). De hecho, en los nombres de los objetos se pueden emplear números, letras y puntos y guiones bajos (_).

Para crear nuestro objeto empleamos la función c(), ella toma su nombre de la tarea que hace: combinar los elementos que se coloquen como argumentos. Además, que cuando las funciones emplean más de un argumento, estos se separan con comas.



Recomendación de Estilo



Después de una coma siempre deja un espacio.

# Buena práctica
x1 <- c(2, 3, 5)

# Mala práctica
x1 <- c(2,3,5)

Podemos crear objetos empleando secuencias de números. El operador : permite crear una secuencia que va desde el número a la izquierda del operador hasta el número a la derecha, con incrementos de a uno.

# secuencia de 1 a 10 con incrementos de a uno.
1:10
##  [1]  1  2  3  4  5  6  7  8  9 10

Combinando las dos últimas partes, creemos un objeto que contenga todos los números del 1 al 10, sin tener que digitarlos.

# se asigna al objeto x1 la secuencia de 
# 1 a 10 con incrementos de a uno.
x1 <- c(1:10)
x1
##  [1]  1  2  3  4  5  6  7  8  9 10

También podemos crear una secuencia descendente, incoando la secuencia con el número mayor y terminándola con el menor, por ejemplo

# se asigna al objeto x2 la secuencia de 
# 10 a 1 con reducciones de a una unidad.
x2 <- c(10:1)
x2
##  [1] 10  9  8  7  6  5  4  3  2  1
Otra forma de hacer los mismo, pero con más versatilidad es emplear la función seq() para crear secuencias. Esta función típicamente incluye los siguientes argumentos:
seq(from, to, by)

Donde:

  • from: es el valor de inicio de la secuencia.
  • to: es el valor final de la secuencia.
  • by: es el número en el que se incrementará la secuencia.

Por ejemplo, si queremos una secuencia de números que vaya desde -2 hasta 10 en incrementos de dos unidades, podemos emplear el siguiente código:

seq(from =-2, to = 10, by=2)
## [1] -2  0  2  4  6  8 10
seq(-2, 10, 2)
## [1] -2  0  2  4  6  8 10

Observa que podemos obtener el mismo resultado sin tener que escribir el nombre de los argumentos. Sino se pone el nombre del argumento, R tomará los argumentos en el orden predeterminado por la función.

Otra función útil para crear objetos es rep(). Esta función crea un objeto repitiendo otro. Esta función incluye los siguientes argumentos:
rep(x, times, each)

Donde:

  • x: es el objeto a replicar.
  • times: es el número de veces a repetir el objeto x. Si se emplea este argumento no se utiliza each.
  • each: número de veces a repetir cada elemento del objeto x. Si se emplea este argumento no se utiliza times.

Repitamos el objeto ventas_1 tres veces y cada uno de los elementos de ese objeto tres veces.

# se repite el objeto ventas_1 3 veces
v2 <- rep(ventas_1, times=3)
v2
##  [1] 2.0 3.0 4.5 5.0 2.0 3.0 4.5 5.0 2.0 3.0 4.5 5.0
# se repite cada elemento del objeto ventas_1 3 veces
v3 <- rep(ventas_1, each=3)
v3
##  [1] 2.0 2.0 2.0 3.0 3.0 3.0 4.5 4.5 4.5 5.0 5.0 5.0

También podemos crear objetos que contengan texto, estos pueden ser útiles para generar las etiquetas de bases de datos, cuadros o gráficos. Por ejemplo, supongamos que los cuatro clientes para los cuales registramos sus ventas del primer año en el objeto ventas_1 son Juliana, Matías, Mariana y Luís, respectivamente. Guardemos esos nombres en el objeto .

# creamos el objeto de nombres
nombres <- c("Juliana", "Matías", "Mariana", "Luís")
nombres
## [1] "Juliana" "Matías"  "Mariana" "Luís"

Es más, en algunas ocasiones desearemos crear nombres de manera automática y no digitarlos. Esto se hace combinando lo que hemos visto hasta ahora y la función paste(), esta “pega” los elementos de objetos empleando un separador determinado (argumento sep).

Creemos, por ejemplo, un objeto que tenga los nombres x_1 a x_10 y y_1 a y_10, pero alternando las equis (x) y las yes (y).

# creamos el objeto de nombres2 con nombres para la variable 

nombres2 <- paste(c("x","y"), rep(1:10, each=2), sep="_")
nombres2 
##  [1] "x_1"  "y_1"  "x_2"  "y_2"  "x_3"  "y_3"  "x_4"  "y_4" 
##  [9] "x_5"  "y_5"  "x_6"  "y_6"  "x_7"  "y_7"  "x_8"  "y_8" 
## [17] "x_9"  "y_9"  "x_10" "y_10"

4.4 Comentarios finales

En este capítulo empleamos comandos para crear y hacer operaciones con objetos. En el siguiente veremos más aspectos importantes de los objetos como los diferentes tipos de objetos que existen y cómo transformar los tipos de objetos. Posteriormente en el Capítulo 8, discutiremos cómo construir objetos que contengan bases de datos que leeremos de archivos.

Por hora, guarda el script que has construido durante este capítulo. Lo necesitarás para el siguiente. Si deseas guarda el workspace, esto te permitirá cargar en cualquier momento todos los objetos que has creado. En algunas ocasiones, para ahorrar espacio de almacenamiento, los usuarios prefieren guardar los scripts y correrlos nuevamente cuando se requiera retomar el trabajo. Pero en otras ocasiones, es mejor guardar tanto el script como el workspace para ahorrar tiempo, pues la ejecución del script puede tomar mucho tiempo.

Para grabar el script puedes optar por cualquiera de las siguientes opciones que generarán un archivo con la extensión .R:

  • Hacer clic en el ícono de un disquete (ver Figura 4.1) en la parte superior del panel donde está el script.

Figura 4.1: Guardar un Script

Guardar un Script
Fuente:Esta captura de pantalla fue tomada de R.
  • Emplear los atajos de teclas. Teniendo el cursor activo en el script puedes presionar al mismo tiempo Ctrl + s en Windows o Command + s) en macOS.
  • Emplear el menú de “File”. Teniendo el cursor activo en el script puedes hacer clic en File | Save.

Grabar el workspace es muy similar. Puedes optar por cualquiera de las siguientes opciones que generarán un archivo con la extensión .RData:

  • Hacer clic en el ícono de un disquete (ver Figura 4.2) en la parte superior de la pestaña Enviroment del panel en la parte superior derecha.

Figura 4.2: Guardar el Workspace

Guardar el Workspace
Fuente:Esta captura de pantalla fue tomada de R.
  • Emplear el menú de “Session”. Haz clic en Session | Save Workspace As....
  • Emplear código. La función save.image() que guardará todos los objetos en el worspace en el archivo con el nombre que deseemos (argumento file). El archivo se creará por defecto en el working directory, por ejemplo
save.image(file = "res_cap4.RData")

En todo caso, cuando cierres la aplicación Rstudio, verás un menú que te pregunta si quieres guardar los scripts que no estén guardados y el workspace.

Referencias

R Core Team. (2018). R: A language and environment for statistical computing. R Foundation for Statistical Computing. https://www.R-project.org/

  1. Recuerda, si tienes el cursor en una línea (renglón) de tu script lo puedes mandar a ser ejecutado empleando Ctrl + Return en Windows o Command + Return en macOS. Si seleccionas con el cursor (sombreas) una parte del script y empleas la combinación de teclas descritas anterioremente, enviarás la selección completa.↩︎

  2. Se puede obtener el mismo resultado empleando el signo =, pero no es una práctica buena en la comunidad de R, pues este signo no implica en término lógicos lo mismo que asignar algo a un objecto.↩︎

  3. Esta función es una de las pocas excepciones en la cual el argumento no es un objeto sino otra función.↩︎

  4. Otra función que hace exactamente la misma tarea es ls(). ¡Inténtalo!↩︎

  5. Encontrarás muchos mas resultados si tu búsqueda es en inglés.↩︎