空字符串上的R switch语句

空字符串上的R switch语句,r,switch-statement,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语句接受空字符串?问题不在于switch是否可以接受空字符串,而在于

以下代码起作用:

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语句接受空字符串?

问题不在于switch是否可以接受空字符串,而在于空字符串是否为空字符串。事实并非如此。使用这种用法,您所做的与

"" = "BLANK"
你想从交换机中得到什么行为?用一个简单的句子来描述它,我们会看看我们是否能为你指出正确的方向

作为对comment: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"

f要添加到@DanHall的答案中,OPs first
switch
命令应该是
switch(“A”,A=“A”,B=“B”,C=“C”,“OTHER”)
。好的,明白了,但是第二个呢?如果传递到switch语句中的元素是空字符串呢?我希望它返回“空白”。我该怎么做呢?试试我添加到这个响应中的包装器函数。如果这不符合你的需要,可以编辑你的问题或写一个新的问题,提供更多的上下文?我希望这是有帮助的!在调用
开关之前处理空字符串对您有效吗?似乎不能有空的变量名