En las siguientes líneas se revisa la apariciencia externa y algunos aspectos del lenguaje 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.
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:
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.
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
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.
La estructura general de la sintaxis de R es la siguiente:
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:
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
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:
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.
<- 5 # Creación del objeto x; le asigna el valor especificado
x ^2
x<- x-2 # Nuevo objeto redefinido como como el valor de x menos 2
y 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.
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.
Las funciones de R base y aquellas que forman parte de paquete tienen un archivo de documentación. Este archivo describe:
La documentación de una función puede obtenerse de dos procedimientos equivalentes
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")
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
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.
<- c(20, 26, 33, 39, 45) # Creamos el objeto x a partir del vector 20
x <- c(34, 39, 41, 44, 51) # Creamos el objeto y a partir del vector 34
y
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()
<- 1:10
a <- log(50)
b ls() # Lista los objetos del espacio de trabajo
rm(a) # Borra solo un objeto.
# Comprueba si el objeto 'a' todavía está en la memoria a
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
# Llamamos al objeto.
y 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
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".
# 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()
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.