1 EL ENTORNO DE TRABAJO

En las siguientes líneas se revisa la apariciencia externa y algunos aspectos del lenguaje de R.

1.1 La consola de R

Al ejecutar el paquete base de R, lo primero que aparece es una pantalla que nos muestra la versión de este lenguaje y un prompt:

Interfaz del software R, en su versión básica

En esta consola podríamos comenzar a trabajar, pero, como hemos señalado previamente, usaremos RStudio como IDE.

1.2 La consola de RStudio

RStudio tiene como principales ventajas ordenar y visualizar de manera simultánea todos los procesos llevados a cabo con R.

Consola de RStudio

Rstudio se abre con 4 ventanas, además de la barra de opciones en la parte superior.

  • El editor de sintaxis (1): donde se escribe el código para su posterior ejecución.

  • El entorno de trabajo (2) los “objetos” obtenidos tras la ejecución del código.

  • La ventana (3) tiene varias sub-pestañas:

    1. files muestra el historial de actividades.
    2. plots muestra los gráficos generados.
    3. packages permite ver los paquetes descargados y guardados en el disco duro así como gestionar su instalación o actualización.
    4. help accede a CRAN -página oficial del software- para mostrar los diferentes recursos del programa: manuales, cursos on line, información general, descarga de paquetes, información de los paquetes instalados, etc.
    5. viewer muestra los resultados mediante funcionalidades tipo rmarkdown.
  • La consola (4) corresponde a lo que sería el software R en su versión básica. Allí el software ejecuta las operaciones realizadas desde el editor de sintaxis.

1.3 “Ejecutar”, “llamar”, “correr” y “devolver”

Para trabajar con R es necesario conocer algo de la “jerga” o vocabulario usado en este lenguaje de programación.

Cuando ejecutamos una serie de órdenes (proceso conocido como “llamar” o “correr” el programa) se está pidiendo a R que realice una instrucción. Cuando R devuelve algo, es que ha realizado lo que le hemos pedido, es decir, nos está proporcionando una salida. Un ejemplo: tras escribir en la consola la operación 1+1 y pulsar enter se está pidiendo a R que se ejecute esa operación, siendo devuelto su resultado a continuación.

1 + 1 

2 CONCEPTOS BÁSICOS

Siendo R un lenguaje de programación, el usuario interactua con el programa mediante códigos. Estos códigos se crean siguiendo una serie de reglas de sintaxis particulares.

2.1 Sintaxis

La estructura general de la sintaxis de R es la siguiente:

  • El nombre de un objeto, que será el resultado de una función.
  • Una función que a su vez se ejecuta sobre un conjunto de datos.
  • Unos argumentos, instrucciones que especifican detalles que realiza la función.

EJEMPLO: mis_datos <- read_xl(“archivo.xlxs”, hoja = encuesta, columnas = 1:10)

  • mis_datos: objeto a crear, con un nombre definido por nosotros.

  • <-: asignador, que expresa que todo lo que esté a la derecha de la flecha se guardará en el objeto creado. En algunas publicaciones todavía aparece como asignador el símbolo =, pero la tendencia es a su sustitución para evitar confusiones.

  • read_xl: función que lee archivos tipo Microsoft Excel. Los argumentos aparecen entre paréntesis:

    • archivo.xlxs : el primer argumento por lo general indica la información a leer, en este caso indica un archivo de tipo Excel (extensión xlsx).
    • hoja = encuesta indica la hoja del archivo a leer.
    • columnas = 1:10 indica qué columnas se leerán de forma específica (en este caso, las primeras diez).

Sintaxis de R

Es habitual que los códigos estén acompañados de comentarios. Es un trozo de código utilizado para explicar algo, que no se ejecuta, y que se inicia con un “hashtag”. Es conveniene su uso, dado que informa de qué o para qué se utiliza una función o argumento.

                                 # Esto es un comentario

2.2 Objetos

