2010-10-25 6 views
7

Sono occupato a scrivere un pacchetto per un cliente con poca conoscenza di R. Data la loro complessa struttura dati, ho bisogno di creare un "database" all'interno di R contenente tonnellate di informazioni ottenute da una serie di fogli di calcolo che ricevono da un'altra società. Dato che non possono installare SQL sui computer (le TIC hanno alcuni problemi di controllo dell'alimentazione ...), ho scritto un'emulazione in R, basata su una specifica struttura di directory. Ora voglio eseguirlo automaticamente, ma solo la prima volta che viene caricato il pacchetto. Qualcosa come .First.lib, ma poi .VeryFirst.: Esegui codice la prima volta che un pacchetto viene installato o utilizzato

Qualche idea su come caricare un pezzo di codice la prima volta che un pacchetto viene caricato? Non riuscivo a trovarlo da nessuna parte nei manuali, quindi tutti i suggerimenti sono ben accetti.

+0

Perché non solo avere '.First.lib' o'. OnLoad' controllare se il "database" è stato creato? –

+0

@Joshua: ho considerato lo stesso, ma mi chiedevo se fosse effettivamente possibile in R rilevare se un pacchetto viene caricato per la prima volta. Ho esaminato la possibilità di utilizzare anche il file INSTALL, ma in realtà non comprendo ancora completamente come debbano essere utilizzati. –

+1

Non penso che sia possibile controllare se il pacchetto viene caricato per la prima volta. Ma se controlli la "banca dati" e non c'è, la crei (cosa che succederebbe sicuramente al primo carico). La prossima volta che caricate il pacchetto, controllate la "base di dati", verificate che sia già lì e andate avanti. –

risposta

4

È nei manuali.

Fondamentalmente si hanno due percorsi di codice:

  1. pacchetti senza NAMESPACE possibile utilizzare una funzione .First.lib(), tipicamente da R/zzz.R

  2. pacchetti con uno spazio dei nomi in grado di utilizzare una funzione .onLoad(), spesso anche da R/zzz.R .

Ho usato questo per trucchi come avere un pacchetto di aggiornamento stesso (!!) quando caricato. Ciò ha richiesto di non utilizzare un NAMESPACE e di eseguire utils::update.packages() prima di caricare effettivamente il codice binario.

+0

Thx per la risposta, ma queste funzioni non caricano il codice ogni volta che carichi il pacchetto, o ho ottenuto i file di aiuto completamente sbagliati? Mi piacerebbe chiamare il codice solo la prima volta che viene caricato il pacchetto. –

+0

Certo, quindi usi 'file.exists()' e gli amici per verificare se la struttura esiste e saltare la creazione del secondo, terzo, ... tempo. Ma hai chiesto dove crearlo all'avvio, e ho cercato di rispondere a questa domanda. –

+0

E 'possibile che un pacchetto si aggiorni da solo su Windows? O il blocco di file strano causa problemi? – hadley

0

Che ne dici di specificare un percorso e una nomenclatura in cui inserire i fogli di calcolo. È possibile reclamare la directory per aggiornamenti e file. Lo faccio per un problema simile.

2010 08.xls 2010 09.xls

È possibile utilizzare un readline() per richiedere nuovi dati gamme pure che lo rende in modo da avere solo digitare il nuovo mese. E se la directory cambia, non è difficile insegnare a qualcuno come setwd() o aggiornarlo da solo usando uno script che controlla qualcosa sul tuo server personale/aziendale.

In realtà stanno caricando R per eseguire il pacchetto? O è tutto a riga di comando?

Problemi correlati