如何解决在R Shiny App中渲染R Markdown文档时,书目不起作用
问题
我正在尝试在Shiny应用程序中渲染R Markdown文档,我已经成功使用David在这篇帖子(RMarkdown in Shiny Application)中提供的非常有用的解决方案来成功实现了该文档。但是,我一直无法使用.bib文件中的引用来呈现该文档,该文件与Shiny app和R Markdown文档都位于同一目录中。请在下面找到一个最小的可复制示例。
R Markdown文档
RMarkdownFile.rmd
---
title: "RMarkdownFile"
author: "Test Author"
date: "15/10/2020"
output: html_document
bibliography: bibliography.bib
link-citations: yes
---
```{r setup,include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
# Statement
ggplot2 [@wickham2016ggplot2] is a great package!
## References
参考书目
bibliography.bib
@book{wickham2016ggplot2,title={ggplot2: elegant graphics for data analysis},author={Wickham,Hadley},year={2016},publisher={springer}
}
发光的应用程序
app.R
library(shiny)
library(knitr)
rmdfiles <- c("RMarkdownFile.rmd")
sapply(rmdfiles,knit,quiet = T)
ui <- shinyUI(
fluidPage(
withMathJax(includeMarkdown("RMarkdownFile.md"))
)
)
server <- function(input,output) { }
shinyApp(ui,server)
结果
在应用程序外部编织RMarkdownFile.rmd效果很好,产生以下输出
RMarkdownFile
Test Author
15/10/2020
Statement
ggplot2 (Wickham 2016) is a great package!
References
Wickham,Hadley. 2016. Ggplot2: Elegant Graphics for Data Analysis. springer.
但是,如上所述在Shiny应用程序中渲染RMarkdownFile.md无法从bibliography.bib文件生成文档中的引文和引用,如下所示
Statement
ggplot2 [@wickham2016ggplot2] is a great package!
References
更新-解决方案
在尝试了几种不同的方法之后,最简单的方法最终奏效了。以下是更新的Shiny App,其中包括从R markdown文档渲染的html文档,并带有引用。
app.R
library(shiny)
library(knitr)
rmarkdown::render("RMarkdownFile.Rmd")
ui <- shinyUI(
fluidPage(
includeHTML("RMarkdownFile.html")
)
)
server <- function(input,server)
其他问题
但是.....虽然它可以处理从R markdown生成的基本HTML文档,但在RMarkdown文档的YAML块中包括“ self_contained:false”时,如下所示
---
title: "RMarkdownFile"
author: "Test Author"
date: "15/10/2020"
output:
html_document:
self_contained: false
bibliography: bibliography.bib
link-citations: yes
---
导致放置在辅助文件夹中的项目,在这种情况下,该文件夹的标题为“ RMarkdownFile_files”,但Shiny应用程序找不到。通过Rstudio devtools检查Shiny中缺少的元素会发现以下错误:
无法加载资源:服务器响应状态为404(未找到)
相反,当在YAML块中包含“ self_contained:true”时,元素不再丢失,但是我无法访问使用Shinydashboard的非reprex Shiny应用程序中的多个选项卡。
编辑:我现在在另一篇文章Including a HTML file rendered from RMarkdown in R Shiny apps using shinydashboard is causing tabItems to break
中记录了此问题正确方法
编辑:这些问题现在已经使用下面的代码解决了,请注意,除非直接将RMarkdownFile.html文件放置在Shiny app目录的“ www”文件夹中,否则必须将其放置在该目录中。
library(shiny)
library(knitr)
rmarkdown::render("RMarkdownFile.Rmd")
ui <- shinyUI(
fluidPage(
htmltools::tags$iframe(src = "RMarkdownFile.html",width = '100%',height = 1000,style = "border:none;"))
)
)
server <- function(input,server)
解决方法
正如我在上面更新的帖子中所详细描述的那样,要在Shiny应用程序中包含HTML文档,请使用以下代码(事后看来很明显!):
library(shiny)
library(knitr)
rmarkdown::render("RMarkdownFile.Rmd")
ui <- shinyUI(
fluidPage(
includeHTML("RMarkdownFile.html")
)
)
server <- function(input,output) { }
shinyApp(ui,server)
这适用于非常基本的闪亮应用程序,但是使用Shinydashboard会产生其他问题,Including a HTML file rendered from RMarkdown in R Shiny apps using shinydashboard is causing tabItems to break
编辑:这些问题现在已经使用下面的代码解决了,请注意,除非直接将RMarkdownFile.html文件放置在Shiny app目录的“ www”文件夹中,否则必须将其放置在该目录中。
library(shiny)
library(knitr)
rmarkdown::render("RMarkdownFile.Rmd")
ui <- shinyUI(
fluidPage(
htmltools::tags$iframe(src = "RMarkdownFile.html",width = '100%',height = 1000,style = "border:none;"))
)
)
server <- function(input,server)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。