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

Fra*_* VE 3 r shiny

当我们用闪亮的方式开发应用程序时,我们知道:

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

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

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

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

dbGetQuery(con, 
            statement = glue_sql("SELECT DISTINCT COLUMN1 FROM TABLE1", .con = con)
Run Code Online (Sandbox Code Playgroud)

并且COLUMN1不存在,那么该函数将出现错误。如果我在 中具有该函数renderDataTable,那么用户可以看到查询出了问题。如果它就在里面,server那么浏览器将关闭。

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

谢谢

Chr*_*ris 7

您可以使用 捕获错误并trycatch使用 来显示它showNotification。我用老忠实间歇泉闪亮的例子来说明这一点,并添加到 trycatch 中,这样应用程序就不会崩溃:

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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 在此输入图像描述

  • 谢谢克里斯,我正朝着同一个方向前进。有了“showNotification”,它看起来不错。 (2认同)