2012-08-27 6 views
16

Sto creando un repository di pacchetti R personalizzato e vorrei replicare la struttura dell'archivio CRAN in base alla quale le vecchie versioni dei pacchetti sono archiviate nella directory src/contrib/Archive/packageName/. Mi piacerebbe utilizzare la funzione install_version in devtools (fonte here), ma tale funzione dipende dall'avere una struttura di archivio simile a CRAN invece di avere tutte le versioni del pacchetto in src/contrib/.Esistono strumenti di gestione del repository di pacchetti R?

Esistono strumenti di gestione del repository del pacchetto R che facilitano la creazione di questa struttura di directory e altre attività correlate (ad esempio, l'aggiornamento del file Archive.rds)?

Sarebbe anche bello se gli strumenti di gestione ha gestito la logica del pacchetto type sul lato repository in modo che io possa utilizzare lo stesso codice install.packages() o install_version() su un server Linux come sul mio Mac locale (cioè io non devo utilizzare type="both" o type="source" quando si installa localmente su un Mac).

+3

Si potrebbe fare questa domanda alla mailing list di R-devel (se non lo si è già fatto), lo sanno meglio. O forse anche direttamente dai manutentori del CRAN, cioè Kurt. –

+0

Grazie, l'ho fatto. Pubblicherò presto una risposta. –

risposta

4

Risposta breve: Non proprio per l'uso commerciale.

Risposta lunga: Ci sono un paio di strumenti che si possono usare per gestire il proprio repository, ma non c'è ancora un coerente ecosistema off-the-shelf.

I manutentori CRAN mantenere uno stuolo di script here per gestire il repository CRAN, ma non è chiaro il modo in cui tutti lavorano insieme, o che sono necessari parti per aggiornare l'indice dei pacchetti, controlli pacchetto correre, o gestire la struttura di directory.

La funzione tools::write_PACKAGES può essere utilizzata per aggiornare l'indice del pacchetto, ma deve essere aggiornato ogni volta che un pacchetto viene aggiunto, aggiornato o rimosso dal repository.

M.eik Michalke ha creato il roxyPackagepackage, che ha la possibilità di aggiornare automaticamente un determinato repository, installarlo, ecc Lo sviluppatore ha recentemente aggiunto la possibilità di avere la struttura dell'archivio imitare quello del CRAN con l'archive_structure funzione. Lo svantaggio è che il pacchetto non è su CRAN e sarebbe probabilmente meglio se integrato con devtools. È anche nuovo di zecca e non è ancora pronto per un ampio uso.

Infine, ho creato un piccolo Ruby script che controlla un determinato repository e aggiorna l'indice del pacchetto in caso di modifica di qualsiasi file. Tuttavia, questo è fatto per funzionare per la mia organizzazione specifica e dovrà essere refactored per uso esterno. Posso renderlo più generale se qualcuno è interessato a questo.