如何将包含多个文件的 Shiny 应用程序转换为易于共享和重现的 Shiny 示例?
How to convert a Shiny app consisting of multiple files into an easily shareable and reproducible Shiny example?
有关于如何创建 Minimal, Complete, and Verifiable example in general on Stack Overflow, and on how to make a great R reproducible example. However, there are no similar guidelines for shiny 问题的资源,同时遵守特定标准更有可能给出高质量的答案,从而解决您的问题。
然而,提出一个好的 Shiny 问题可能很困难。 shiny 应用程序通常庞大而复杂,使用多个数据源,并且代码通常拆分为多个文件,因此很难与他人共享易于重现的代码。尽管 server.R
中可能会出现问题,但如果没有 ui.R
的内容(可能还有样式表或 global.R
等其他文件),该示例将无法重现。单独复制粘贴所有这些文件的内容很麻烦,并且需要其他用户重新创建相同的文件结构才能重现问题。
所以;如何将您的 shiny 应用程序转换为良好的可重现示例?
示例数据
当然,在创建与 Shiny
相关的问题时,在问题 “how to make a great R reproducible example” 的答案中提到的样本数据的所有 gui 描述也成立。总结一下:确保 运行 您的代码不需要额外的文件。使用 mtcars
等示例数据集,或使用 data.frame()
创建一些示例数据。如果您的数据非常复杂,并且这种复杂性确实需要 uired 来说明问题,您也可以使用 dput()
。避免使用像 read.csv()
这样的函数,除非你当然有与像 fileInput
.
这样的函数相关的问题
示例代码
始终将您的代码减少到最低限度以重现您的错误或意外行为。这包括删除对其他 .CSS
文件和 .js
文件的调用,以及删除 ui
和 server
.
中不必要的函数
闪亮的应用程序通常包含两个或三个文件(ui.R
、server.R
,可能还有 global.R
),例如 this demo application。但是,最好 [=74=] 您的代码作为单个脚本,这样其他人就可以轻松 运行 而无需手动创建这些文件。这可以通过以下方式轻松完成:
- 用
ui <- fluidPage(…)
、 包装你的 ui
- 服务器
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;}'))),
有关于如何创建 Minimal, Complete, and Verifiable example in general on Stack Overflow, and on how to make a great R reproducible example. However, there are no similar guidelines for shiny 问题的资源,同时遵守特定标准更有可能给出高质量的答案,从而解决您的问题。
然而,提出一个好的 Shiny 问题可能很困难。 shiny 应用程序通常庞大而复杂,使用多个数据源,并且代码通常拆分为多个文件,因此很难与他人共享易于重现的代码。尽管 server.R
中可能会出现问题,但如果没有 ui.R
的内容(可能还有样式表或 global.R
等其他文件),该示例将无法重现。单独复制粘贴所有这些文件的内容很麻烦,并且需要其他用户重新创建相同的文件结构才能重现问题。
所以;如何将您的 shiny 应用程序转换为良好的可重现示例?
示例数据
当然,在创建与 Shiny
相关的问题时,在问题 “how to make a great R reproducible example” 的答案中提到的样本数据的所有 gui 描述也成立。总结一下:确保 运行 您的代码不需要额外的文件。使用 mtcars
等示例数据集,或使用 data.frame()
创建一些示例数据。如果您的数据非常复杂,并且这种复杂性确实需要 uired 来说明问题,您也可以使用 dput()
。避免使用像 read.csv()
这样的函数,除非你当然有与像 fileInput
.
示例代码
始终将您的代码减少到最低限度以重现您的错误或意外行为。这包括删除对其他 .CSS
文件和 .js
文件的调用,以及删除 ui
和 server
.
闪亮的应用程序通常包含两个或三个文件(ui.R
、server.R
,可能还有 global.R
),例如 this demo application。但是,最好 [=74=] 您的代码作为单个脚本,这样其他人就可以轻松 运行 而无需手动创建这些文件。这可以通过以下方式轻松完成:
- 用
ui <- fluidPage(…)
、 包装你的 ui
- 服务器
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;}'))),