[英]Create RMarkdown headers and code chunks in purrr
以下.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)
```
相反,它看起來像:
為什么不評估print('test')
而是將其顯示為代碼塊?
如果您在result='asis'
塊中呈現代碼以及運行代碼的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)
```
knitr
工作原理當knitr
呈現 R Markdown 文件時,它會在以下階段進行:
knitr
從你原來的.Rmd
生成一個普通的 markdown 文件。 這是使用 yaml 標頭和塊選項之類的東西的時候,並且在您的 R 代碼運行時至關重要results='asis'
chunk 選項results = 'asis'
只是改變了中間 Markdown 腳本在渲染過程中的樣子。 例如,
```{r}
cat("print('# Header')")
```
將被呈現為如下所示的降價:(注意這里的縮進意味着這是根據降價語法的代碼):
## # print('# Header')
然而,如果使用results = 'asis'
,您將獲得降價
print('# Header')
要意識到的關鍵是,盡管"print('# Header')"
是有效的 R 代碼,它只出現在過程的第2階段,也就是在所有 R 代碼都已運行之后。
不幸的是,您不能期望results='asis'
會輸出 R 代碼然后運行它,因為此時knitr
已經完成了您的 R 代碼的運行。
實現目標的另一種方法:
---
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(eval(parse(text = "print('test')")), "\n")
cat("```", "\n")
}
vars <- c("1", "2", "3")
```
```{r results = "asis"}
purrr::walk(vars, full_var)
```
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.