2015-07-03 18 views
11

Mam plik Rmd z dużą ilością kawałków kodu w pamięci podręcznej.Jak odczytać pamięć podręczną knitr/Rmd w sesji interaktywnej?

Teraz chcę kontynuować rozwijanie tego skryptu przy użyciu interaktywnej sesji do zabawy i przetestowania różnych rozwiązań przed umieszczeniem ostatecznego kodu w nowym kawałku dokumentu.

Z prostym skryptem R, mogłem po prostu go pobrać, aby moja sesja interaktywna była na równi z ostatnią linią skryptu. Jednak spowoduje to (ponowne) wykonanie całego kodu w sesji interaktywnej.

Chcę przeczytać mój plik Rmd w sesji interaktywnej ignorując wykorzystanie istniejącej knitr cache Markdown część &, najlepiej bez tworzenia żadnych wyników.

Jak mogę to zrobić?

PS: Nie szukam jakiegoś specyficznego dla IDE sposobu konfiguracji, ale polecenia, które mogę uruchomić z prostej sesji R w dowolnym emulatorze terminalu.

Odpowiedz

6

myślę że działa library("knitr"); knit("foo.Rmd") w sesji konsoli/R jest najprostszym sposobem, aby to zrobić, choć będzie przepisać foo.md, dane, itp .. (zbyt zajęty/leniwy, aby przetestować go w tej chwili.)

Prawdopodobnie można porysować w katalogu cache i odczytywać bezpośrednio pliki z pamięci podręcznej, ale będzie to o wiele więcej pracy/trudniejsze.

+0

Naprawdę chcę uniknąć ponownego zapisywania pliku Markdown, ponieważ w zależności od tego mogę mieć plik Makefile.Miałem nadzieję na coś takiego jak twoja druga sugestia, ale w sposób automatyczny w kolejności (myślę, że trzeba parsować Rmd, identyfikować fragmenty kodu, mieszać je, sprawdzać pasującą pamięć podręczną, ładować dane, jeśli to możliwe, lub uruchamiać przeskakiwanie kodu print i jeśli nie ma funkcji, robiąc to lub coś podobnego, byłoby dobrze napisać, ponieważ używałbym go w kółko.Najważniej pamięć podręczna może zależeć od (również buforowanych) parametrów nieznanych w czasie – mschilli

+1

@mschilli mógłbyś dostarczyć/dev/null (lub plik, którego nie obchodzi) do parametru 'output'? –

+0

@NickK: Mógłbym i to działałoby, gdyby pamięć podręczna została utworzona przez' Rscript - e 'library ("knitr"), najpierw "knit" ("foo.Rmd") ". Zostało ono jednak stworzone przez bibliotekę" Rscript -e "(" knitr "), bar <-" X ", knit ("foo.Rmd") "' i 'X' jest nieznany w momencie ładowania pamięci podręcznej. Jest to jeden z powodów, dla których chcę korzystać z pamięci podręcznej: nie tylko oszczędza czas nie przerabia wszystkiego, ale także pamięć podręczna zawiera wartość przypisaną do 'bar' przy' knit'ing 'foo.Rmd'. – mschilli

5

Utworzone funkcje ładują obiekty z pamięci podręcznej w interaktywną sesję R. Funkcje są lazyload_cache_dir i lazyload_cache_labels i są dostępne w wersji qwraps2> 0.2.4

Szczegółowy Przykładem wykorzystania tych funkcji jest here:

Krótki opis:

Powiedzmy, że masz plik 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) 
``` 

Po zakończeniu robótki otrzymujesz ten katalog projektu

. 
├── 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 

i chcesz załadować obiekty z first-chunk.

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

Zobacz the blog post Szczegółowe informacje na temat ładowania tylko cały katalog pamięci podręcznej obiektów lub załadunku określonych obiektów z poziomu pamięci podręcznej fragmentu.

0

Wewnętrznie knitr uses lazyLoad załadować buforowane wyniki, a więc można:

lazyLoad('knitr_cache_dir/chunk_2c7d6b477306be1d4d4ed451f2f1b52a') 

Upewnij dostarczyć nazwę pliku bez rozszerzenia.