延迟输出取决于Shiny(R)中的无功输入(尚未加载)

时间:2014-04-22 01:12:29

标签: r shiny

我的server.R文件中有以下输出,它在最后一行运行一个名为myFunction的函数:

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)
})

所以......我们的想法是,当您从上面的2个选择器中进行选择时,它将根据此反应性显示表输出(myOutput)。

问题是,当我第一次加载页面时,我得到一个丑陋的错误,表应该是:

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

这是因为我在输出中的函数(myFunction)将数据帧(subFrame)传递给mysql查询,该查询返回要在UI中显示的表(myOutput)。如果我单击2个选择器的提交按钮来选择ID,那么它可以正常工作。但是当它第一次加载时,我得到了那个丑陋的错误。

我假设它与以下事实有关:当我第一次加载页面时,来自2个选择器的输入变量尚未注册,因此从myFunction触发的sql查询没有传递任何内容。只有当我按下选择器的按钮才能工作,因为现在选择器中有变量。

有没有办法延迟加载表输出(myOutput),以便它等到2个选择器中的ID都存在?

2 个答案:

答案 0 :(得分:0)

您可以检查输入变量是否已设置,如果没有则返回NULL,例如

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

答案 1 :(得分:0)

也可以使用conditionalPanel()

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

条件语法可能有点偏差,因为该部分应该用javaScript语法编写(因此。而不是$)并且我还不熟悉javaScript(但是)应该可以工作。