避免在发生错误时关闭Shiny浏览器

时间:2019-09-05 07:42:39

标签: r shiny

当我们制作闪亮的应用程序时,我们知道:

1-如果您在server部分中有一个函数,并且该函数返回错误,则浏览器将崩溃/关闭,并且用户不知道发生了什么。

2-如果您有一个函数会在另一个渲染函数内部返回错误,例如renderDataTable,则该错误将在应用程序中显示,而不是显示表格。

了解了前两点后,我尝试将可能返回错误的函数放入渲染函数中。这样用户可以看到错误。

例如,如果我想显示一些来自数据库的表,并且有一个简单的查询,例如:

dbGetQuery(con, 
            statement = glue_sql("SELECT DISTINCT COLUMN1 FROM TABLE1", .con = con)

COLUMN1不存在,则该函数将引发错误。如果我在renderDataTable中具有该功能,那么用户可以看到查询出了点问题。如果它位于server内,则浏览器将关闭。

问题是,在某些情况下,我无法将查询放入renderDataTable中。为了显示错误并避免浏览器崩溃,我们可以采取什么方法?

谢谢

1 个答案:

答案 0 :(得分:1)

您可以使用showNotification捕获错误,并使用library(shiny) ui <- fluidPage( titlePanel("Old Faithful Geyser Data"), sidebarLayout( sidebarPanel( sliderInput("bins", "Number of bins:", min = 1, max = 50, value = 30) ), # Show a plot of the generated distribution mainPanel( plotOutput("distPlot") ) ) ) server <- function(input, output) { ### #CATCHING THE ERROR IN A NOTIFICATION ### tryCatch({ x1 <- DBI::dbGetQuery(con, statement = glue_sql("SELECT DISTINCT COLUMN1 FROM TABLE1", .con = con)) }, warning = function(warn){ showNotification(paste0(warn), type = 'warning') }, error = function(err){ showNotification(paste0(err), type = 'err') }) output$distPlot <- renderPlot({ x <- faithful[, 2] bins <- seq(min(x), max(x), length.out = input$bins + 1) hist(x, breaks = bins, col = 'darkgray', border = 'white') }) } shinyApp(ui = ui, server = server) 进行显示。我已经通过“老忠实间歇泉”闪亮示例进行了说明,并在trycatch中添加了该示例,因此该应用程序不会崩溃:

this.confirmationDialogService.confirm(null, 'er du sikker på, at du vil gøre denne ændring', "Acceptere", "Afvise")

enter image description here enter image description here