rmarkdown 闪亮的用户输入块?

rmarkdown shiny user input in chunk?

我有一个闪亮的应用程序,允许用户下载 HTML 文件(从 .Rmd 文件编写),其中包含用于 运行 基于所有用户输入的分析的代码.我正在尝试编写在用户输入不同时被更改的基本 .Rmd 文件。我在将用户输入变量(例如 input$button1)包含到 R 代码块中时遇到问题。说 input$button1 的用户输入 = "text1".

```{r} results <- someFun(input$button1) ```

我想把它织成这样:

```{r} results <- someFun('text1') ```

不过,每次我下载针织 HTML 时,我都会 input$button1 写入文件。我还希望能够生成一个使用此替换格式化的 .Rmd 文件。似乎 knit_expand() 可能是关键,但我似乎无法将可用示例与我的具体问题联系起来。是 knit_expand() 整个 .Rmd 文件并明确指定您想要代入的所有参数的正确方法,还是 .Rmd 文件本身有更优雅的方法?我更喜欢类似于 的方法,除了我可以使用 r 引擎而不是 asis 引擎。任何帮助将不胜感激。谢谢!

知道了。下面的解决方案。感谢一辉的指导。诀窍是 knit_expand() 整个 .Rmd 文件,然后 writeLines() 到一个新文件,然后渲染。事后看来,整个过程是有道理的。事后看来。

例如,p1是一个字符参数'ice cream'p2是一个整数参数10ui.R 中有一个名为 input$mdType 的 user-defined 参数,用于决定提供下载的格式。

Rmd 文件:

Some other text.
```{r}
results <- someFun("{{p1}}", {{p2}})
``` 

downloadHandler()内server.R:

  content = function(file) {
    src <- normalizePath('userReport.Rmd')
    # temporarily switch to the temp dir, in case you do not have write
    # permission to the current working directory
    owd <- setwd(tempdir())
    on.exit(setwd(owd))
    file.copy(src, 'userReport.Rmd')
    exp <- knit_expand('userReport.Rmd', p1=input$p1, p2=input$p2)
    writeLines(exp, 'userReport2.Rmd')

    out <- rmarkdown::render('userReport2.Rmd', switch(input$mdType, 
             PDF = pdf_document(), HTML = html_document(), Word = word_document()))
    }
    file.rename(out, file)
  }

渲染前结果userReport2.Rmd:

```{r}
results <- someFun("ice cream", 10)
```