server.R
中引起问题,但如果没有ui.R
的内容(以及可能的其他文件,例如样式表或global.R
)的内容,该示例也无法复制。单独复制粘贴所有这些文件的内容很麻烦,并且需要其他用户重新创建相同的文件结构才能重现该问题。 所以;如何将闪亮的应用程序转换为可复制的示例?
#1 楼
示例数据当然,在创建与
Shiny
相关的问题时,关于“如何制作出色的R可再现示例”问题的答案中提及的所有与示例数据有关的准则也同样适用。总结一下:确保不需要其他文件来运行代码。使用样本数据集,例如mtcars
,或使用data.frame()
创建一些样本数据。如果您的数据非常复杂,并且确实需要复杂性来说明问题,则也可以使用dput()
。避免使用read.csv()
之类的函数,除非您当然对fileInput
之类的函数有疑问。示例代码
始终将代码减少到最低限度,以重现错误或意外情况行为。例如,这包括删除对其他
.CSS
文件和.js
文件的调用,以及删除ui
和server
中不必要的功能。例如,发光的应用程序通常由两个或三个文件(ui.R
,server.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
评论
对于meta来说,这是一个更好的问题吗?可能是,但是由于我很少访问meta,所以我可能不是判断这一点的最佳人。帮助中心对“堆栈溢出”的“好”问题的定义非常广泛。我在这里问这个问题的原因主要是,关于r和pandas的类似问题也出现在Stack Overflow上,而不是在meta上,因此我认为这是正确的做法。
@ Pac0我确实明白您的意思-尽管不确定我是否完全同意。最好将其从评论移至对Meta的讨论,以获取其他人对该问题以及本质上相似的未来问题的看法。