2015-07-03 16 views
11

Ho un file Rmd con un sacco di blocchi di codice nella cache.Come leggere la cache knitr/Rmd nella sessione interattiva?

Ora voglio continuare a sviluppare quello script utilizzando una sessione interattiva per giocare e testare diverse soluzioni prima di mettere il codice finale in un nuovo pezzo del documento.

Con uno script semplice R, ho potuto semplicemente trovarlo per ottenere la mia sessione interattiva alla pari con l'ultima riga dello script. Tuttavia, ciò comporterebbe la (ri) esecuzione di tutto il codice all'interno della sessione interattiva.

voglio leggere il mio file Rmd in una sessione interattiva ignorando la Markdown parte & facendo uso della knitr cache esistente, idealmente senza creare alcun output.

Come posso fare questo?

PS: io non sono alla ricerca di un modo specifico per IDE per impostare questa funzione, ma per un comando che posso correre da una semplice sessione di R in qualsiasi emulatore di terminale.

risposta

6

Io penso che l'esecuzione library("knitr"); knit("foo.Rmd") nella sessione della console/R è il modo più semplice per farlo, anche se sarà riscrivere foo.md, figure, ecc .. (Troppo occupato/pigro per testarlo in questo momento.)

probabilmente si potrebbe frugare nella directory cache e leggere i file memorizzati nella cache direttamente, ma che sarebbe molto più lavoro/più complicato.

+0

Voglio davvero evitare ri-scrivere il file Markdown, dal momento che potrei avere un Makefile a seconda che uno.Speravo in qualcosa di simile al tuo secondo suggerimento, ma in modo automatico nell'ordine (immagino che uno debba analizzare l'Rmd, identificare i blocchi di codice, cancellarli, controllare la cache corrispondente, caricare i dati se possibile o eseguire il codice saltando la stampa e trame le affermazioni altrimenti Se non ci fosse alcuna funzione a fare questo o qualcosa di simile, sarebbe bene scriverlo dato che lo userei più e più volte. La cosa più importante è che la cache può dipendere da parametri (anche memorizzati nella cache) sconosciuti al momento della leggendolo – mschilli

+1

@mschilli potresti fornire/dev/null (o un file che non ti interessa) al parametro 'output'? –

+0

@NickK: Potrei e questo funzionerebbe se la cache fosse prodotta da' Rscript - e 'library ("knitr"); knit ("foo.Rmd") "" in primo luogo, è stato comunque prodotto dalla libreria 'Rscript -e' (" knitr "); bar <-" X "; knit ("foo.Rmd") ''e' X' è sconosciuto al momento del caricamento della cache. Questo è uno dei motivi per cui voglio usare la cache: non solo farà risparmiare tempo non ri-calcolare tutto, ma anche la cache conterrà il valore assegnato a 'bar' quando' knit'ing 'foo.Rmd'. – mschilli

5

funzioni che ho creato caricare gli oggetti da pezzi memorizzati nella cache in una sessione R interattivo. Le funzioni sono lazyload_cache_dir e lazyload_cache_labels e sono disponibili in versione qwraps2> 0.2.4

un esempio dettagliato dell'uso di queste funzioni è here:

Rapida panoramica:

Diciamo che avete il file report.Rmd

--- 
title: "A Report" 
output: html_document 
--- 

```{r first-chunk, cache = TRUE} 
fit <- lm(mpg ~ wt + hp, data = mtcars) 
x <- pi 
``` 

```{r second-chunk, cache = TRUE} 
fit <- lm(mpg ~ wt + hp + am, data = mtcars) 
xx <- exp(1) 
``` 

Dopo il lavoro a maglia si finisce con questa directory di progetto

. 
├── report_cache 
│ └── html 
│  ├── first-chunk_bf368425c25f0c3d95cac85aff007ad1.RData 
│  ├── first-chunk_bf368425c25f0c3d95cac85aff007ad1.rdb 
│  ├── first-chunk_bf368425c25f0c3d95cac85aff007ad1.rdx 
│  ├── __packages 
│  ├── second-chunk_2c7d6b477306be1d4d4ed451f2f1b52a.RData 
│  ├── second-chunk_2c7d6b477306be1d4d4ed451f2f1b52a.rdb 
│  └── second-chunk_2c7d6b477306be1d4d4ed451f2f1b52a.rdx 
├── report.html 
└── report.Rmd 

e si desidera caricare gli oggetti da first-chunk.

lazyload_cache_labels("first-chunk", path = "report_cache/html") 
## Lazyloading report_cache/html/first-chunk_bf368425c25f0c3d95cac85aff007ad1 
ls() 
## [1] "fit" "x" 

Vedi the blog post Per dettagli sul caricamento solo un intero elenco di oggetti memorizzati nella cache o caricamento di oggetti specifici all'interno di un blocco in cache.

0

Internamente, knitr uses lazyLoad per caricare i risultati memorizzati nella cache, e così si può:

lazyLoad('knitr_cache_dir/chunk_2c7d6b477306be1d4d4ed451f2f1b52a') 

Assicurarsi di fornire il nome del file senza il suffisso.

Problemi correlati