Muchas gracias a Manuel Muñoz Márquez (Proyecto R UCA), Luis Mariano Esteban
(Universidad de Zaragoza) y Carlos J. Gil Bellosta (Data Analytics) por sus
valiosos comentarios.

Tomando como base el script al que Manuel me refirió (ver [1]), esta es la
solución que implementé:

# Función para descargar automáticamente las librerias que se
# requiren pero NO están instaladas. Por defecto (argumento url) se
# buscan en los repositorios del CRAN pero podría ser Omegahat

getPkg <-
function(pkg, url = "http://cran.r-project.org")
     {
     to.do <- setdiff(pkg, installed.packages()[,1])
     for(package in to.do) invisible(install.packages(package, repos = url))
     }

Por supuesto, otras sugerencias y/o comentarios acerca de cómo mejorarlo,
SON bienvenidos  :)

# Ejemplo:  chequeando la libreria fBasics
options(warn=-1, width=100)  # Para eliminar los warnings
getPkg('fBasics')
require(fBasics, quietly = TRUE)

Una vez descargada, podemos intentarlo de nuevo y no se obtiene resultado
alguno (como era de esperarse):

getPkg('fBasics')  # no pasa nada :)


Ahora, si se requieren mas de dos librerias (del mismo repositorio),
entonces el argumento de getPkg debe ser un vector que contiene el nombre de
las librerias necesarias. Por ejemplo si se requiren las librerias RODBC,
AMORE y multtest, entonces:

# Vector de librerias
pkgs <- c('RODBC','AMORE','multtest')
getPkg(pkgs)


Gracias de nuevo,

Jorge Ivan Velez

[1] http://knuth.uca.es/repos/R-contribuciones/r-uca/r-uca-w/install.R



>
>
>
> On Thu, 2009-05-21 at 16:03 -0400, Jorge Ivan Velez wrote:
> > Buenas tardes para todos,
> > Me gustara automatizar la descarga de librerias cuando ejecuto una funcin
> > que estoy por terminar. Supongamos que la funcin se llama foo y require
> las
> > librerias A y B. Una manera fcil de cargar las librerias dentro de foo
> es:
> >
> > foo <- function(argumentos){
> >             require(A)
> >             require(B)
> >            # hacer transformaciones, clculos y grficos aqu
> >                }
> >
> > Por supuesto, require() hace su trabajo si y solo si A y B han sido
> > descargadas previamente. Si no es as, el usuario tendra que descargarlas
> > (lo cual NO me gustara) via los mtodos ya conocidos.
> >
> > Lo que quisiera hacer, dentro de foo (y agradezco de antemano cualquier
> > sugerencia), es chequear si una libreria en particular ya ha sido
> > descargada. Si esto no lo ha sido, entonces que R la descargue
> > automticamente y la cargue en el espacio de trabajo para luego ejecutar
> el
> > resto de las cosas dentro de foo. Con ello quiero "ahorrarle" el proceso
> de
> > bsqueda y descarga al usuario.
> >
> > En lenguaje R sera algo como:
> >
> >    if(  A est instalada  ) require(A)   else   "descargarla
> > automticamente"
> >
> > El problema es que no s cmo preguntar si "A est instalada". El resto es
> > "fcil" de hacer.
> >
> > Estoy trabajando con R 2.9.0 Pactched en Windows XP.
> >
> > Muchas gracias por su ayuda,
> >
> > Jorge Ivan Velez
> >
> >       [[alternative HTML version deleted]]
> >
> > _______________________________________________
> > R-help-es mailing list
> > R-help-es@r-project.org
> > https://stat.ethz.ch/mailman/listinfo/r-help-es
>
>

	[[alternative HTML version deleted]]

