R语言 如何将包含多个文件的Shiny应用程序转换为易于共享和复制的Shiny示例?

q3qa4bjr  于 2023-02-17  发布在  其他
关注(0)|答案(1)|浏览(131)

在Stack Overflow和how to make a great R reproducible example上有一些关于如何创建Minimal, Complete, and Verifiable example的资源。但是,对于shiny问题没有类似的指导方针,而遵守某些标准则更有可能给出高质量的答案,从而解决您的问题。
然而,问一个好的Shiny问题可能很困难。shiny应用通常又大又复杂,使用多个数据源,代码通常被分割到多个文件中,这使得很难与他人共享可轻松复制的代码。即使server.R可能会导致问题,没有ui.R的内容,该示例不可再现(以及可能的其它文件,如样式表或global.R)。单独地复制粘贴所有这些文件的内容是麻烦的,并且要求其他用户重新创建相同的文件结构以便能够再现该问题。
那么,如何将您的shiny应用程序转换为一个可重复的示例呢?

dojqjjoe

dojqjjoe1#

示例数据

当然,在创建与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(…) Package 你的UI,
  • 具有server <- function(input,output, session) {…}的服务器,
  • 并且随后调用shinyApp(ui, server)

因此,一个简单的 backbone 可以像下面这样开始:

library(shiny)

ui <- fluidPage(

  )

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

}

shinyApp(ui, server)

工作示例

因此,考虑到以上所有因素,一个良好的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

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

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

相关问题