首页 文章

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

提问于
浏览
0

我的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

    您可以检查输入变量是否已经设置,如果没有则返回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(但是)应该可行 .

相关问题