刚开始学习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来实现这一点,但我想了解为什么上面的代码不起作用.谢谢.
最佳答案 这是一个非常简单的演示.单击该按钮时,它将生成一个包含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)