2016-04-06 6 views
3

ちょうどシャイニーを学び始めました。私はユーザーがボタンをクリックし、ランダムなベクトルがスクリーンに印刷されるシンプルで非反応的なアプリケーションを構築しようとしました。しかし、私は送信ボタンを動作させることができません。光沢のある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

「のsubmitButtonはシャイニーアプリケーションに存在する場合、それはボタンが押されるまで、ページ上のすべての入力がサーバーに更新を送信しないようになります。」更新する入力がありません。 – cory

+1

'submitButton'ではなく' actionButton'を使用し、サーバーコードで 'observeEvent'も使用します。 –

+0

@coryだから、シャイニーの初心者で、このようなことを達成するための最高のデザインアプローチは何ですか?私。入力のないアプリケーションを作成するには、クリックされるたびに新しいデータセットをランダムにサンプリング/シャッフルするボタンがあります。 'actionButton'は行く方法ですか? – Ben

答えて

1

ここは非常に簡単なデモです。ボタンをクリックすると、100の乱数の新しいヒストグラムが生成されます。

submitButtonは、入力フォームで使用するためのもので、お客様の要件には適用されません。たとえば、4つの異なる入力があり、1つの入力が変更されたときではなく、送信ボタンをクリックしたときにのみ出力を変更したい場合。

Shinyでは、出力の変更は一連のイベントによって発生します。変更するには、出力を1つまたは複数の入力に依存する必要があります。現在、出力(サーバーコード)は入力に依存しないため、何も起こりません。非常に詳細な説明はこちらをご覧ください。 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) 
関連する問題