2015-05-21 12 views
10

Sono in procinto di creare un pacchetto in R e voglio anche includere un file R Markdown. Questo modello RMarkdown contiene funzioni del mio pacchetto ed è reso in un documento html tramite knitr.Come includere il file RMarkdown nel pacchetto r?

L'obiettivo è eseguire regolarmente una funzione (tramite un cronjob) che esegue il rendering del file RMarkdown per produrre report settimanali.

Come è possibile aggiungere tali file a un pacchetto R (come un file .Rmd) e fare riferimento a .Rmd quando si effettua una chiamata di funzione per il rendering di detto modello?

+1

Ho chiuso questo come una doppia dozzina di domande esistenti relative a "come includo $ FOO" nel mio pacchetto, e la risposta è sempre "sotto" inst/'". –

+1

@DirkEddelbuettel Anche se potrebbe essere ovvio per te, dato che hai una meta-conoscenza strutturale più ampia, la risposta qui sotto era esattamente ciò che stavo cercando, e il post collegato non avrebbe risposto alla mia domanda. In particolare, l'accesso a un Rmd (diverso dal semplice chiamare 'data (x)' era la chiave –

+1

@DanielEgan, è stato contento di averlo aiutato, ma il sito in realtà non migliora quando scriviamo le stesse cose X volte con etichette diverse. , la risposta è essenzialmente "use' system.file() '" - quindi prova ad esempio 'system.file (" doc "," knitr-intro.Rmd ", package =" knitr ")" che * non importa dove e come hai installato knitr * ti fornirà un percorso completo del file - come è venuto da 'inst/doc/knitr-intro.Rmd' e R può quindi calcolare queste cose.Questo è abbastanza ben documentato (se difficile da trovare all'inizio) –

risposta

20

Quando si crea un pacchetto R, si avrà una struttura di directory contenente le seguenti (tra gli altri) nella directory principale del pacchetto: DESCRIPTION, NAMESPACE, e la directory R/. Se si dispone anche di una directory inst/, tutto all'interno di tale directory viene copiato letteralmente nella directory del pacchetto, escluso lo inst/.

Per esempio, se la directory di pacchetto si presenta così:

+- DESCRIPTION 
+- NAMESPACE 
+- inst/ 
| \- rmd/ 
|  \- file.Rmd 
\- R/ 
    +- file1.R 
    +- file2.R 
    \- file3.R 

Poi, quando si crea il pacchetto e installarlo, troverete nel seguente nella libreria del pacchetto:

+- DESCRIPTION 
+- INDEX 
+- NAMESPACE 
+- rmd/ 
| \- file.Rmd 
\- R/ 
    +- packagename 
    +- packagename.rdb 
    \- packagename.rdx 

(Altri file/directory vengono creati durante il processo, li sto ignorando per semplicità.)

L'ultima informazione che devi sapere è "come posso accedere a è un file una volta installato? " Dal momento che alcuni sistemi di installare il biblioteca R in directory differenti, e per di più gli utenti installano spesso pacchetti all'interno di un R biblioteca personale, non si può sapere a priori dove cercare Inserisci system.file:

system.file("rmd/file.Rmd", package="packagename") 
## [1] "c:/R/R-3.1.3/library/packagename/rmd/file.Rmd" 

Questo può essere utilizzato per l'intero file Rmd. Lo uso per i modelli specifici dell'azienda per i documenti resi da Rmd. Cioè, cerco file "include" per personalizzare il LaTeX in modo che il PDF renderizzato abbia intestazioni/piè di pagina e sia in stile come vogliamo. Questo passaggio richiede la scrittura di una funzione che sostituisce lo pdf_document (ad esempio) nell'intestazione Rmd YAML, ma che è coperta bene allo rmarkdown.rstudio.com.

+1

grazie mille @ r2evans, questo è stato molto utile ed era solo la risposta che stavo cercando, lo apprezzo! –