R trycatch() 与 err 和 warn 处理程序就位,但 Shiny 仍然崩溃?

2023-11-30

重现:

#app.R
library(shiny)
library(RODBC)
savefunc <- function() {
      conn <- odbcConnect(...) #put in a conn string u know works
      df = data.frame(testing=c("testing"))
      columnTypes = list(testing="varchar(128)")
      tryCatch(
        {
          sqlSave(conn, dat=df, tablename ="...", #put in a pre-existing tbl
            rownames = FALSE, colnames = FALSE, append=TRUE, varTypes=columnTypes)
        },
        err=function(errorCondition) {
          cat("in err handler")
          message(errorCondition)
        },
        warn=function(warningCondition) {
           cat("in warn handler")
          message(warningCondition)
        },
        finally={
          odbcClose(conn)
        }
      )
    }

server <- function(input, output) {
  observeEvent(input$doBtn, {
    savefunc()
  })
}

ui <- shinyUI(fluidPage(
  mainPanel(
    actionButton("doBtn", "Do something")
  )
))

shinyApp(ui = ui, server = server)

错误没有被捕获......虽然 R 似乎仍然在运行(没有崩溃),但当你查看 Shiny 应用程序/UI 时,你会发现它已经死了。控制台中的错误类似于:

Warning: Unhandled error in observer: unable to append to table xxx
observeEvent(input$doBtn)

(根据上面的例子,你可能会得到一些稍微不同的东西)但重点是,错误现在已经以闪亮的方式传播给观察者。有没有办法让闪亮的应用程序本身也进行故障转移?或者抑制观察者内部的误差?


我刚刚有过非常相似的经历(未捕获的错误),事实上,只需更换err=function(e) with error=function(e)(我想这对于warn and warning).


EDIT :

我实际上只是尝试使用你的代码,对我来说,当我这样做时它会起作用:

savefunc <- function() {
    tryCatch({
        conn <- odbcConnect(...)
        df = data.frame(testing=c("testing"))
        columnTypes = list(testing="varchar(128)")
        tryCatch({
            sqlSave(conn, dat=df, tablename="...", rownames=FALSE, colnames=FALSE, append=TRUE, varTypes=columnTypes)
        }, error=function(e) {
            cat(paste("in err handler\n"),e)
        }, warning=function(w) {
            cat(paste("in warn handler\n"),w)
        }, finally={
            odbcClose(conn)
        })
    }, error=function(e) {
        cat(paste("in err handler2\n"),e)
    }, warning=function(w) {
        cat(paste("in warn handler2\n"),w)
    })
}

