空字符串上的R switch语句

时间:2018-03-07 22:21:56

标签: r switch-statement

以下代码有效:

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语句采用空字符串?

1 个答案:

答案 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"