R funciona mediante objetos, que son estructuras de diferentes tipos (más adelante describiremos los más importantes). Todo objeto deben tener un nombre para su identificación, por lo que es recomendable que los nombres sean claros y descriptivos. Algunas reglas y recomendaciones:

  • Pueden incluir letras, números, puntos y guiones bajos.
  • Deben empezar siempre con una letra o un punto y si empiezan con un punto, a éste no puede seguirle un número.

El lenguaje de R es case sensitive es decir, no es lo mismo una mayúscula que una minúscula. Esto impide confusiones y hace que nuestro código sea legible en otra ocasión, o por otras personas.

x <- 5        # Creación del objeto x; le asigna el valor especificado
x^2           
y <- x-2      # Nuevo objeto redefinido como como el valor de x menos 2
y

Una constante es un objeto cuyo valor no podemos cambiar; una variable es, en contraste, un objeto que puede cambiar de valor. Por ejemplo, en la siguiente expresión \(a = {\pi r^2}\), \(\pi\) y \(^2\) son constantes, mientras que \(a\) y \(r\) son variables. Tanto constantes como variables reciben un nombre que permiten hacer referencia a ellas en una operación. Las constantes ya están establecidas por R, mientras que nosotros podemos crear variables.

2.3 Funciones

Una función es un conjunto de operaciones creadas “ad hoc”, a la que asignamos un nombre, y que realiza operaciones y requiere argumentos para llevarlas a cabo. Cuando se llama una función se le pide a R que ejecute las instrucciones que cotiene. Una función se reconoce en R usando la notación nombre_de_la_función(). Por ejemplo:

  • mean()
  • quantile()
  • summary()
  • density()
  • c()

Al igual que con las variables, se recomienda que los nombres de las funciones sean claros. Idealmente, el nombre de una función debería informar de lo que hace.

2.4 Documentación

Las funciones de R base y aquellas que forman parte de paquete tienen un archivo de documentación. Este archivo describe:

  • Qué hace la función,
  • Cuáles son sus argumentos,
  • Detalles sobre las operaciones que realiza,
  • Qué los resultados que devuelve,
  • Ejemplos de uso.

La documentación de una función puede obtenerse de dos procedimientos equivalentes

  • Escribiendo ? antes de su nombre y se ejecuta.
  • Mediante la función help(), con el nombre de la función.
?mean()
help("mean")

La documentación de la función solicitada se muestro en el panel help(). De igual manera es posible obtener la documentación de un paquete concreto, si proporcionamos el argumento package a la función help(), con el nombre de un paquete. Por ejemplo, la documentación del paquete stats, instalado por defecto en R base.

help(package = "stats")

2.5 Directorio de trabajo

Cuando abrimos RStudio al inicio de una sesión de trabajo, el directorio de trabajo por defecto será aquél que hayamos decidido durante su instalación. El directorio o carpeta de trabajo es el lugar en nuestro equipo almacena los archivos con los que trabajamos. Este es el lugar donde R buscará archivos para importarlos y al que serán exportados, a menos que indiquemos otra cosa. Podemos preguntar a R cúal es nuestro directorio de trabajo actual con la función getwd().

getwd()

Se puede modificar el directorio de trabajo usando la función setwd(),proporcionando como argumento la ruta del directorio que se quiere utilizar.

setwd("D:/G14_EE_CC_SS_2022/TEMA_1_Introduccion")

Al comenzar a usar R, es habitual comenter varios errores que impiden el acceso a un directorio o a un fichero determinado, en la mayor parte de los casos porque se ha escrito mal la ruta. Las causas más más comunes son las siguientes:

  • Utilizar la barra simple inclinada a la izquierda () en vez de la barra invertida doble (\) o la barra simple inclinada a la derecha (/) para separar directorios.

  • Incluir caracteres inválidos, como tildes.

Para conocer el contenido del directorio de trabajo, se puede ejecutar la función list.files(). Esta función devuelve una lista con el nombre de los archivos del directorio de trabajo.

list.files()                                         

La función list.dirs(), también sin argumentos, proporciona una lista de los directorios dentro del directorio de trabajo.

list.dirs()                                          

