从现有的.Rmd呈现新的条件.Rmd

从现有的.Rmd呈现新的条件.Rmd,r,shiny,rstudio,knitr,r-markdown,R,Shiny,Rstudio,Knitr,R Markdown,我正在构建一个闪亮的应用程序,根据用户输入创建一个.Rmd报告。我能够render()将.Rmd转换为.html等,并使用echo=FALSE有选择地从输出中排除代码块,并防止它们使用eval=FALSE运行 我想做的是从现有的.Rmd中重新生成一个新的.Rmd,并根据相同的条件逻辑选择要写入的块。换句话说,render()将.Rmd转换为新的.Rmd,而不是另一种文件类型。这样做的原因是,我想为用户提供一个表示当前用户会话的.Rmd文件,该文件可以在RStudio中重新运行,以确保再现性 这就

我正在构建一个闪亮的应用程序,根据用户输入创建一个.Rmd报告。我能够
render()
将.Rmd转换为.html等,并使用
echo=FALSE
有选择地从输出中排除代码块,并防止它们使用
eval=FALSE
运行

我想做的是从现有的.Rmd中重新生成一个新的.Rmd,并根据相同的条件逻辑选择要写入的块。换句话说,
render()
将.Rmd转换为新的.Rmd,而不是另一种文件类型。这样做的原因是,我想为用户提供一个表示当前用户会话的.Rmd文件,该文件可以在RStudio中重新运行,以确保再现性

这就是我想做的:

例子 现有的

---
title: User Session `r Sys.Date()`
output: html_document
author: "Johnny Johnson"
---

```{r, echo = FALSE, include = FALSE}
con1 <- input$userCharInput1 != ""
```

This text will render regardless of what the user does.

```{asis, echo = con1}
This text will only render if con1 is TRUE.
```

```{r, echo = con1, eval = con1}
out1 <- someFun(input$userCharInput1)
out1
```

```{r}
out2 <- sum(c(10, 20))
out2
```
---
标题:用户会话'r Sys.Date()`
输出:html\u文档
作者:“约翰尼·约翰逊”
---
```{r,echo=FALSE,include=FALSE}

con1新文件应该只包含
eval
echo
TRUE
的块,还是包含
eval=TRUE
的块(不管
echo
)或…?那么区块之间的文本呢,所有内容都应该是新文件的一部分吗?区块参数是什么并不重要,但我希望区块有条件地不出现在new.Rmd中。理想情况下,我会设计一个自定义参数来实现这一点。代码块之间的文本都组织在
{asis,…}
块中,因此执行此操作的单个参数将在整个文档中工作。没有答案,因为我还没有完成(而且没有时间).
purl
可以用于,但这对Rmd-->Rmd没有帮助。我认为有必要像
knitr
那样解析文件,类似于
pat_md();通过查看钩子,我意识到呈现到
md_document()
对我来说几乎是完美的,但最接近的格式是
markdown\u github
,其中代码块的格式是“r…”<代码>。必须有一种方法来定制输出钩子,比如
md_document()`将
{}
放在
r
周围,因为我认为这正是我想要的。然后用户就可以在RStudio上运行所有块来重现会话的结果。我想我理解你在做什么。但这基本上会给出块的代码,使用标记将其格式化为代码。你失去的是块选项,对吗?我已经想了一段时间了。最好的解决方案是
knit
文档,使用块钩子捕获所有活动块的标签,并使用
all_patterns$md
中的正则表达式提取块。你能在问题中添加一个Rmd示例文件吗?
---
title: User Session `r Sys.Date()`
output: html_document
author: "Johnny Johnson"
---

This text will render regardless of what the user does.

```{r}
out2 <- sum(c(10, 20))
out2
```