R语言switch函数无匹配输入时抛出错误或设置默认值的方法
R的
switch()无匹配分支的优雅报错/默认值方案 R的字符型switch()原生支持默认分支:只需要在所有命名分支的末尾,加一个不带名称的语句,这个语句就会在输入无匹配时自动执行。
最优实现代码
你不需要额外维护合法输入列表,直接修改原有switch()结构即可:
animal_sound <- function(x) { switch(x, "dog" = "woof", "cat" = "meow", "bee" = "bzzz", "duck" = "quack", # 无命名的最后一个分支为默认分支,匹配失败时触发 stop("animal is not supported. Try a different animal.") ) }
效果测试
- 匹配成功时正常返回:
animal_sound("bee") #> [1] "bzzz" animal_sound("cat") #> [1] "meow"
- 匹配失败时自动抛错终止运行:
animal_sound("alligator") #> Error in animal_sound("alligator") : animal is not supported. Try a different animal.
扩展用法:设置默认返回值
如果不需要抛错,只需要返回默认值,把默认分支的stop()替换为你需要的返回值即可:
animal_sound <- function(x) { switch(x, "dog" = "woof", "cat" = "meow", "bee" = "bzzz", "duck" = "quack", "unknown sound" ) } animal_sound("alligator") #> [1] "unknown sound"
注意事项
该默认分支逻辑仅适用于switch()的第一个参数(EXPR)为字符型的场景。如果EXPR为数值型,switch()会按位置匹配分支,此时若数值超出分支数量会返回NULL,需要额外判断处理。
内容的提问来源于stack exchange,提问作者Emman
相关产品推荐
相关产品推荐