R también cuenta con funciones específicas para crear o modificar el contenido de nuestro directorio de trabajo.

dir.create(file.path("C:/EE_CC_SS_2022/ficheros_datos"))              # Crea una nueva carpeta
dir()                                                                 # Lista los archivos dentro del directorio de trabajo.
list.files()                                                          # Equivalente a la anterior

2.6 El espacio de trabajo y las sesiones en R

Cuando ejecutamos R, ya sea directamente o a través de RStudio, estamos desarrollando una nueva sesión.

Los objetos y funciones de R son almacenados en la memoria RAM de nuestro equipo. Por ello, todos los objetos y funciones creadas en una sesión desaparecerán cuando salgamos de ella (aunque es posible tener más de una sesión de R activa en la misma máquina). Cuando cerramos R, también cerramos nuestra sesión. Se nos preguntará si deseamos guardar el contenido de nuestra sesión para poder volver a ella más tarde.

¡IMPORTANTE! Guardar el espacio de trabajo resulta fundamental en procedimientos que tardan mucho en ejecutarse. De esta forma, podremos cargar los resultados sin tener que repetir toda la ejecución cada vez que abramos R.

Existen varias posibilidades a la hora de guardar el espacio de trabajo. En la siguientes líneas de código se crean dos vectores numéricos y se representan gráficamente.

x <- c(20, 26, 33, 39, 45)          # Creamos el objeto x a partir del vector 20 
y <- c(34, 39, 41, 44, 51)          # Creamos el objeto y a partir del vector 34 

plot(x,y)

Las diferentes posibilidades aparecen a continuación:

saveRDS(x, file = "mi_objeto.rds")                  # Guarda sólo un único objeto en el formato RDS.

save(x, y, file = "mis_dos_Objetos.RData")          # Guarda sólo los objetos 'x' e 'y'. 

save.image(file = "mis_Objetos.RData")              # Guarda todo el espacio o entorno de trabajo. 

Para eliminar objetos del área del área de trabajo, se emplea la función rm()

a <- 1:10 
b <- log(50) 
ls()                                 # Lista los objetos del espacio de trabajo
rm(a)                                # Borra solo un objeto. 
a                                    # Comprueba si el objeto 'a' todavía está en la memoria

Una posiblidad alternativa es borrar todo el entorno de trabajo (todos los objetos en la sesión de R)

rm(list = ls())                      
ls()                                 # Comprueba si queda algún objeto en la sesión.

La respuesta character(0) como output de la función ls significa que no hay objetos en el entorno de trabajo.

También es posible cargar sólo un objeto (función readRDS()) o todo el espacio de trabajo (scripts incluidos, función load()) en R para evitar tener que volver a ejecutar tu script.

readRDS("mi_objeto.rds")                            # Idem fichero*.rds
y                                                   # Llamamos al objeto. 
load("mis_Objetos.RData")                           # Cargando en el entorno de trabajo el fichero *.RData. 

Historial de comandos para recuperar las líneas de comandos introducidas antes

history()                       # Muestra los últimos comandos ejecutados (25 por defecto)
history(3)                      # Muestra los 3 últimos comandos ejecutados
rm()                            # Elimina sólo unos pocos objetos 
rm(list = ls())                 # Elimina todos los objetos del área de trabajo

2.7 Paquetes

Por defecto, durante la instalación de R se activan únicamente un conjunto de paquetes básicos. Las funcionalidades básicas de R se expanden gracias a la disponibilidad de paquetes. Cada paquete es una colección de funciones diseñadas para atender una tarea específica. Por ejemplo, hay paquetes para trabajo visualización geoespacial, análisis psicométricos, mineria de datos etc. Estos paquetes se encuentran alojados en CRAN, así que pasan por un control riguroso antes de estar disponibles para su uso generalizado.

Para conocer qué paquetes tenemos actualmente instalados podemos recurrir a las siguientes funciones:

.libPaths()                                            # Localización del directorio "library"
library()                                              # Lista todos los paquetes del directorio "library"
search()                                               # Lista todos los paquetes cargados en memoria

