我有一个闪亮的应用程序,允许用户下载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
引擎。任何帮助将不胜感激。谢谢!
答案 0 :(得分:2)
知道了。解决方法如下感谢Yihui的指导。诀窍是MM/dd/yyyy HH:mm:ss
整个.Rmd文件,然后knit_expand()
到一个新文件,然后渲染。事后看来,整个过程是有道理的。事后才知道。
例如,writeLines()
是字符参数p1
,'ice cream'
是整数参数p2
。 10
中有一个名为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)
}