R语言中如何对数值类型值使用switch函数?
问题根因
R语言switch()函数对数值型、字符型入参的匹配逻辑完全不同,同时你的改写代码存在语法问题:
- 语法问题:R中函数的命名参数不能直接用纯数字作为参数名,你写的
1 = "option 1"不符合语法规范,纯数字的参数名必须用反引号包裹为`1` = "option 1" - 匹配逻辑差异:
- 入参为字符型时,
switch会匹配后续分支的命名键值,适合用显式的标签写法 - 入参为数值型时,
switch会直接按数值大小取对应位置的分支,不会识别你写的命名标签,所以即使你把数字参数名加了反引号也达不到预期效果
- 入参为字符型时,
正确改写方案
方案1:按数值位置匹配(适合分支顺序固定的场景)
数值入参不需要写命名标签,直接按x=1、x=2、x=3对应的顺序放返回值,最后放默认报错分支即可:
x_option <- function(x) { switch(x, "option 1", "option 2", "option 3", stop("Invalid `x` value") ) }
方案2:转字符后按命名匹配(可读性更高,不容易出位置错误)
如果想要保留显式的数值标签避免位置写错,把入参强制转为字符型即可:
x_option <- function(x) { switch(as.character(x), `1` = "option 1", `2` = "option 2", `3` = "option 3", stop("Invalid `x` value") ) }
内容的提问来源于stack exchange,提问作者LoF10
相关产品推荐
相关产品推荐

