有关如何在Stack Overflow上创建一个最小,完整和可验证示例的资源,以及如何使R再现一个很好的示例。但是,对于闪亮的问题没有类似的指导原则,虽然遵循某些标准,却更有可能给出高质量的答案,从而使您的问题得到解决。闪亮的问题可能很难。闪亮的应用程序通常又大又复杂,使用多个数据源,并且代码通常分散在多个文件中,因此很难与他人共享易于复制的代码。即使可能在server.R中引起问题,但如果没有ui.R的内容(以及可能的其他文件,例如样式表或global.R)的内容,该示例也无法复制。单独复制粘贴所有这些文件的内容很麻烦,并且需要其他用户重新创建相同的文件结构才能重现该问题。

所以;如何将闪亮的应用程序转换为可复制的示例?

评论

对于meta来说,这是一个更好的问题吗?

可能是,但是由于我很少访问meta,所以我可能不是判断这一点的最佳人。帮助中心对“堆栈溢出”的“好”问题的定义非常广泛。我在这里问这个问题的原因主要是,关于r和pandas的类似问题也出现在Stack Overflow上,而不是在meta上,因此我认为这是正确的做法。

@ Pac0我确实明白您的意思-尽管不确定我是否完全同意。最好将其从评论移至对Meta的讨论,以获取其他人对该问题以及本质上相似的未来问题的看法。

#1 楼

示例数据

当然,在创建与Shiny相关的问题时,关于“如何制作出色的R可再现示例”问题的答案中提及的所有与示例数据有关的准则也同样适用。总结一下:确保不需要其他文件来运行代码。使用样本数据集,例如mtcars,或使用data.frame()创建一些样本数据。如果您的数据非常复杂,并且确实需要复杂性来说明问题,则也可以使用dput()。避免使用read.csv()之类的函数,除非您当然对fileInput之类的函数有疑问。

示例代码

始终将代码减少到最低限度,以重现错误或意外情况行为。例如,这包括删除对其他.CSS文件和.js文件的调用,以及删除uiserver中不必要的功能。例如,发光的应用程序通常由两个或三个文件(ui.Rserver.R和可能的global.R)组成。此演示应用程序。但是,最好将代码作为单个脚本发布,这样其他人可以轻松运行它,而无需手动创建这些文件。这可以很容易地做到: >因此,一个简单的骨架可能看起来如下:

library(shiny)

ui <- fluidPage(

  )

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

}

shinyApp(ui, server)


工作示例

因此,考虑到以上所有内容,光泽应用程序的一个很好的最小,完整和可验证的示例如下所示:

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应用程序的多种方法,如此处所述。在可重现的示例中,将CSS添加到Shiny应用程序的首选方法是在代码中而不是在单独的文件中添加CSS。这可以通过在应用程序的ui <- fluidPage(…)中添加一行来完成,例如,如下所示:

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


评论


我认为函数ShinyUI已过时且不必要。

– GyD
18年1月19日在15:21

@GyD,我认为您是对的,我相应地更新了答案。

–弗洛里安
18年1月19日在15:23

@弗洛里安也许您可以解决应用程序何时需要加载文件的问题。

–MLavoie
18年2月15日在19:30

@MLavoie,一个好建议,我希望通过“如果您的数据非常复杂并且确实需要复杂性来说明问题,则可以使用dput()。请避免使用read.csv()之类的函数。” 。”您认为涵盖了它,还是在想其他事情?

–弗洛里安
18年2月16日在10:59

是的,我认为那样可以。

–MLavoie
18年2月16日在11:02