修改Shiny代码替换MSFD Descriptors后出现Error in if报错
错误根因定位
这个报错的直接触发原因是你Shiny.R文件第289行graph_obj函数里的if判断语句,判断条件返回了长度为0的空值,R的if语句不接受空值作为判断条件,直接抛出异常。
结合你修改的内容,常见的触发场景如下:
- 你替换字符串的时候,误改了某个变量名,导致原本用来做
if判断的变量现在未定义、取值为NULL或者长度为0的向量 - 关联的数据源、选择器变量原本绑定的是
MSFD Descriptors相关的枚举值,你替换成Ecosystem services之后,对应枚举值、筛选逻辑不匹配,返回了空结果,后续if判断用了这个空结果直接报错 horrendogram对应的渲染逻辑依赖的输入参数,现在因为替换后的逻辑问题没有正常传值,导致graph_obj函数接收的入参为空
排查步骤
- 先定位到
Shiny.R第289行的if语句,打印判断条件的取值和类型,确认是不是返回空值:
# 在289行的if判断前加这行调试代码 print(paste("判断条件取值:", 判断条件变量名, "长度:", length(判断条件变量名)))
- 排查该判断条件对应的变量上游逻辑,确认是不是
Ecosystem services相关的取值、筛选逻辑没有对齐:- 检查输入控件(下拉框、单选框等)绑定的可选值是不是已经全部替换成
Ecosystem services相关选项,有没有漏改的地方 - 检查数据过滤逻辑,是不是原来过滤
MSFD Descriptors的条件现在换了之后没有匹配到数据,返回了空数据集
- 检查输入控件(下拉框、单选框等)绑定的可选值是不是已经全部替换成
- 临时兼容方案可以先给
if判断加空值校验,避免直接报错:
# 原来的写法 if(判断条件) { ... } # 改成带空值校验的写法 if(length(判断条件) != 0 && !is.null(判断条件) && 判断条件) { ... }
内容的提问来源于stack exchange,提问作者Cat3773
相关产品推荐
相关产品推荐

