如何在R Shiny的renderTable中正常展示自定义错误消息
问题根因
你编写的validate校验逻辑放在了tableau_taux_fonction()调用语句之后,而报错是该函数内部的filter逻辑触发的:当所选筛选条件匹配结果为空时,filter的输入参数长度为0,直接抛出了R原生报错,代码根本没有执行到后续的validate校验步骤。
排查解决步骤
- 第一步:给函数调用增加错误捕获逻辑
把tableau_taux_fonction的调用包裹在tryCatch中,提前捕获函数运行过程中出现的所有错误,避免原生报错直接暴露到前端页面,示例修改代码如下:output$tableau_taux <- renderTable({ # 用tryCatch捕获函数运行阶段的报错 tab_taux <- tryCatch({ tableau_taux_fonction(input$etab_id,input$pcs_id,input$retard_id,input$sexe_id) }, error = function(e) { # 运行出错时统一返回NULL return(NULL) }) validate( need(!is.null(tab_taux) && nrow(tab_taux) > 0, "Veuillez sélectionner d'autres critères") ) tab_taux }) - 第二步:补充空数据集判断规则
在校验逻辑中额外增加nrow(tab_taux) > 0的判断:避免函数运行没有报错、但返回了行数为0的空数据集的场景,也能正常触发你设置的自定义提示。 - 第三步(可选):优化自定义函数内部逻辑
直接修改tableau_taux_fonction的代码,在执行filter操作前先判断传入的筛选参数是否为空、是否和待筛选数据集的长度匹配,提前处理异常场景直接返回NULL,不需要等到filter执行时报错。
内容的提问来源于stack exchange,提问作者Elise_351995
相关产品推荐
相关产品推荐

