从R笔记本中输出R标记

从R笔记本中输出R标记,r,rstudio,r-markdown,knitr,R,Rstudio,R Markdown,Knitr,当我从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) ```

当我从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!")
}
```
生成的标记文件几乎正确:

我只需要一种方法将代码块前导从
r
替换为
{r}
。我可以只运行
sed
,但如果可能的话,我希望在RStudio中编织时完成所有工作


用例:编码分配。写一个包含问题和答案的文件,编织时把答案去掉,这样我就可以给学生打分数(没有答案)。然后他们可以在Rstudio中打开它并填写所需内容。

它输出文件时使用
``r
而不是
```{r}
的原因是因为它是一个标记文件,而不是rmarkdown文件,所以它只是标记语法不同而已

但是,如果您在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中,则需要将syntax更改为Rmd syntax。为此,您只需删除“{.r}”中的“.”,这可以通过添加以下内容轻松完成:

```{r eval=TRUE, include=FALSE}
system2("sed", "-e 's/{.r}/{r}/' Homework.md", stdout = 'Homework_out.Rmd')
```
您可以更改输出文件名,我将其命名为“家庭作业\u out.Rmd”,因为我假设您的原始.Rmd命名为“家庭作业.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!")
}
```

我不是100%确定我同意你的观点,但是如果你想把问题和答案分开,你可以使用子表单吗?像这样的?还是你想创建一个标记文件来输出标记文件?@AmitKohli在他们帖子的底部,OP说他们想要一个文件。让子文件在父母编译时编译是一个未充分利用的特性,但这并不能满足他们的问题。他们想创建一个标记文件来输出标记文件,所以我还是有点困惑。在您的代码中,问题似乎在于脚本输出的是
r
,而不是
{r}
,但是您没有提供用于输出rmarkdown的任何代码,只提供了markdown输出本身。对我来说,更有趣的问题是如何通过编程删除答案。。。从发布的示例来看,它看起来并不简单或系统…@AmitKohli很抱歉没有具体说明。我从Rstudio编织笔记本,它使用knitr。包括子文件可以工作,但这会使开发作业有点麻烦。
---
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!")
}
```