2012-09-07 6 views
8

Sto cercando di creare un pacchetto in R in cui ho creato molte nuove classi personalizzate. Ogni classe è in un file diverso. Le classi ereditano da una classe genitore ed ereditano in altre classi.Collegamento di più file durante la creazione di un pacchetto in R

Durante l'esecuzione i miei codici io chiamo ognuno di loro come questo

source("package/father.R") 
source("package/son.R") 
source("package/grandson.R")  

Definizione per alcuni dei metodi necessari dalla Classe nipote in definito in classe Son. Io uso package.skeleton() per chiamare ciascuno di loro e creare un pacchetto e sembra funzionare bene. Ma quando si esegue R CMD Check (e quando si prova ad installare in R), si genera un errore perché la funzione tenta di chiamare i file in ordine alfabetico e quindi il nipote del file .R viene chiamato prima di son.R e mostra e errore dicendo che i metodi non sono stati definiti. Se cambio i nomi in zgrandson.R, R ha chiamato l'ultimo file e tutto sembra funzionare correttamente, ma evidentemente non è una soluzione al problema.

Ho letto tutorial per la creazione di pacchetti, ma tutti sembrano trattare casi semplici in cui non vi è alcuna ereditarietà/chiamata di altri file in R. Spero di essere stato chiaro.

+0

bel lavoro su un primo post. –

+2

"Se cambio i nomi in zgrandson.R, R ha chiamato l'ultimo file e tutto sembra funzionare correttamente, ma evidentemente non è una soluzione per il problema." Perché? Questa è esattamente la soluzione che uso e anche molte altre (inizia i primi script con qualcosa come "00Classes.R'). –

+0

Sta funzionando bene, ma sembrava un modo così brutto/hackish per risolvere il problema: D. Grazie per avermi fatto sapere che anche altre persone stanno usando questa soluzione alternativa. Anche se mi chiedo se il problema è con la mia stessa struttura del codice, poiché nessuno degli script dei buoni programmatori che ho passato sembra chiamare altri file. –

risposta

5

Per quanto ho capito, è possibile utilizzare il campo Collate nel file DESCRIPTION per controllarlo.

Citando dalla Writing R Extensions manual:

campo Un ‘fascicolazione’ può essere utilizzato per controllare l'ordine di collazione per i file di codice R in un pacchetto quando questi vengono elaborati per il pacchetto installazione. L'impostazione predefinita è la fascicolazione in base alla locale "C". Se presente, la specifica di fascicolazione deve elencare tutti i file di codice R nel pacchetto (prendendo in considerazione le sottodirectory specifiche del sistema operativo, vedere le sottodirectory del pacchetto) come un elenco di spazi separati di file percorsi relativi alla sottodirectory R. Percorsi che contengono spazi bianchi o citazioni devono essere citati. Verrà utilizzato un campo di confronto specifico per il sistema operativo ("Collate.unix" o "Collate.windows") anziché "Fascicola".

Quindi, è possibile specificare:

Collate: 
    father.r 
    son.R 
    grandson.r 

O semplicemente rinominare i file in modo tale che ordinamento lessicografico comporterà l'ordine di collazione corretto, come avete indicato nella sua interrogazione.


ma anche vedere this answer da @DirkEddelbuettel su una questione analoga.

+0

Risposta perfetta! Grazie mille per la risposta super veloce :) –