r - 如何将包含多个文件的 Shiny 应用程序转换为易于共享和可重现的 Shiny 示例?

标签 r shiny r-faq

有关于如何创建 Minimal, Complete, and Verifiable example 的资源一般在 Stack Overflow 和 how to make a great R reproducible example 上.然而, 没有类似的指导方针。问题,同时遵守某些标准,更有可能给出高质量的答案,从而解决您的问题。

但是,提出一个好的 Shiny 问题可能很困难。 应用程序通常又大又复杂,使用多个数据源,并且代码通常被拆分到多个文件中,因此难以与他人共享可轻松重现的代码。即使 server.R 中可能会导致问题,如果没有 ui.R 的内容,该示例将无法重现(可能还有其他文件,如样式表或 global.R )。单独复制粘贴所有这些文件的内容很麻烦,并且需要其他用户重新创建相同的文件结构才能重现问题。

所以;如何转换您的 应用程序变成一个很好的可重复的例子?

最佳答案

示例数据

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

示例代码

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

Shiny 的应用程序通常包含两个或三个文件( ui.Rserver.R 和可能的 global.R ),例如 this demo application .但是,最好将您的代码作为单个脚本发布,这样其他人就可以轻松地运行它,而无需手动创建这些文件。这可以通过以下方式轻松完成:

  • ui <- fluidPage(…) 包裹你的用户界面,
  • 带有 server <- function(input,output, session) {…} 的服务器,
  • 随后调用shinyApp(ui, server) .

  • 因此,一个简单的骨架可以如下所示:
    library(shiny)
    
    ui <- fluidPage(
    
      )
    
    server <- function(input,output,session) {
    
    }
    
    shinyApp(ui, server)
    

    工作示例

    因此,考虑到以上所有因素,Shiny 应用程序的一个好的最小、完整和可验证示例可能如下所示:
    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

    有多种方法可以将自定义 CSS 添加到 Shiny 应用程序,如 here 所述。 .在可重现的示例中,将 CSS 添加到 Shiny 应用程序的首选方法是将 CSS 添加到代码中,而不是添加到单独的文件中。这可以通过在 ui 中添加一行来完成。一个应用程序,例如如下:
    tags$head(tags$style(HTML('body {background-color: lightblue;}'))),
    

    关于r - 如何将包含多个文件的 Shiny 应用程序转换为易于共享和可重现的 Shiny 示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48343080/

    相关文章:

    r - 默认选择值时显示 pickerInput() 标题

    r - 使用相同数据的多个 Shiny 应用程序

    r - 测试字符是否在字符串中

    r - 了解 order() 函数

    在 R studio 中成功运行应用程序,但在 Shiny 服务器中运行失败

    r - ggplot2 geom_line() 应该指向指定的值

    r - 如何在 dplyr::across() 中使用返回多个值的函数?

    r - 为数据框的子集创建预测并 append 到原始文件