2017-04-20 8 views
0

光沢のあるアプリを構築していて、メインパネル画面を更新したいと思います。ここにサンプルコードがあります。データを表示するための送信ボタンがあり、画面を消去するための再表示ボタンがあります。私はこれに新しいので、どのようにRで新鮮なボタンをコード化し、光沢があるかについてはあまりよく分かりません。更新ボタンが使用されている場合アクションボタンを使用して、光沢のあるメインパネル画面をリフレッシュ

library(DT) 
ui <- fluidPage(
    sidebarLayout(
     sidebarPanel(
     selectInput("amountTable", "Amount Tables", 1:10), 
     actionButton("submit1" ,"Submit", icon("refresh"), 
        class = "btn btn-primary"), 

     actionButton("refresh1" ,"Refresh", icon("refresh"), 
        class = "btn btn-primary") 

    ), 
    mainPanel(
    # UI output 
    uiOutput("dt") 
    ) 
) 
) 

server <- function(input, output, session) { 
    observeEvent(input$submit1, { 
    lapply(1:input$amountTable, function(amtTable) { 
     output[[paste0('T', amtTable)]] <- DT::renderDataTable({ 
     iris[1:amtTable, ] 
     }) 
    }) 
    }) 

    output$dt <- renderUI({ 
    tagList(lapply(1:10, function(i) { 
    dataTableOutput(paste0('T', i)) 
    })) 
}) 

} 

shinyApp(ui, server) 

答えて

2

に探してくれてありがとうあなたがrenderUI()からの戻り何の可能性を追加することができます。 アクションボタンをリセットするのは簡単ではないので、反応変数を使用して回避策を使用する必要があります。

if(global$refresh) return()

あなたがリフレッシュして制御し、例えばボタン を提出することができる。この反応変数if(input$refresh1) isolate(global$refresh <- TRUE) あなたは別の観測機能でラップします。 完全なコードは下記を参照してください:

library(DT) 
ui <- fluidPage(
    sidebarLayout(
    sidebarPanel(
     selectInput("amountTable", "Amount Tables", 1:10), 
     actionButton("submit1" ,"Submit", icon("refresh"), 
        class = "btn btn-primary"), 

     actionButton("refresh1" ,"Refresh", icon("refresh"), 
        class = "btn btn-primary") 

    ), 
    mainPanel(
     # UI output 
     uiOutput("dt") 
    ) 
) 
) 

server <- function(input, output, session) { 

    global <- reactiveValues(refresh = FALSE) 

    observe({ 
    if(input$refresh1) isolate(global$refresh <- TRUE) 
    }) 

    observe({ 
    if(input$submit1) isolate(global$refresh <- FALSE) 
    }) 

    observeEvent(input$submit1, { 
    lapply(1:input$amountTable, function(amtTable) { 
     output[[paste0('T', amtTable)]] <- DT::renderDataTable({ 
     iris[1:amtTable, ] 
     }) 
    }) 
    }) 

    output$dt <- renderUI({ 
    if(global$refresh) return() 
    tagList(lapply(1:10, function(i) { 
     dataTableOutput(paste0('T', i)) 
    })) 
    }) 

} 

shinyApp(ui, server) 
+0

これは私が探しているものです。あなたは人生の節約に感謝します。もう一つ、リフレッシュボタンを押すと、選択入力を1にリフレッシュする方法もあります。今のところ、それはメインパネルをリフレッシュしていますが、selectinputは1に初期化されません。 – aotearoa

+0

'(入力$ refresh1)を隔離(グローバル$リフレッシュ< - TRUE)'の後に 'updateSelectInput(session、" amountTable "、" Amount Tables "、1:10、1)を追加するだけです。 – BigDataScientist

+0

もう1つ、いかがですかメインパネルには、Amount.Table1、Amount.Table2などのテキストを各テーブルごとに表示します。 paste0はうまくいかないようです。感謝します! – aotearoa

関連する問題