Capítulo 7 Flujo de trabajo: primer proyecto

Estamos listos/as para crear nuestro primer proyecto de R para trabajar ordenadicos/as.

Cuando se empieza a programar para un trabajo concreto de R es recomendable crearnos lo que se conoce como un proyecto de R: en lugar de ir abriendo ventanas sueltas para programar (los scripts, los archivos con extensión .R), podemos agruparlos en distintos proyectos, de forma que podamos acceder a ellos de forma ordenada (algo así como crear carpetas en nuestro disco duro).

7.1 Crear proyecto

Para crear nuestro proyecto deberemos de ir al menú superior File << New Project (ver 7.1)

Crear un nuevo proyecto en R.

Imagen/gráfica 7.1: Crear un nuevo proyecto en R.

Se nos abrirá una ventana con 3 opciones:

  • New directory: crear un proyecto desde el inicio (opción recomendable).

  • Existing directory: crear un proyecto con los códigos que tienes ya guardados en una carpeta.

  • Version control: para importar el proyecto de algún repositorio y vincularlo a él.

Opciones de creación.

Imagen/gráfica 7.2: Opciones de creación.

Clickar en «New project».

Imagen/gráfica 7.3: Clickar en «New project».

Deberemos elegir el directorio de nuestro ordenador donde queremos que se guarde (una carpeta que contendrá todos los códigos y datos de ese proyecto), así como el nombre del proyecto (que será a su vez el nombre de la subcarpeta que se os creará en el ordenador).

Nombre del proyecto.

Imagen/gráfica 7.4: Nombre del proyecto.

Una vez que el proyecto está creado, abriremos un script de R (donde escribiremos el código), escribiremos si queremos una descripción del proyecto en la primera línea y guardaremos el archivo (archivo de extensión .R).

Abrir nuestro primer script de R.

Imagen/gráfica 7.5: Abrir nuestro primer script de R.

Descripción al inicio del código.

Imagen/gráfica 7.6: Descripción al inicio del código.

Guardamos el código.

Imagen/gráfica 7.7: Guardamos el código.

Guardamos el código.

Imagen/gráfica 7.8: Guardamos el código.

Este será nuestro código principal (puedes ponerle el nombre que quieras, normalmente se le llama main.R para diferenciarlo del resto), desde el que iremos construyendo nuestro código e iremos llamando a otros archivos si es necesario. Recuerda que programar es como escribir: cuanto más limpio y estructurado, mejor se entenderá.

 

La ventaja de tener los códigos agrupados por proyectos es que si estamos trabajando en varios a la vez podemos saltar de uno a otro, visualizando solo los códigos de un proyecto, y no los 100 archivos que vayamos creando.

Saltar de proyecto en proyecto.

Imagen/gráfica 7.9: Saltar de proyecto en proyecto.

7.2 Directorios de trabajo y cabecera

Como luego veremos, es altamente recomendable que todos los archivos (códigos, datos, imágenes, recursos, etc) estén dentro de la misma carpeta del proyecto (aunque podamos crear subdirectorios), para que trabajar en el proyecto sea más sencillo e intuitivo. Vamos a crearnos dentro de la carpeta del proyecto, una subcarpeta que se llame DATOS, en donde debemos descargar todos los ficheros que hay en https://github.com/dadosdelaplace/courses-intro-r/tree/main/DATOS, y otra llamada CODIGOS, donde guardar nuestros archivos .R (por eso de ser ordenadicos).

Subcarpeta «CODIGOS».

Imagen/gráfica 7.10: Subcarpeta «CODIGOS».

En esa carpeta de códigos vamos a crear de prueba el código llamado variables.R donde vamos a definir algunas variables que luego usaremos en el código principal (suele suceder con variables que van a ser fijas como nombres, fechas o codificaciones de variables).

# Descripción: script de prueba con variables

# Variables
x <- c(1, 2, 0, -1, 71) # Vector de números
y <- c("hola", "me", "llamo", "Javier") # Vector de caracteres
apellido <- "Álvarez"

# Fechas
hoy <- as.Date(Sys.time()) # Convertir a tipo fecha la fecha de hoy
fecha_origen <- as.Date("2021-01-01") # Inicio de año
Escribimos una serie de variables fijas para luego ser usadas.

Imagen/gráfica 7.11: Escribimos una serie de variables fijas para luego ser usadas.

No es obligatorio pero es altamente recomendable tener muy estructurado nuestros códigos, de forma que el archivo .R haga una tarea concreta y definida (uno carga archivos, otro preprocesa, otro hace un modelo, otro hace las gráficas), y sea el código principal el que haga una llamada limpia a todos ellos, para que en caso de error, la detección del mismo sea más sencilla.

Así que eso haremos: desde nuestro archivo principal main.R llamaremos a ese archivo variables.R, para luego usar las variables definidas en él.

¿Cómo indicarle a R donde está nuestro fichero?

En R, como en todo lenguaje de programación, podemos consultar lo que el ordenador llama directorio de trabajo: la carpeta «base» desde donde está ejecutando tu código. Dicha ruta de directorio se puede consultar con la función getwd(), pudiendo ver los archivos y carpetas que hay dentro del mismo con el comando dir()

