我想用数值切换个案,但我找不到自然的方法来做到这一点。这就是我的尝试:
这会导致语法错误:
fun <- function(x) {
switch(x,
0.2=0.1,
0.9=0.6)
}
这个编译,但有更好的解决方案吗?
fun <- function(x) {
y <- as.character(x)
switch(y,
"0.2"=0.1,
"0.9"=0.6)
}
答案 0 :(得分:5)
根据?switch
帮助页面
如果EXPR的值不是字符串,则强制为整数。如果它介于1和nargs() - 1之间,那么将评估...的相应元素并返回结果:因此,如果第一个参数为3,则计算并返回第四个参数。
此外,帮助页面提供了使用数值表达式
的示例## Numeric EXPR does not allow a default value to be specified
## -- it is always NULL
for(i in c(-1:3, 9)) print(switch(i, 1, 2 , 3, 4))
因此,使用数字开关时,只允许使用整数值。检查两个十进制值是否完全相等isn't always that easy因此不允许。也许有一种更好的方法来跟踪这个特定条件,而不是使用非整数数值。