R语言自定义函数的参数有效性校验不生效问题排查
问题原因分析
你这个报错是逻辑运算符使用错误导致的,|| 是逻辑或关系,我们可以直接拆解你写的判断逻辑:
- 当传入a=1时:
a!=1结果为FALSE,a!=2结果为TRUE,逻辑或的规则是只要其中一个条件为真,整体结果就为真,所以整个判断条件结果为TRUE,直接触发stop报错。 - 当传入a=2时:
a!=1结果为TRUE,a!=2结果为FALSE,逻辑或整体结果仍然为TRUE,同样触发报错。
等于你写的这个判断条件永远为真,不管传入什么值都会触发报错,自然达不到校验效果。
修复方案
你可以选择下面任意一种方案修改代码,都可以实现「只有a不是1或2的时候才触发报错」的校验逻辑:
方案1:将逻辑或替换为逻辑与
myplot2=function(d,a){ if(!(is.data.frame(d))) stop("Error:Is not dataframe") if(a!= 1 && a!= 2){ stop("Error:Has to be one or two") } }
方案2:用%in%运算符,可读性更高
myplot2=function(d,a){ if(!is.data.frame(d)) stop("Error:Is not dataframe") if(!a %in% c(1,2)){ stop("Error:Has to be one or two") } }
内容的提问来源于stack exchange,提问作者Ace123
相关产品推荐
相关产品推荐

