我正在考虑开发一个 .rmd 文件,该文件可以根据前面的 R 结果在输出文件(.html、.pdf、...)中动态写入一些叙述 block 。简单地说,我希望它是如何工作的:
```{r,echo=F,include=FALSE}
x=1;
```
##if x=1 then output text below
text1
##if x=2 then output text below
text2
.....
最佳答案
当knitr
处理一个文档,文档被分成两类输入:普通文本和代码块。普通文本保持不变并传递到输出文件。因此,如果应该动态包含纯文本,则它必须位于 block 内。
代码块根据它们的 options 进行评估.在当前情况下,最重要的选项是:
eval
echo
results
engine
eval
确定是否评估 block ; eval = FALSE
跳过 block 。 echo
决定是否显示 block 的源代码。 results
确定如何处理 block 的输出。默认情况下(results = "markup
),输出 Hook 用于将特定于文档类型的标记应用于输出。 results = "asis"
表示所有输出都“按原样”包含在输出文件中,没有任何修改。通过这三个选项,可以完成以下任务:
This is some text ...
```{r, echo = FALSE, eval = FALSE, results = "asis"}
cat("... with a secret inside ...")
```
```{r, echo = FALSE, eval = TRUE, results = "asis"}
cat("... that is dynamically generated.")
```
输出:
This is some text ...
... that is dynamically generated.
请注意,不评估第一个 block ,因为
eval = FALSE
.但是,
cat()
比较麻烦来自 R block 的大量文本。 engine
可以用来克服这个。除了R,还有other engines可用于评估 block ,其中(当前未记录?)引擎asis
.这个引擎非常简单。来自 knitr
NEWS file :added a new engine named
asis
to write the chunk content without processing it; it also respects the chunk optionsecho
andeval
-- when either one isFALSE
, the chunk will be hidden; this makes it possible to write text conditionally
结合
asis
具有以下语法糖的引擎 (source)for language engines, the syntax of R Markdown code chunk headers can be
```{lang, option=value}`
now (e.g.```{python}
and```{Rcpp}
), which is equivalent to```{r, engine='lang', option=value}
上面的例子变成:
This is some text ...
```{asis, echo = FALSE}
... with a secret inside ...
```
```{asis, echo = TRUE}
... that is dynamically generated.
```
关于r - knitr可以根据每个chunk中的R代码结果动态输出叙述文本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34599993/