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

Flo*_*ian 25 r r-faq shiny

有关如何在Stack Overflow上创建Minimal,Complete和Verifiable示例的资源,以及如何创建一个很好的R可重现示例.但是,对于问题没有类似的指导原则,而遵守某些标准使得更有可能给出质量答案,从而解决您的问题.

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

所以; 如何将您的应用程序转换为一个良好的可重现的示例?

Flo*_*ian 27

示例数据

当然,在创建与之相关的问题时,关于"如何制作一个很好的R可重复示例"的答案中提到的关于样本数据的所有指南也都适用Shiny.总结:确保运行代码不需要其他文件.使用样本数据集mtcars,或使用创建一些样本数据data.frame().如果您的数据非常复杂并且确实需要复杂性来说明问题,那么您也可以使用dput().避免使用类似的功能read.csv(),除非你有与像这样的功能有关的问题fileInput.

示例代码

始终将代码减少到最低限度,以重现您的错误或意外行为.这包括去除额外的呼叫.CSS的文件和.js文件,并除去在不必要的功能uiserver.

闪亮的应用程序往往由两个或三个文件(ui.R,server.R以及可能的global.R),比如这个演示应用程序.但是,最好将您的代码作为单个脚本发布,因此可以轻松地由其他人运行,而无需手动创建这些文件.这可以通过以下方式轻松完成:

  • 包裹你的ui ui <- fluidPage(…),
  • 服务器用server <- function(input,output, session) {…},
  • 然后打电话shinyApp(ui, server).

所以一个简单的骨架可以看起来如下:

library(shiny)

ui <- fluidPage(

  )

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

}

shinyApp(ui, server)
Run Code Online (Sandbox Code Playgroud)

工作实例

因此,考虑到上述所有因素,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)
Run Code Online (Sandbox Code Playgroud)

添加CSS

有多种方法可以自定义CSS添加到闪亮的应用程序,如解释在这里.在可重现的示例中将CSS添加到Shiny应用程序的首选方法是在代码中添加CSS,而不是在单独的文件中.这可以通过在ui应用程序中添加一行来完成,例如,如下所示:

tags$head(tags$style(HTML('body {background-color: lightblue;}'))),
Run Code Online (Sandbox Code Playgroud)