R 避免在发生错误时关闭闪亮的浏览器

R 避免在发生错误时关闭闪亮的浏览器,r,shiny,R,Shiny,当我们在shiny中开发应用程序时,我们知道: 1-如果您在服务器部分中有一个函数,并且该函数返回一个错误,则浏览器将崩溃/关闭,用户不知道发生了什么 2-如果您有一个函数在另一个渲染函数中返回错误,例如renderDataTable,则错误将显示在应用程序中,而不是显示该表 了解前两点后,我尝试将可能返回错误的函数放在渲染函数中。这样做,用户可以看到错误 例如,如果我想显示一些来自数据库的表,我有一个简单的查询,如: dbGetQuery(con, statement

当我们在shiny中开发应用程序时,我们知道:

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

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

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

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

dbGetQuery(con, 
            statement = glue_sql("SELECT DISTINCT COLUMN1 FROM TABLE1", .con = con)
并且
COLUMN1
不存在,则函数将出现错误。如果我在
renderDataTable
中有这个函数,那么用户可以看到查询出了问题。如果它就在
服务器
内,则浏览器将关闭

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


谢谢

您可以使用
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)
库(闪亮)

谢谢你,克里斯,我正朝着同一个方向走。使用
showNotification
看起来不错。