【问题标题】:Calling Rmakdown document in a shiny application在闪亮的应用程序中调用 Rmakdown 文档
【发布时间】:2015-10-28 20:14:18
【问题描述】:

我有一个 test.Rmd 文件,其中包含以下 YAML 内容以及一些其他代码块和语句:

---
title: "Rmarkdown test"
runtime: shiny
output: html_document
params:
     product: "abc"
     type: "xyz"
---

我想从 Shiny 应用程序中调用它,并将渲染这个 test.Rmd 文件的结果嵌入到闪亮的输出中

如何从 server.R 调用它?我尝试了output$text<-render::rmarkdown('test.Rmd),出现错误Error in .subset2(x, "impl")$defineOutput(name, value, label) : Unexpected character output for text 但我看到它在ui.R 和server.R 所在的同一位置生成了test.html 文件。

我测试的ui.R条目是htmlOutput("text"),和上面的错误一样。

调用 .Rmd 文件并在闪亮的输出窗口中生成输出以及在调用 .Rmd 时如何覆盖参数的正确方法是什么?有什么帮助吗?

【问题讨论】:

  • 你找到这个问题的答案了吗,因为我也有同样的问题。我需要将代码包含在 server.R 和 ui.R 中

标签: r shiny r-markdown


【解决方案1】:

解决方案 1:

首先:使用以下方式呈现您的 rmarkdown:

rmarkdown::render()

第二:调用生成的html文件使用:

includeScript()

解决方案 2:

HTML(markdownToHTML(text = "_Hello_, \*\*World\*\*!"))

解决方案 3:

这是我将 Sever 和 ui 分开并添加了一些花哨的修改的另一种方式:

服务器:

// generate your report using test.Rmd
generateReport <- function() {
  out.markdown <- ''
  withProgress(message = 'Generating Report',
               value = 0, {
                 out.markdown <- rmarkdown::render(
                   input = "test.Rmd",
                   output_format = "html_document")

                 setProgress(1)
               })

  read_file(out.markdown)
}

// load generateReport function and
// renderText helps function be called whenever it is needed
shinyServer(function(input, output, session) {

  output$report <- renderText({ HTML(generateReport()) })


// Your rest of code

}

ui.R

// load report in ui
shinyUI(fluidPage(
  titlePanel("MY Summary"),

  sidebarLayout(
     mainPanel(htmlOutput("report"))
  )
))

【讨论】:

  • 您能否给我们一个示例代码,我们应该将其包含在闪亮的应用程序中。例如,我有 test.Rmd 应该调用。现在我应该在 serverR 和 ui.R 中包含哪些代码?谢谢
【解决方案2】:

我做了两个步骤:1) 将 Rmd 渲染为一个名为 background.HTML 的 HTML 文件,我将其存储到包含 Shiny app.R 的目录中,以及 2) includeHTML 以将渲染的 HTML 加载到 tabPanel 中。这是第 1 部分:

---
title: "Background Info"
date: "November 24, 2019"
output:
  html_document:
    theme: cerulean
    toc: no
---
<style>
.main-container {
    max-width: 940px;
    margin-left: 0;
    margin-right: auto;
}
</style>

Then here I put my text that I wanted in the `tabPanel` of the Shiny app

这是我放入 Shiny 应用的 UI 部分的第 2 部分:

mainPanel(
    tabsetPanel(
        tabPanel("Descriptive Stats", div(tableOutput("descstatstable"), style = "font-size:90%")), 
        tabPanel("Background Info", includeHTML("background.html"))
    )
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-08
    • 2015-09-25
    • 2015-05-05
    • 2020-10-21
    • 2015-11-02
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    相关资源
    最近更新 更多