通过 rmardown 中的循环创建代码片段 [英] Create code snippets by a loop in rmardown

查看:19
本文介绍了通过 rmardown 中的循环创建代码片段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

类似于

我尝试了什么:

我尝试关注:

Similar to how to create a loop that includes both a code chunk and text with knitr in R i try to get text and a Code snippet created by a Loop.

Something along this:

---
title: Sample
output: html_document
params:
  test_data: list("x <- 2", "x <- 4")
---


for(nr in 1:3){
cat(paste0("## Heading ", nr))
```{r, results='asis', eval = FALSE, echo = TRUE}
params$test_data[[nr]]
```
}

Expected Output would be:

What i tried:

I tried to follow: https://stackoverflow.com/a/36381976/8538074. But printing "```" did not work for me.

解决方案

You can make use of knitr hooks. Take the following MRE:

---
title: "Untitled"
output: html_document
params:
  test_data: c("x <- 2", "x <- 4")
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

```{r, results = 'asis', echo = F}
hook <- knitr::hooks_html()$source
opts <- knitr::opts_chunk$get()
chunks <- eval(parse(text = params$test_data))

for(nr in seq_along(chunks)){
  cat(paste0("## Heading ", nr, "\n"))
  cat(hook(chunks[nr], options = opts))
}
```

We get the default source hook and also the default chunk options. Then we get the test data, which is supplied as a string. Therefore we parse and evaluate that string. In the loop we simply call the source hook on each element of the test data. Here is the result:

这篇关于通过 rmardown 中的循环创建代码片段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