2016-03-04 100 views
0

我在閃亮的應用程序中使用反應性事件,被動輸出是renderDataTable的一部分,我想更改該函數的初始結果。eventReactive()的初始狀態

從我看過的紀錄片:"eventReactive() returns NULL until the action button is clicked. As a result, the graph does not appear until the user asks for it by clicking 「Go」."但這不適用於我的代碼。

生殖實施例:

library(shiny) 
library(DT) 
shinyApp(
    ui = fluidPage(
    actionButton("go","Go"), 
    DT::dataTableOutput('tbl')), 
    server = function(input, output) { 

    dat <- eventReactive(input$go, 
        head(iris,10) 
         ) 

    output$tbl <- renderDataTable({ 

     if(is.null(dat())){ 
     data.frame("a"=NA,"b"=NA,"c"=NA,"d"=NA,"e"=NA) 
     }else(data.frame(dat())) 

    }) 

    } 
) 

這應該與5個變量按鈕被點擊之前,它不返回一個空data.frame。

當按鈕被點擊後,函數會起作用,我認爲函數的狀態在之前是NULL,因爲它是if語句的一部分。

+0

看起來像你的第一個問題是'renderDataTable'應該是'DT :: renderDataTable',否則數據框將永遠不會顯示出來 –

+0

在你正確的例子中缺少庫(DT)。 – Sebastian

回答

1

我試着通過檢查按鈕的狀態而不是工作的reactiveEvent來解決這個問題。

if(input$go==0){ 
    data.frame("a"=NA,"b"=NA,"c"=NA,"d"=NA,"e"=NA) 
    }else(data.frame(dat())) 

初始狀態爲0,每次點擊按鈕時加1。

儘管如此,如果有人知道reactiveEvent初始狀態是如何工作的並且可以詳細闡述它,我將不勝感激。

+0

我認爲這實際上可能是一個閃亮的錯誤。我正在提交一份bug報告 –

+0

報告錯誤https://github.com/rstudio/shiny/issues/1125 –

+0

這很好,再次感謝你。 – Sebastian