以下代码有效:
switch("A", "A" = "a", "B" = "b", "C" = "c", "OTHER")
但是这段代码没有:
switch("A", "" = "BLANK", "A" = "a", "B" = "b", "C" = "c", "OTHER")
失败并显示错误:
Error: attempt to use zero-length variable name
是否有理由允许R switch语句采用空字符串?
答案 0 :(得分:2)
问题不在于交换机是否可以采用空字符串,而是空字符串是否为valid object name。它不是。有了这种用法,你就可以做与
相同的事情了"" = "BLANK"
您想从交换机获得什么样的行为?用reproducible example描述它,我们会看看我们是否可以指出正确的方向!
响应注释:switch不能写入能够处理返回默认值以外的其他字符串的空字符串。如果你想要一个默认值而另一个值为空字符串,那么你需要一个包装器,如下所示:
f <- function(x){
if(x == "") return("BLANK")
switch(x, A = "a", B = "b", C = "c", "OTHER")
}
f("A")
# [1] "a"
f("ABC")
# [1] "OTHER"
f("")
# [1] "BLANK"