它显然非常脏,我不太确定它为什么起作用。我刚刚摆脱了message()调用并封装了两个trycatch()。 也许值得一试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R trycatch() 与 err 和 warn 处理程序就位,但 Shiny 仍然崩溃? 的相关文章

  • 在闪亮仪表板中显示/隐藏菜单项

    当进入应用程序时 我需要隐藏一个菜单项 当用户选择某个值时 菜单项必须出现 我努力了shinyjs功能hidden 并且它隐藏了一个 menuItem 但是当使用show or toggle 菜单项不会出现 我发现了Rshinydashbo
  • R、GeoJSON 和 Leaflet

    我最近从 R Bloggers com 的帖子中了解了 leafletjs com 我想要实现的一个此类教程是使用传单创建交互式分区统计图 http leafletjs com examples choropleth html http l
  • 展平 ggplot2 中的 alpha 通道

    ggplot2 的某些对象 函数 支持 alpha 通道 http docs ggplot2 org current geom point html http docs ggplot2 org current geom point html
  • 在 R/ggplot2 中将字符串转换为函数参数的最佳方法? [复制]

    这个问题在这里已经有答案了 我正在开发一个闪亮的应用程序 用户可以选择可以使用 ggplot2 绘制哪些变量 但是我完全不确定将字符串 即要绘制的变量的名称 转换为合适的函数参数的最佳方法 考虑以下非常人为的 有效的示例 df lt dat
  • 使用 geom_bar 和 stat="identity" 绘制平均值的 hline

    我有一个条形图 其中确切的条形高度位于数据框中 df lt data frame x LETTERS 1 6 y c 1 6 1 6 1 g rep x c a b each 6 ggplot df aes x x y y fill g g
  • 如何规划庭院灯最有效的路线

    我正在尝试挂一些庭院灯 基于另一个问题 https cs stackexchange com questions 80134 christmas light route efficiency我问 我意识到我需要一种算法来解决路由检查问题 h
  • 使用梯度下降(最速下降)估计线性回归

    示例数据 X lt matrix c rep 1 97 runif 97 nrow 97 ncol 2 y lt matrix runif 97 nrow 97 ncol 1 我已经成功创建了成本函数 COST lt function th
  • 使用 dplyr 和 ggplot 绘制包括负值的多面水平发散堆积条形图

    我希望这个例子能够让人清楚 我想要堆叠条形 其中中间条形跨越 0 因为它代表中性值 这与李克特量表一起使用 为了重现性 我使用钻石数据集 以下示例与我的用例足够接近 并演示了我很难以正确的顺序获取 好 或 正 数据 因此中性最接近 0 这是
  • 没有垂直线的直方图

    当我创建直方图时 它看起来很像这样 set seed 1 x lt 1 100 y lt x rnorm 50 y round y hist y Is there a way to make a histogram look a bit l
  • 两个闪亮的操作按钮

    我正在编写一个闪亮的函数 其中包含两个操作按钮 这两个按钮是左右按钮 单击时可以帮助绘图移动 第一次单击时 这两个按钮都工作正常 当我重新单击它们时 就会出现问题 无论我单击哪个按钮 它都会在两个范围之间来回弹跳 我猜可能是 右 和 左 按
  • java try catch 程序流程什么时候中断?

    你好 我对 Java 中的异常处理不太熟悉 所以 正如主题在基本 try catch 块中所述 当我在 Try 块中捕获异常时 程序流程何时中断 try some code that raises an Exception catch Ex
  • 如何重试错误语句?

    如果某个语句出错 我如何简单地告诉 R 重试该语句几次 例如 我希望做类似的事情 tryCatch dbGetQuery Query database error function e if is locking error e If da
  • ts(x) 中的错误:“ts”对象必须有一个或多个观察结果

    当我使用进行预测时forecast库 我注意到以下代码没有按预期运行 library forecast library dplyr df1 lt data frame gp gl 20 5 dt seq 1 100 get lt funct
  • 如何在shell脚本中运行R代码?

    我有一个 R 文件 myfile R 我想使用 shell 脚本来运行它 我怎样才能做到这一点 我试过这个 bin bash Rscript myfile R 但它给了我这个错误 Rscript 找不到命令 我也尝试过这个 bin bash
  • 是否可以在 R 中创建自定义 pch 形状?

    R 中的许多绘图函数都使用图形参数pch指定数据点的形状 根据R 文档 https www rdocumentation org packages graphics versions 3 6 2 topics points 有 26 个矢量
  • 将一个大的 xlsx 文件导入到 R 中?

    我想知道是否有人知道从 大 xlsx 文件 20Mb 导入数据的方法 我尝试使用 xlsx 和 XLConnect 库 不幸的是 两者都使用 rJava 我总是收到相同的错误 gt library XLConnect gt wb lt lo
  • 通过排列进行多组测试

    我有一个 df 其中包含与两个实验相关的两组值 value 1 和 value 2 一个实验包含两组 0 和 1 另一个实验包含三组 0 1 2 test group Value 1 Value 2 AA 0 15 1 11 2 AA 0
  • R/ggplot2:如何匹配重叠区域图中的图例和绘图颜色?

    我有两个面积图 称为 蓝色 和 绿色 其中green大部分是在blue情节 但在极少数点上 它高于blue阴谋 我想使用透明度说alpha 0 2对于两者 并且还能够为每个指定颜色 我现在的问题是 自从green情节主要是在blue地块 其
  • 使用 ggplot2 在一张画布上绘制多个图形[重复]

    这个问题在这里已经有答案了 我正在尝试根据此表将两个 ggplot2 图合并为一个图 Type RatingA RatingB 1 One 3 36 2 Two 5 53 3 One 5 57 4 One 7 74 5 Three 4 38
  • 修改x轴刻度标签

    我正在尝试更改由生成的箱线图的 x 轴刻度标签ggplot2 x 轴是一个分类变量 HabFac 我想要的是将其刻度更改为 6 个化学品 A E 下面是我的代码 raw data read table Read data p TT ggpl

随机推荐