Consultar directorio de trabajo predeterminado y archivos contenidos en él.

Imagen/gráfica 7.12: Consultar directorio de trabajo predeterminado y archivos contenidos en él.

Lo ideal es empezar el código fijando como directorio de trabajo el directorio donde tengamos nuestro archivo principalmain.R y para ello usaremos la función setwd(), cuyo argumento será la ruta donde queremos fijarlo. Para hacerlo de forma automática (y que el código pueda ser abierto por ti pero también por otros que no tengan tu misma estructura de carpetas), obtendremos de forma automática la ruta del archivo main.R o del proyecto con la orden rstudioapi::getSourceEditorContext()$path, y después usaremos dirname() para quedarnos solo con la ruta de carpetas (eliminando el nombre del fichero al final). Esa será la ruta que le pasaremos a setwd(), quedando nuestro directorio de trabajo automáticamente fijado, sin preocuparnos de la ruta

# Fijamos directorio de trabajo automáticamente
setwd(dirname(rstudioapi::getSourceEditorContext()$path))
Fijamos de forma automático el directorio de trabajo.

Imagen/gráfica 7.13: Fijamos de forma automático el directorio de trabajo.

Una vez que hemos fijado nuestro directorio, para cargar código .R, basta que usemos la función source(), cuyo argumento será la ruta del archivo. Como tenemos de directorio base el directorio en el que tenemos nuestro archivo principal (./), bastará que empecemos a escribir source("./"), presionar el tabulador, y se nos abrirá el menú de archivos de nuestro directorio de trabajo, pudiendo ir seleccionando de forma sencilla la ruta de nuestro archivo.

Cargar archivos de nuestro directorio de trabajo.

Imagen/gráfica 7.14: Cargar archivos de nuestro directorio de trabajo.

Cargar archivos de nuestro directorio de trabajo.

Imagen/gráfica 7.15: Cargar archivos de nuestro directorio de trabajo.

7.3 Ejecución

Ese archivo que hemos incluido en el código principal nos cargará las variables que hemos definido en él, pudiendo usarlas en el código. Vamos a ejecutar lo que tenemos de momento, y para ello tenemos 2 opciones: o copiar el código del script en la consola y pulsar ENTER, o bien, activando la casilla source on save y guardando el script (no solo se guardará sino que se ejecutará).

Guardamos con la casilla «source on save» activada para que además de guardar se ejecute el código.

Imagen/gráfica 7.16: Guardamos con la casilla «source on save» activada para que además de guardar se ejecute el código.

Como vemos en la imagen 7.16, una vez ejecutado, tenemos en nuestro panel de entorno (parte superior derecha) las variables ya cargadas que teníamos definidas en nuestro fichero variables.R.

Prueba a escribir algunas funciones que hemos aprendido con dichas variables y vuelve a hacer click en «guardar» con source on save activado.

# Sumamos 3 a cada elemento de x
z <- x + 3
z
## [1]  4  5  3  2 74
# Imprimimos por pantalla la frase unida, y a dicha frase
# le pegamos nuestro apellido
cat(paste(paste(y, collapse = " "), apellido))
## hola me llamo Javier Álvarez
# Días que han pasado desde el inicio de año
dias <- hoy - fecha_origen
dias
## Time difference of 356 days

La función cat() nos muestra por consola el texto que le pasemos de argumento (función especial para mensajes de alerta por consola)

Cálculos con la variables definidas: suma, concatenación de texto y diferencia de fechas.

Imagen/gráfica 7.17: Cálculos con la variables definidas: suma, concatenación de texto y diferencia de fechas.

Ya hemos ejecutado nuestro primer proyecto en .R :)

 

WARNING: guardar los scripts

Los scripts que tengas sin guardar tendrán un asterisco * al final del nombre en la pestaña superior de la ventana.

7.4 Consejos

CONSEJOS

 

Cambiar la notación exponencial

Por defecto, R muestra los números en formato de notación exponencial. Por ejemplo, el número 1000000 nos lo mostrará por defecto como 1e+06. A veces podemos querer que se muestre con todas sus cifras (por ejemplo, en el título o leyenda de una gráfica): para anular la notación exponencial, escribe al inicio del código options("scipen" = 10).

 

Limpiar consola

Podemos limpiar la consola clickando en al escoba que tenemos en la parte superior derecha de la misma. Esta acción no nos elimina ninguna variable, simplemente nos limpia la consola de mensajes.

 

Comentarios en los códigos

Es crucial que intentes documentar al máximo tu código y que te acostumbres a ello desde el principio, dejando explícito que haces en cada paso, tanto para ti como para otra persona que pueda leer tu código y lo entienda. Para ello usaremos # comentario cuando queramos dejar comentarios en el código. Dichas partes, amén de estar en otro color, no son leídas por R ni ejecutadas: son comentarios que el programa «no ve», solo son para nosotros.

 

Extraer fecha y hora de hoy

La función Sys.time() accede al sistema de nuestro ordenador para decirnos la fecha y hora del momento de la ejecución de dicha función.

## [1] "2021-12-23 17:55:20 CET"