2.1 Paquetes
Al instalar R se instalan los denominados paquetes base y (por defecto) los paquetes recomendados por los desarrolladores de R (el R Core Team). Podemos acceder a la lista de paquetes instalados:
<- installed.packages()
pkgs names(which(pkgs[ ,"Priority"] == "base"))
## [1] "base" "compiler" "datasets" "graphics" "grDevices" "grid"
## [7] "methods" "parallel" "splines" "stats" "stats4" "tcltk"
## [13] "tools" "utils"
names(which(pkgs[ ,"Priority"] == "recommended"))
## [1] "boot" "class" "cluster" "codetools" "foreign"
## [6] "KernSmooth" "lattice" "MASS" "Matrix" "mgcv"
## [11] "nlme" "nnet" "rpart" "spatial" "survival"
Para instalar paquetes adicionales se puede emplear install.packages()
(actualmente, 2023-04-01, están disponibles 19217 en CRAN, incluso para interactuar con ChatGPT como gptstudio
).
Por ejemplo:
<- c("Rcmdr", "caret", "tidymodels", "tidyverse", "remotes", "devtools",
pkgs "sf", "gstat", "geoR", "quadprog", "DEoptim", "spam", "openxlsx",
"bookdown", "blogdown", "pkgdown")
install.packages(setdiff(pkgs, installed.packages()[,"Package"]), dependencies = TRUE)
En Windows (y en MacOS) esta función instala por defecto paquetes compilados (type = "binary"
, que dependen del sistema operativo y de la versión R) disponibles en CRAN.
Aunque podría instalar paquetes disponibles en otros repositorios.
Por ejemplo:
<- "https://github.com/rubenfcasal/simres/releases/download/v0.1/simres_0.1.3.zip"
url install.packages(url, repos = NULL)
También se pueden instalar paquetes directamente a partir del código fuente con type = "source"
(por defecto en Linux), pero en ciertos casos es necesario tener instaladas herramientas adicionales (por ejemplo Rtools en Windows si el paquete contiene código en C, C++ o Fortran).
Esto permitiría incluso instalar paquetes retirados de CRAN (e.g. actualmente kedd
), ya que siempre se mantiene el código (en un archivo comprimido de la forma paquete_x.y.z.tar.gz
).
Si se quieren instalar paquetes de repositorios distintos de CRAN (GitHub, GitLab, Bitbucket…), puede ser recomendable instalar remotes
.
Por ejemplo:
::install_github("rubenfcasal/simres", INSTALL_opts = "--with-keep.source") remotes
Además puede ser de utilidad mantener los comentarios originales del paquete para entender mejor el código (por ejemplo si se quiere modificar).
Otras funciones que pueden ser de interés son: remove.packages()
, update.packages()
y available.packages()
.
Al iniciar el programa R
se cargan por defecto en memoria los principales paquetes base, añadiéndolos a la ruta de búsqueda (a continuación del entorno de trabajo .GlobalEnv
y siempre terminando con en el paquete base
, el primero que se carga):
search()
## [1] ".GlobalEnv" "package:dbplyr" "package:forcats"
## [4] "package:stringr" "package:dplyr" "package:purrr"
## [7] "package:readr" "package:tidyr" "package:tibble"
## [10] "package:ggplot2" "package:tidyverse" "package:magrittr"
## [13] "package:stats" "package:graphics" "package:grDevices"
## [16] "package:utils" "package:datasets" "package:methods"
## [19] "Autoloads" "package:base"
Concretamente se añade a la ruta de búsqueda un entorno que contiene el conjunto de objetos exportables del paquete, definido en el denominado namespace del paquete. Esta ruta determina los objetos visibles en el entorno global y el orden en se buscan (para más detalles ver 7.2 Environment basics y 7.4 Special environments de Advanced R).
Podemos cargar paquetes adicionales (previamente instalados) con library()
o require()
, por ejemplo:
if (!require(knitr)) {
install.packages("knitr")
library(knitr)
}spin("01-Introduccion.R", knit = FALSE)
Aunque no se recomienda que el código instale automáticamente paquetes (en general que haga cambios en la configuración del equipo en el que se ejecuta).
Al cargar un paquete se añade por defecto en la segunda posición de la ruta de búsqueda (justo después del entorno global, desplazando al resto).
También se podrían añadir otros objetos, por ejemplo data.frames, con la función attach()
pero no se recomienda (se puede utilizar with()
como alternativa).
Hay que tener cuidado con las versiones instaladas de los paquetes:
packageVersion("dplyr")
## [1] '1.0.10'
y con sus dependencias (los paquetes tienen su propia ruta de búsqueda, determinada por el namespace del paquete). Al actualizar o instalar nuevos paquetes pueden aparecer problemas al ejecutar código antiguo (a veces al trabajar en nuevos proyectos acabamos haciendo que los antiguos dejen de funcionar).
Se puede instalar versiones específicas de un paquete con remotes::install_version()
:
::install_version("dplyr", version = "1.11") # repos = "https://ftp.cixug.es/CRAN") remotes
Para asegurarse que el código de un proyecto se pueda ejecutar a lo largo del tiempo se puede emplear el paquete renv
(se puede configurar automáticamente al crear un proyecto de RStudio).
Este paquete permite registrar las versiones exactas de los paquetes de los que depende un proyecto y volver a instalarlas (incluso en otro equipo) si es necesario. Para más detalles ver la viñeta Introduction to renv.
Sin embargo de esta forma aún dependemos del sistema operativo que deberíamos configurar adecuadamente. La recomendación para que un proyecto en R (por ejemplo una aplicación shiny) se pueda ejecutar en cualquier equipo, es emplear un contenedor docker. Para más detalles ver Docker overview y The Rocker Project. Ver ejemplos/covid19/prediccion_cooperativa.