2014-04-22 59 views
0

我在我的server.R文件中的下列輸出它運行一個叫做myFunction的在最後一行功能:延遲輸出(尚未加載)取決於反應性輸入在閃亮(R)

output$myOutput <- renderTable({ 

subFrame <- subset(dataframe, ID1 == input$variable1 & ID2 == input$variable2, select = c("name", "interest")) 

myFunction(subFrame) 

}) 

我我在我的ui.R文件顯示此輸出作爲表是這樣的:

htmlOutput("myOutput") 

的選擇器選擇的ID是這樣的:

output$selectUI <- renderUI({ 


    selectInput("variable1", "Choose ID1:", unique(df1$1), selected = 1551553) 
    }) 

output$selectUI2 <- renderUI({ 

    dfsub <- subset(df1, id1 == input$variable1) 


selectInput("variable2", "Choose ID2:", dfsub$ID2, selected = 2804) 
}) 

所以......這個想法是,當你從上面的兩個選擇器中進行選擇時,它會根據這個反應來顯示錶輸出(myOutput)。

的問題是,當我第一次加載頁面,我得到一個醜陋的錯誤所在的表應該是:

RS-DBI driver: (could not run statement: Unknown column 'NA' in 'where clause') 

這是因爲我在輸出(myFunction的)函數傳遞一個數據幀(子幀)到一個mysql查詢,該查詢返回要在UI(myOutput)中顯示的表。如果我點擊我的提交按鈕來選擇ID的2個選擇器,那麼它工作正常。但是當它第一次加載時,我得到了那個醜陋的錯誤。

我假設它與事實有關,即當我第一次加載頁面時,來自2個選擇器的輸入變量還沒有註冊,所以從myFunction觸發的sql查詢沒有傳遞任何東西。只有當我按下選擇器的按鈕時才起作用,因爲現在選擇器中有變量。

有沒有辦法延遲加載表輸出(myOutput),以便它等到2個選擇器中的ID在那裏?

回答

0

您可以檢查輸入變量是否已經設置,如果沒有,則返回NULL,例如,

if(is.null(input$variable1) | is.null(input$variable2) return(NULL)

0

也可以使用conditionalPanel()

conditionalPanel(
    condition = "!(is.null(input.variable1) || is.null(input.variable2))", 
    htmlOutput("myOutput") 
) 

條件語法是有點偏離的那部分應該在JavaScript語法編寫(因此,而不是$)和我對JavaScript還不是很熟悉,但是應該可以工作。