2014-07-15 25 views
15

Mam dokument .Rmd, który proces knitr dobrze.knitr: uruchom wszystkie fragmenty w dokumencie Rmarkdown

Chciałbym uruchomić wszystkie fragmenty w dokumencie, dzięki czemu mogę badać wyniki w mojej powłoce R.

W Rstudio istnieje opcja uruchomienia wszystkich fragmentów dokumentu, , ale nie mogę znaleźć sposobu na uzyskanie tego samego efektu w prostej sesji R (otwartej w moim terminalu).

Czy istnieje sposób, aby to zrobić?

Odpowiedz

15

Korzystanie Run all chunks odpowiada:

  • utworzyć pliku tymczasowego R
  • Używaj knitr::purl wyodrębnić wszystkie kawałki R do pliku temp
  • Korzystanie source() uruchomić plik
  • Usunięcie plik tymczasowy

Takich jak:

tempR <- tempfile(fileext = ".R") 
library(knitr) 
purl("SO-tag-package-dependencies.Rmd", output=tempR) 
source(tempR) 
unlink(tempR) 

Ale będziesz chciał przekształcić to w funkcję. Jest to dość łatwe, z wyjątkiem trzeba użyć sys.source uruchomić skrypt R w globalnym środowisku:

runAllChunks <- function(rmd, envir=globalenv()){ 
    tempR <- tempfile(tmpdir = ".", fileext = ".R") 
    on.exit(unlink(tempR)) 
    knitr::purl(rmd, output=tempR) 
    sys.source(tempR, envir=envir) 
} 

runAllChunks("SO-tag-package-dependencies.Rmd") 
+1

Po prostu dodaję lekko do środka, ale działa jak mistrz! Oto moja modyfikacja: runAllChunks <- function (rmd, envir = globalenv()) { tempR <- tempfile (tmpdir = ".", Fileext = ".R") knitr :: purl (rmd, output = tempR) sys.source (tempR, envir = envir) unlink (tempR) } – lucacerone

+0

@lucacerone Dziękujemy za wykrycie błędu w moim kodzie i podanie poprawki. Zmieniłem odpowiedź, aby to odzwierciedlić. – Andrie

2

Nawet nie trzeba używać purl(): Jeśli knit dokument w konsoli R, kod jest oceniany w środowisku globalnym (domyślnie zobacz opcję na knit()).

Tak więc, jeśli plik jest my.Rmd, to wystarczy uruchomić

library(knitr) 
knit('my.Rmd') 

Przydatny trik: jeśli chcesz uruchomić tylko do pewnego punktu w dokumencie wstawić błąd jak:

stop('here') 

w miejscu w kodzie fragmentu chcesz go zatrzymać i ustawić następujące knitr opcję:

opts_chunk $ zestaw (błąd = false)

w konsoli przed uruchomieniem knit().

Powiązane problemy