如何将由多个文件组成的Shiny应用程序转换为易于共享和可重现的Shiny示例?

时间:2018-01-19 14:16:40

标签: r shiny r-faq

有关如何在Stack Overflow和Minimal, Complete, and Verifiable example上创建how to make a great R reproducible example的资源。但是,问题没有类似的指导原则,而遵守某些标准会更有可能提供高质量的答案,从而解决您的问题。

然而,提出一个好的闪亮问题可能很困难。 个应用程序通常庞大而复杂,使用多个数据源,并且代码通常分为多个文件,因此很难与其他人共享易于重现的代码。即使在server.R中可能导致问题,但如果没有ui.R的内容(可能还有其他文件,如样式表或global.R),则该示例不可重现。单独复制粘贴所有这些文件的内容非常麻烦,并且需要其他用户重新创建相同的文件结构才能重现问题。

因此;如何将您的应用转换为良好的可重现示例?

1 个答案:

答案 0 :(得分:27)

示例数据

当然,在创建与Shiny相关的问题时,关于问题“how to make a great R reproducible example”的答案中提到的关于样本数据的所有指南也都适用。总结:确保运行代码不需要其他文件。使用mtcars等样本数据集,或使用data.frame()创建一些示例数据。如果您的数据非常复杂并且确实需要复杂性来说明问题,那么您也可以使用dput()。避免使用read.csv()等函数,除非您有与fileInput等函数相关的问题。

示例代码

始终将代码减少到最低限度,以重现错误或意外行为。这包括删除对其他.CSS个文件和.js文件的调用,并删除uiserver中不必要的功能。

闪亮的应用通常由两个或三个文件组成(ui.Rserver.R,可能还有global.R),例如this demo application。但是,最好将您的代码作为单个脚本发布,因此可以轻松地由其他人运行,而无需手动创建这些文件。这可以通过以下方式轻松完成:

  • ui <- fluidPage(…)
  • 包装你的ui
  • 服务器server <- function(input,output, session) {…}
  • 然后致电shinyApp(ui, server)

因此,一个简单的骨架可以看起来如下:

library(shiny)

ui <- fluidPage(

  )

server <- function(input,output,session) {

}

shinyApp(ui, server)

工作示例

因此,考虑到上述所有因素,Shiny应用程序的一个良好的Minimal,Complete和Verifiable示例可能如下所示:

library(shiny)

df <- data.frame(id = letters[1:10], value = seq(1,10))

ui <- fluidPage(
  sliderInput('nrow', 'Number of rows', min = 1, max = 10, value = 5),
  dataTableOutput('my_table')
  )

server <- function(input, output, session) {
  output$my_table <- renderDataTable({
    df[1:input$nrow,]
  })
}

shinyApp(ui, server)

添加CSS

如[{3}}所述,有多种方法可以将自定义CSS添加到Shiny应用程序中。在可重现的示例中将CSS添加到Shiny应用程序的首选方法是在代码中添加CSS,而不是在单独的文件中。这可以通过在应用程序的ui中添加一行来完成,例如:

tags$head(tags$style(HTML('body {background-color: lightblue;}'))),