Podemos instalar nuevos paquetes usando la función install.packages(), incluyendo como argumento el nombre del nuevo paquete, entre comillas. Los nuevos paquetes se instalarán en el directorio “library”.

En ocasiones habremos olvidado si un paquete está instalado; en estos casos, es conveniente incluir la función if(!require("")) antes de la función anterior. Esta función le dice a R que no instale el paquete si ya está instalado.

Los dos procedimientos principales para instalar un nuevo paquete.

if(!require("XML")) install.packages("XLM")          # Instala el paquete "XML".
  • Opción 2: instalación manual. Se debe descargar primero el paquete en formato *.zip en una carpeta.
# install.packages(file_name_with_path, repos = NULL, type = "source")
# install.packages("E:/XML_3.98-1.3.zip", repos = NULL, type = "source")          # Instala el paquete "XML"

Podemos ver qué paquetes tenemos ya instalados ejecutando la función installed.packages() sin ningún argumento.

installed.packages()

De vez en cuanto, es conveniente actualizar de manera automática los paquetes mediante la función update.packages().

update.packages()                                                               # Actualiza los paquetes

Una vez concluida la instalación de un paquete, podrás activarlo con la función library(), incluyendo como argumento el nombre del paquete. En caso de que este paquete esté instalado en otro directorio que no sea library, se puede añadir como argumento el siguiente library("package Name", lib.loc = "path to library"). Por ejemplo, para instalar y activar el paquete readr, utilizaremos el siguiente código.

if(!require("readr")) install.packages("readr")
library(readr)

Es importante recordar que, una vez iniciada una nueva sesión, no hay necesidad de volver a instalar el paquete, sólo se debe activar con library(). Esto se debe a que, cuando se sale de una sesión, las funciones de un paquete se desactivan. El inicio de una nueva sesión se realiza sólo con las funciones y paquetes básicos.

En caso de escribir en install.packages() el nombre de un paquete no disponible en CRAN, se nos mostrará una advertencia y no se instalará.

install.packages("un_paquete_falso")

Los paquetes que hemos importado en nuestra sesión actual aparecen al llamar `sessionInfo().

sessionInfo()

2.8 Scripts

Los scripts son documentos de texto con la extensión .R, por ejemplo mi_script.R, que R lee, ejecutando el código que contiene. Al guardar ese código, puedes recuperarlo para un uso posterior y compartirlo con otras personas.

Podemos abrir y ejecutar scripts en R usando la función source(), dandole como argumento la ruta del archivo .R en nuestra máquina, entre comillas.

# source("C:/Mis scripts/mi_script.R")

Cuando usamos RStudio y abrimos un script con extensión .R, este programa nos abre un panel en el cual podemos ver su contenido. De este modo podemos ejecutar todo el código que contiene o sólo partes de él.

También podemos importar y exportar scripts

file.create("introduccion_R.R")                             # Grabamos el script como fichero
file.path("introduccion_R.R")                               # Ruta del archivo file.info("mi_script.R")
file.copy("introduccion_R.R", "mi_archivo_copiado.R")       # Copia y/o renombra archivos de tu directorio de trabajo
file.remove("mi_archivo_copiado.R")                         # Borra archivo anterior del directorio de trabajo

Desafío

Crea la carpeta borrame en el disco duro C y lista los ficheros que existan en dicha carpeta.

Convierte la carpeta anterior en la carpeta de trabajo.

Instala y activa el paquete “vcd”

Llama al conjunto de datos “Arthitis”. Echa un vistazo a sus variables.

Muestra en pantalla su encabezado, y luego los primeros y los últimos 6 casos.

Comprueba la estructura del fichero y determina cuántas variables contiene y de qué tipo son.

Crea un objeto denominado edad con la variable Age del conjunto de datos Arthitis

Graba el objeto edad como fichero .rds.

Graba todos los objetos del Gobal environment en un único fichero .RData

Elimina el objeto edad del Global Environment

Elimina del Global environment todos los objetos restantes.

Carga de nuevo los ficheros .rds y .RData que has grabado previamente.