2016-04-06 71 views
3

剛開始學習Shiny。我嘗試構建一個簡單的非響應式應用程序,用戶單擊一個按鈕並隨機向量打印到屏幕上。但是,我無法使提交按鈕正常工作。閃亮的submitButton不起作用

# 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工作,但我想了解爲什麼上述代碼不起作用。謝謝。

+1

「當一個提交按鈕出現在一個閃亮的應用程序,它會導致所有輸入頁面上,直到按鈕被按下不更新發送到服務器。」您沒有任何輸入需要更新。 – cory

+1

使用'actionButton'而不是'submitButton',在服務器代碼中也使用'observeEvent'。 –

+0

@cory因此,作爲Shiny的新手,完成這樣的事情的最佳設計方法是什麼?即構建一個沒有輸入的應用程序,但仍然有一個按鈕,每次單擊它時隨機採樣/洗牌一組新數據。 'actionButton'要走了嗎? – Ben

回答

1

這是一個非常簡單的演示。當你點擊按鈕時,它會生成一個包含100個隨機數的新直方圖。

submitButton是爲了與輸入表單一起使用,而不適用於您的要求。例如,如果您有四個不同的輸入,並且希望只在您單擊提交按鈕時更改輸出,而不是單個輸入更改。

閃亮,輸出變化是由事件鏈引起的。您的輸出需要依賴於一個或多個輸入才能更改。現在,您的輸出(服務器代碼)不依賴於任何輸入,因此不會發生任何事情。在這裏閱讀一個非常詳細的解釋。 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)