rmarkdown闪亮的用户输入?

时间:2015-12-19 21:50:22

标签: r shiny r-markdown

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

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

我想要像这样编织:

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

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

1 个答案:

答案 0 :(得分:2)

知道了。解决方法如下感谢Yihui的指导。诀窍是MM/dd/yyyy HH:mm:ss整个.Rmd文件,然后knit_expand()到一个新文件,然后渲染。事后看来,整个过程是有道理的。事后才知道。

例如,writeLines()是字符参数p1'ice cream'是整数参数p210中有一个名为ui.R的用户定义参数,用于决定提供下载的格式。

Rmd档案:

input$mdType

在server.R中的Some other text. ```{r} results <- someFun("{{p1}}", {{p2}}) ```

downloadHandler()

渲染前生成的userReport2.Rmd:

  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)
  }