我有一个问题更属于“最佳实践”类型的查询。使用shinypackage in 时r,是否最好在server侧面使用创建所有小部件renderUI,然后将它们推送到uivia uiOutput?或者,如果可能,是否应该在ui侧面创建所有小部件?
例如,下面的两个应用程序做同样的事情,但在第二个应用程序中,我sliderInput在server侧面创建,然后将其推送到 ,ui而不是在ui侧面创建。(注意,此代码是从R Studio 上的Hello Shiny页面中提取的)
ui#ui.R
# Define UI for application that plots random distributions
library(shiny)
ui1 <- shinyUI(fluidPage(
# Application title
titlePanel("Hello Shiny!"),
# Sidebar with a slider input for number of observations
sidebarLayout(
sidebarPanel(
sliderInput("obs",
"Number of observations:",
min = 1,
max = 1000,
value = 500)
),
# Show a plot of the generated distribution
mainPanel(
plotOutput("distPlot")
)
)
))
#server.R
# Define server logic required to generate and plot a random distribution
library(shiny)
server1 <- (function(input, output) {
output$distPlot <- renderPlot({
# generate an rnorm distribution and plot it
dist <- rnorm(input$obs)
hist(dist)
})
})
runApp(shinyApp(ui = ui1, server = server1))
Run Code Online (Sandbox Code Playgroud)
server侧面创建小部件#ui.R
# Define UI for application that plots random distributions
library(shiny)
ui2 <- shinyUI(fluidPage(
# Application title
titlePanel("Hello Shiny!"),
# slider comes from the si object created in server.R
sidebarLayout(
sidebarPanel(
uiOutput("si")
),
# Show a plot of the generated distribution
mainPanel(
plotOutput("distPlot")
)
)
))
#server.R
# Define server logic required to generate and plot a random distribution
library(shiny)
server2 <- (function(input, output) {
#create slider with renderUI
output$si <- renderUI(
sliderInput("obs",
"Number of observations:",
min = 1,
max = 1000,
value = 500)
)
output$distPlot <- renderPlot({
# generate an rnorm distribution and plot it
dist <- rnorm(input$obs)
hist(dist)
})
})
runApp(shinyApp(ui = ui2, server = server2))
Run Code Online (Sandbox Code Playgroud)
对我来说,第二种方法更具普遍性,所以它应该会赢。但是,我不是专家,我很少看到使用这种方法,除非有特定原因需要小部件以某种方式响应。我要求响应的方式包括:
server这最终馈送插件侧choices所以最好只加载的数据的一个时间server上的侧面和创建的微件在那里,而不是负载它server和ui侧。由于我介绍的第二种方法可以处理上述两个选项,因此对我来说应该在所有情况下使用它是有意义的,即使实际上不需要在server侧面创建小部件。我注意到,在使用第二种方法时,会出现延迟,有时会在加载小部件之前出现警告/错误。这是我注意到这种方法的唯一缺点。
这些方法之一是否被视为“最佳实践”?
谢谢。
| 归档时间: |
|
| 查看次数: |
521 次 |
| 最近记录: |