У меня есть следующий файл Rmd
который я назвал test.Rmd
:
---
title: "test"
output: html_document
---
'''{r}
print(y)
'''
'''{r}
x <- "don't you ignore me!"
print(x)
'''
Я хочу вызвать render следующим образом:
render('test.Rmd', output_format = "html_document",
output_file = 'test.html',
envir = list(y="hello"))
но он терпит неудачу:
processing file: test.Rmd
|................ | 25%
ordinary text without R code
|................................ | 50%
label: unnamed-chunk-1
|................................................. | 75%
ordinary text without R code
|.................................................................| 100%
label: unnamed-chunk-2
Quitting from lines 11-13 (test.Rmd)
Error in print(x) : object 'x' not found
Первый кусок прошел отлично, поэтому что-то сработало. Если я определяю y
в своей глобальной среде, я могу запустить его без аргумента envir
и он отлично работает.
Я решил, что render
не понравится спискам, поэтому дайте ему подходящую среду:
y_env <- as.environment(list(y="hello"))
ls(envir = y_env)
# [1] "y"
render('test.Rmd', output_format = "html_document",
output_file = 'test.html',
envir = y_env)
Но это еще хуже, он не находит print
!
processing file: test.Rmd
|................ | 25%
ordinary text without R code
|................................ | 50%
label: unnamed-chunk-1
Quitting from lines 7-8 (test.Rmd)
Error in eval(expr, envir, enclos) : could not find function "print"
Теперь в документах упоминается использование функции new.env
поэтому из отчаяния я пробую это:
y_env <- new.env()
y_env$y <- "hello"
render('test.Rmd', output_format = "html_document",
output_file = 'test.html',
envir = y_env)
И теперь это работает!
processing file: test.Rmd
|................ | 25%
ordinary text without R code
|................................ | 50%
label: unnamed-chunk-1
|................................................. | 75%
ordinary text without R code
|.................................................................| 100%
label: unnamed-chunk-2
output file: test.knit.md
"C:/Program Files/RStudio/bin/pandoc/pandoc" +RTS -K512m -RTS test.utf8.md --to html --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash --output test.html --smart --email-obfuscation none --self-contained --standalone --section-divs --template "**redacted**\RMARKD~1\rmd\h\DEFAUL~1.HTM" --no-highlight --variable highlightjs=1 --variable "theme:bootstrap" --include-in-header "**redacted**\AppData\Local\Temp\RtmpGm9aXz\rmarkdown-str3f6c5101cb3.html" --mathjax --variable "mathjax-url:https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"
Output created: test.html
Поэтому я смущен несколькими вещами, чтобы напомнить:
- Почему
render
распознает списки (первый фрагмент не сбой), но затем игнорирует регулярные назначения в кусках - Почему моя вторая попытка не работает и как она отличается от моей третьей попытки?
- Это ошибка?
- Какой идиоматический способ сделать это?