首页 文章

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

提问于
浏览
23

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

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

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

1 回答

  • 26

    Example data

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

    Example code

    始终将代码减少到最低限度,以重现您的错误或意外行为 . 这包括删除对其他 .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)
    

    Working Example

    因此,考虑到上述所有因素,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)
    

    Adding CSS

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

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

相关问题