刚开始学习Shiny。我尝试构建一个简单的非反应式应用程序,用户单击按钮,随机向量将打印到屏幕上。但是,我无法使用提交按钮。
# Load required files
lapply(c("data.table", "shiny"), require, character.only=T)
#=================================================================
# Define UI for application that draws a histogram
ui <- shinyUI(fluidPage(
# Application title
titlePanel("App-4"),
# Sidebar
sidebarLayout(
sidebarPanel(
submitButton("Submit")
),
# Print the data
mainPanel(
textOutput("myTable")
)
)
))
#=================================================================
# Define server logic
server <- shinyServer(function(input, output) {
output$myTable <- renderPrint({
sample(10)
})
})
#=================================================================
# Run the application
shinyApp(ui = ui, server = server)
我做错了什么?我能够使用actionButton
来解决此问题,但我想了解上述代码无法正常工作的原因。感谢。
答案 0 :(得分:2)
这是一个非常简单的演示。单击该按钮时,它将生成一个包含100个随机数的新直方图。
submitButton
旨在与输入表单一起使用,并不适用于您的要求。例如,如果您有四个不同的输入,并且您希望仅在单击提交按钮时更改输出,而不是在单个输入更改时。
在Shiny中,输出变化是由事件链引起的。您的输出需要依赖于一个或多个输入才能更改。现在,您的输出(服务器代码)不依赖于任何输入,因此不会发生任何事情。请阅读此处以获得非常详细的解释。 http://shiny.rstudio.com/articles/reactivity-overview.html
library(shiny)
# Define UI for application that draws a histogram
ui <- shinyUI(fluidPage(
# Application title
titlePanel("Button demo"),
# Sidebar with a button
sidebarLayout(
sidebarPanel(
actionButton("button", "Click me to get a new histogram")
),
# Show a plot of the generated distribution
mainPanel(
plotOutput("distPlot")
)
)
))
# Define server logic required to draw a histogram
server <- shinyServer(function(input, output) {
observeEvent(input$button, {
output$distPlot <- renderPlot({
hist(rnorm(100))
})
})
})
# Run the application
shinyApp(ui = ui, server = server)