2015-08-15 17 views
5

Jak wyjaśniono na stronie this site, możliwe jest zdefiniowanie parametrów w nagłówku YAML pliku Rmarkdown, a wartości domyślne tam określone mogą zostać zastąpione przez rmarkdown::render("foo.Rmd", params = list(param1 = "bar"). Jednakże gdy próbuję to pojawia się następujący błąd:Nie można zmienić parametrów w dokumentach Rmd.

params obiekt już istnieje w środowisku drutach, więc nie mogą być nadpisane przez renderowanie params

Oto minimalne powtarzalne dokument RMD. Załóżmy, że nazwa pliku to test.Rmd.

--- 
title: "Test" 
output: pdf_document 
params: 
    name: Andreas 
--- 

Hello, my name is `r params$name`. 

Kiedy teraz spróbować rmarkdown::render("test.Rmd", params = list(name = "Jordan") zatrzymuje się z błędem napisane powyżej.

To jest mój sessionInfo():

R version 3.2.1 (2015-06-18) 
Platform: x86_64-apple-darwin14.4.0 (64-bit) 
Running under: OS X 10.10.4 (Yosemite) 

locale: 
[1] de_DE.UTF-8/de_DE.UTF-8/de_DE.UTF-8/C/de_DE.UTF-8/de_DE.UTF-8 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] knitr_1.11  rmarkdown_0.7.3 

loaded via a namespace (and not attached): 
[1] Rcpp_0.12.0  XML_3.98-1.3  digest_0.6.8  MASS_7.3-40  grid_3.2.1  
[6] plyr_1.8.3  gtable_0.1.2  magrittr_1.5  scales_0.2.5  ggplot2_1.0.1 
[11] stringi_0.5-5 reshape2_1.4.1 jwiDlst_0.1.1 proto_0.3-10  tools_3.2.1  
[16] stringr_1.0.0 munsell_0.4.2 yaml_2.1.13  parallel_3.2.1 colorspace_1.2-6 
[21] htmltools_0.2.6 

Dzięki Ci pomóc!

+0

Twój kod działa dobrze dla mnie. – SabDeM

Odpowiedz

8

Komunikat o błędzie wskazuje, że w bieżącym obszarze roboczym znajduje się już obiekt o nazwie params i należy go usunąć (rm(params)) przed wywołaniem rmarkdown::render(). Użyj opcji ls(), aby dokładnie sprawdzić obiekty w bieżącym środowisku.

1

Alternatywnie - dzianina dokument w nowym środowisku, włączając opcję envir = new.env():

rmarkdown::render("test.Rmd", params = list(name = "Jordan"), envir = new.env()) 

Lubię robić to w każdym przypadku, aby upewnić się, że raport rmarkdown używa tylko obiekty, które zostały wyraźnie określone jako część własny kod.