当我从Rstudio编织笔记本时,我想从笔记本中输出Rmarkdown(原因如下)。我可以几乎得到我想要的东西,例如:
---
title: "Homework"
output:
html_document:
keep_md: true
md_extensions: +backtick_code_blocks
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(eval = FALSE, echo = TRUE)
```
Fill the function:
```{r echo=-3}
is_even = function(n) {
# TODO
n %% 2 == 0
}
if(is_even(8)) {
print("correct!")
} else {
print("wrong!")
}
```
生成的markdown文件几乎是 正确:
Fill the function:
```r
is_even = function(n) {
# TODO
}
if(is_even(8)) {
print("correct!")
} else {
print("wrong!")
}
```
我只需要一种方法即可将代码块前导从r
替换为{r}
。我可以只运行sed
,但如果可以的话,我想在RStudio中进行编织。
用例:编码分配。写一个包含问题和答案的文件,并在编织时将答案剥离掉,这样我就可以将所得的减价(没有答案)提供给学生。然后,他们可以在Rstudio中打开它并填写所需的内容。
答案 0 :(得分:0)
它使用 ```r
而不是 ```{r}
输出文件的原因是因为它是降价文件而不是rmarkdown文件,因此只是markdown语法不同。
但是,如果您在R中打开该文件,则仍然可以运行代码,因此这并不是真正的问题。
然后,如果您的目标是将Rmarkdown文件提供给您的学生,那么代码块看起来就像他们在原始文件中所做的那样,那就有办法了。
无论哪种方式,您都应该使用“ md_document”输出,因为据您所知,您将不会使用html文件。
您的标题应该是:
---
output:
md_document:
variant: 'markdown+backtick\_code\_blocks'
title: Homework
---
将输出一个.md文件,如:
---
output:
md_document:
variant: 'markdown+backtick\_code\_blocks'
title: Homework
---
Fill the function:
``` {.r}
is_even = function(n) {
# TODO
}
if(is_even(8)) {
print("correct!")
} else {
print("wrong!")
}
```
标头现在具有'{.r}',因为它指示元素具有类r(同样是md语法)
如果要在.Rmd中添加它,则需要将语法更改为rmd语法。为此,您只需删除“。”在“ {.r}”中,可以轻松添加:
```{r eval=TRUE, include=FALSE}
system2("sed", "-e 's/{.r}/{r}/' Homework.md", stdout = 'Homework_out.Rmd')
```
您可以更改输出文件名,我将其命名为“ Homework_out.Rmd”,因为我假设您的原始.Rmd被命名为“ Homework.Rmd”。
生成的.Rmd将如下所示:
---
output:
md_document:
variant: 'markdown+backtick\_code\_blocks'
title: Homework
---
Fill the function:
``` {r}
is_even = function(n) {
# TODO
}
if(is_even(8)) {
print("correct!")
} else {
print("wrong!")
}
```