2012-06-28 27 views
6

Basado en la respuesta a esta pregunta: ¿Elegant way to check for missing packages and install them?de los paquetes instalados en I

estoy usando el siguiente código para asegurarse de que todos los paquetes se instalan al actualizar R, o la creación de otros usuarios:

list.of.packages <- c("RODBC", "reshape2", "plyr") 
new.packages <- list.of.packages[!(list.of.packages %in% installed.packages()[,"Package"])] 
if(length(new.packages)) install.packages(new.packages) 

he colocado en mi función .First en mi .Rprofile, pero cuando inicio R se da el siguiente error y continúa la puesta en marcha:

Error in match(x, table, nomatch = 0L) : 
    could not find function "installed.packages" 

Si corro el c oda después de recibir un aviso, funciona bien. ¿Alguna idea de por qué?

Gracias!

Respuesta

11

Según se desprende de la lectura de ?Startup que:

A continuación, si una función .First se encuentra en la ruta de búsqueda, se ejecuta como .First(). Finalmente, la función .First.sys() en el paquete base es ejecutar. Estas llamadas requieren adjuntar los paquetes predeterminados especificados por las opciones ("paquetes predeterminados").

Ahora, es installed.packages en el utils paquete, que es típicamente uno de los paquetes predeterminados. Por lo tanto, no está disponible en el momento en que se llama al .First.

Quizás intente reemplazar installed.packages con utils::installed.packages?

Como Josh notas abajo mis ojos desnatada sobre la pieza que se ocupa de este problema directamente, a saber:

Tenga en cuenta que cuando los archivos del sitio y el perfil de usuario sólo se obtienen se carga el paquete base, por lo que los objetos otros paquetes deben ser a los que hace referencia, por ejemplo, utils :: dump.frames o después de cargar explícitamente el paquete en cuestión.

+1

O (como se describe un poco más temprano en '? Startup', puede usar' utilidades :: installed.packages' o el primer cargar explícitamente el paquete con 'require (utilidades)'. –

+0

@ JoshO'Brien mala suerte! – joran

+0

¡Te debo una coca cola! –

Cuestiones relacionadas