2015-03-10 12 views
7

Attualmente sto convertendo un articolo JSS, che utilizza knitr, in una vignetta del pacchetto R . Tuttavia, sono in dubbio sul posizionamento delle vignette, sulla struttura e su come dovrei gestire i lunghissimi tempi di calcolo che richiede circa 2 giorni su un laptop normale.Vignette R computazionalmente pesanti

Il official documentation offre poche o nessuna informazione in merito. Una piccola nota in una risposta nello mailing list è l'unica informazione che trovo durante la ricerca. Brian Ripley scrive qui:

In particolare, CRAN non accetta pacchetti con vignette Sweave che prendono troppo tempo per verificare - si prende circa 8 ore [...]. Chiediamo solo che ci viene detto così su presentazione.

Hadley Wickham's description di vignette dice di impostare eval = FALSE come l'opzione di blocco. Tuttavia, questo non è un approccio praticabile nel mio caso in quanto sono necessari i dati generati dai calcoli.

This presentation suggerisce di utilizzare /inst/doc per vignette precompilate e pesanti. Tuttavia, ciò non concorda molto bene con le nuove linee guida sull'uso di /vignettes per le vignette dei pacchetti (o cosa?).

Attualmente, ho inserito i miei file di origine in /vignettes e creo un file .RData che contiene gli oggetti più costosi dal punto di vista computazionale (e che è anche abbastanza grande). Gli script quindi controllano se gli oggetti sono disponibili attraverso il file .RData, in caso contrario, gli oggetti vengono creati. Quindi compilare ed eseguire completamente da zero, il file .RData può essere semplicemente cancellato.

Qualcuno ha qualche esperienza o indicazioni su questo problema? La vignetta dovrebbe essere in /vignettes o /inst/doc? Se il primo è preferito, dove posiziono i file necessari come .bib, .RData, ecc.? Devo ammettere che trovo il /vignettes vs /inst/doc un po 'confuso.

+1

Sfortunatamente, questa è una domanda di politica CRAN, non una domanda di programmazione. La migliore risposta arriverà da una email a CRAN. Potresti provare anche r-devel, ma ho il sospetto che ti diranno di chiedere anche a CRAN. – Thomas

+0

@Thomas Sì, lo vedo ora. Immagino che questo sia stato anche un tentativo di evitare di disturbare i manutentori del CRAN (che sono sicuro che hanno già troppo poco tempo) e di sentire se e come gli altri hanno gestito problemi simili. Se non è inappropriato, lascerò qui la domanda e invierò un'e-mail ai manutentori in seguito se non viene visualizzato nulla. –

+1

Ha senso. Se ricevi una risposta da CRAN, ti incoraggio a postare la risposta qui in modo che altri possano trovarla. Sono persone impegnate, ma è anche il loro compito (per lo più auto-nominato) di mantenere il sistema, quindi se i loro file di aiuto non sono chiari, è loro la responsabilità di chiarire le cose. – Thomas

risposta

1

Presento la seguente soluzione per le vignette basate su knitr. Immagino che tu stia utilizzando devtools per la manutenzione del pacchetto. Per impedire l'esecuzione di codice R da vignetta durante i controlli del pacchetto (cioè R CMD check.), Che vi permetterà di includere vignette computazionalmente pesanti, la vignetta deve:

  1. impiegare un motore di vignetta che non groviglio il codice R. In altre parole, il motore non deve produrre file .R in inst/doc quando si esegue devtools::build_vignettes(). Il pacchetto knitr fornisce motori che non intrecciano il codice R, incluso knitr::rmarkdown_notangle che può essere utilizzato come sostituzione sostitutiva per knitr::rmarkdown.
  2. Include il codice che disabilita la valutazione del blocco in modo dinamico quando rileva che è in esecuzione all'interno di una chiamata a R CMD check. Questo può essere ottenuto posizionando il codice nella parte superiore della vignetta che controlla le varie impostazioni e le impostazioni di impostazione dei blocchi usando knitr::opts_chunk$set(eval = ...) quando appropriato. Il codice mostrato di seguito è stato preso in prestito dal pacchetto knitr, così tante grazie a Yihui Xie per aver lavorato su come farlo.

Di seguito è riportato un esempio di un file vignetta rmarkdown che utilizza queste due strategie in modo che possa essere costruito utilizzando devtools::build_vignettes() e non avrà il suo codice eseguiti durante R CMD check. Si noti che il codice viene ancora eseguito durante la creazione del pacchetto (ad esempio, che viene eseguito durante devtools::build() e devtools::check()).

--- 
title: "example vignette" 
output: 
    rmarkdown::html_document: 
    self_contained: yes 
fontsize: 11pt 
documentclass: article 
vignette: > 
    %\VignetteIndexEntry{example vignette} 
    %\VignetteEngine{knitr::rmarkdown_notangle} 
--- 

```{r, include = FALSE} 
is_check <- ("CheckExEnv" %in% search()) || any(c("_R_CHECK_TIMINGS_", 
      "_R_CHECK_LICENSE_") %in% names(Sys.getenv())) 
knitr::opts_chunk$set(eval = !is_check) 
``` 

```{r} 
Sys.sleep(100) 
``` 

Per esempi di questo approccio in natura, see this vignette for a developmental package on GitHub.

+0

Grazie per la risposta, uso semplicemente 'rmarkdown_notangle' per uno dei miei pacchetti, e funziona per Windows ma non lo fa t lavoro per linux né mac. Ho incontrato un problema simile a questo: . E io uso l'ultima versione di 'knitr' che è 1.17 su CRAN. Hai qualche idea? – Consistency

+0

Non mi dispiace scusa, 'rmarkdwon_notangle' in knitr 1.17 funziona per me su Ubuntu 16.04. L'unica cosa che posso pensare è provare la versione di sviluppo di knitr su Github? – paleo13

Problemi correlati