我的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都存在?
答案 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(但是)应该可以工作。