以下.Rmd是我认为应该产生我正在寻找的内容:
---
title: "Untitled"
date: "10/9/2021"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
full_var <- function(var) {
cat("### `", var, "` {-} \n")
cat("```{r}", "\n")
cat("print('test')", "\n")
cat("```", "\n")
}
vars <- c("1", "2", "3")
```
```{r results = "asis"}
purrr::walk(vars, full_var)
```
Run Code Online (Sandbox Code Playgroud)
相反,它看起来像:
为什么print('test')不进行评估而是将其呈现为代码块?
如果您渲染代码以及在块中运行代码的结果,result='asis'我认为您可以管理您所追求的内容。您可以通过利用 的功能来做到这一点,knitr如下knit()所示:
---
title: "Untitled"
date: "10/9/2021"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
full_var <- function(var) {
# Define the code to be run
my_code <- "print('test')"
# Print the code itself, surrounded by chunk formatting
cat("### `", var, "` {-} \n")
cat("```{r}", "\n")
cat(my_code, "\n")
cat("``` \n")
# Use knitr to render the results of running the code.
# NB, the use of Sys.time() here is to create unique chunk headers,
# which is required by knitr. You may want to reconsider this approach.
cat(knitr::knit(
text = sprintf("```{r %s}\n%s\n```\n", Sys.time(), my_code),
quiet = TRUE
))
}
vars <- c("1", "2", "3")
```
```{r results = "asis"}
purrr::walk(vars, full_var)
```
Run Code Online (Sandbox Code Playgroud)
knitr运作当knitr 渲染 R Markdown 文件时,它会分以下几个阶段进行:
knitr从您的原始 .txt 文件生成一个纯 Markdown 文件.Rmd。这是使用 yaml 标头和块选项等内容的时候,并且至关重要的是,当您的 R 代码运行时results='asis'chunk 选项results = 'asis'只是改变中间 Markdown 脚本在渲染过程中的样子。例如,
```{r}
cat("print('# Header')")
```
Run Code Online (Sandbox Code Playgroud)
将被渲染为 Markdown,如下所示:(注意,这里的缩进意味着这是根据 Markdown 语法的代码):
## # print('# Header')
Run Code Online (Sandbox Code Playgroud)
然而,如果results = 'asis'使用,您将得到降价
print('# Header')
Run Code Online (Sandbox Code Playgroud)
需要认识到的关键一点是,虽然"print('# Header')"是有效的 R 代码,但它仅出现在流程的第2阶段,即所有 R 代码都已运行之后。
不幸的是,您不能期望results='asis'输出 R 代码然后运行它,因为knitr此时您的 R 代码已经完成运行。