微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在R Shiny App中渲染R Markdown文档时,书目不起作用

如何解决在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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?