2010-10-25 11 views
7

Estoy ocupado escribiendo un paquete para un cliente con poco conocimiento sobre R. Dada su compleja estructura de datos, necesito configurar una "base de datos" dentro de R que contenga toneladas de información obtenida de un conjunto de hojas de cálculo que obtienen de otra compañía. Como no pueden instalar SQL más o menos en sus computadoras (las TIC tienen algunos problemas de control de energía ...), escribí una emulación en R, basada en una estructura de directorio específica. Ahora quiero ejecutar esto automáticamente, pero solo la primera vez que se carga el paquete. Algo así como .First.lib, pero luego .VeryFirst.: Ejecutar código la primera vez que se instala o usa un paquete

¿Alguna idea sobre cómo cargar un código la primera vez que se carga un paquete? Realmente no pude encontrarlo en ningún lugar de los manuales, por lo que todos los indicadores son bienvenidos.

+0

¿Por qué no simplemente comprobar '.First.lib' o' .onLoad' si se ha creado la "base de datos"? –

+0

@Joshua: He estado considerando lo mismo, pero me pregunté si realmente era posible en R detectar si un paquete se carga por primera vez. He estado buscando la posibilidad de usar también el archivo INSTALL, pero realmente no entiendo completamente cómo deben usarse. –

+1

No creo que pueda verificar si el paquete se carga por primera vez. Pero si busca la "base de datos" y no está allí, la crea (lo que sin duda ocurriría en la primera carga). La próxima vez que cargue el paquete, verifique la "base de datos", vea que ya está allí y continúe. –

Respuesta

4

Está en los manuales.

Básicamente, usted tiene dos rutas de código:

  1. paquetes sin espacio de nombres puede utilizar una función .First.lib(), típicamente de R/zzz.R

  2. paquetes con un espacio de nombres puede utilizar una función .onLoad(), también a menudo de R/zzz.R .

Lo he usado para trucos como tener una actualización de paquete (!!) cuando se carga. Eso requería no usar NAMESPACE y ejecutar utils::update.packages() antes de cargar realmente el código binario.

+0

Thx para la respuesta, pero estas funciones no cargan el código cada vez que cargas el paquete, o recibí los archivos de ayuda completamente equivocados? Me gustaría llamar al código solo la primera vez que se carga el paquete. –

+0

Claro, entonces usted usa 'file.exists()' y sus amigos para verificar si la estructura existe y omitir la creación de la segunda, tercera, ... hora. Pero preguntaste dónde crearlo al inicio e intenté responder esa pregunta. –

+0

¿Es posible que un paquete se actualice solo en Windows? ¿O el bloqueo de archivos raro causa problemas? – hadley

0

¿Qué pasa si especificamos un camino y una nomenclatura para que pongan las hojas de cálculo en. Puede volver a buscar en el directorio las actualizaciones y los archivos. Lo hago por un problema similar.

2010 08.xls 2010 09.xls

Se puede usar un readline() para solicitar nuevos datos de gamas, así por lo que es por lo que sólo tienen que escribir el nuevo mes. Y si el directorio cambia alguna vez, no es difícil enseñar a alguien a setwd() o actualizarlo usted mismo usando un script que verifique algo en su servidor personal/de la compañía.

¿Están realmente cargando R para ejecutar el paquete? ¿O es toda la línea de comando?

Cuestiones relacionadas