sábado, 23 de agosto de 2014

Simplificando o carregamento de bibliotecas no R

Uma das preocupações que sempre tive com os meus scripts de R foi de garantir a existência das bibliotecas necessárias para que estes pudessem ser executados noutras máquinas sem o aparecimento de mensagens irritantes como a que se segue.

> library(RODBC)
Error in library(RODBC) : there is no package 'RODBC'

Para tal, sempre inclui um bloco de código no início de cada script para evitar esta situação.

#<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
# install & load necessary packages ----
#<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

necessary = c(NULL, 'RODBC')

installed = necessary %in% .packages(all.available = TRUE)

# install
if (length(necessary[!installed]) >=1) 
  install.packages(necessary[!installed])

# load
for(pkg in necessary) 
  library(pkg, character.only=TRUE)  
 
rm(necessary, installed, pkg)

No entanto, esta abordagem tinha a desvantagem de me obrigar a alterar  e re-executar o código sempre que se tornava necessário adicionar uma nova biblioteca.

Decidi finalmente arranjar uma alternativa mais prática de onde surgiu a função require2 que partilho aqui.