R 是否有可能区分NA“u字符”和“u”字符;不适用;在“开关”中?

R 是否有可能区分NA“u字符”和“u”字符;不适用;在“开关”中?,r,switch-statement,na,R,Switch Statement,Na,在中,回答者显示在开关中使用`NA`可以匹配缺少的值。但是,“NA”也匹配。我有一个字符向量,它既包含字符串“NA”,也包含缺少的值NA。我将这个向量的元素一个接一个地传递给开关,但无法区分两者 for (k in c(NA, "NA")) { cat(switch(k, "NA_character_" = "C", "NA" = "B", `NA` = "A")) } #> BB for (k in c(NA, "NA")) { cat(switch(k, "NA_chara

在中,回答者显示在
开关中使用
`NA`
可以匹配缺少的值。但是,
“NA”
也匹配。我有一个字符向量,它既包含字符串
“NA”
,也包含缺少的值
NA
。我将这个向量的元素一个接一个地传递给
开关
,但无法区分两者

for (k in c(NA, "NA")) {
  cat(switch(k, "NA_character_" = "C", "NA" = "B", `NA` = "A"))
}

#> BB

for (k in c(NA, "NA")) {
  cat(switch(k, "NA_character_" = "C", `NA` = "A", "NA" = "B"))
}

#> AA
我知道我可以使用
if(is.na(k))
来区分它们,但是使用
开关的目的是限制
if的嵌套。。。else
语句,因此如果只是在备选列表中选择正确的名称,我宁愿单独使用
开关
。我注意到帮助文件说(我强调):

如果EXPR的计算结果为字符串,则该字符串将(精确地)与


因此,我想知道“完全等于
NA\u character\uu
”在这里是否有特别的含义

我们可以创建一个函数来区分这三种情况

f1 <- function(val){      
   switch(deparse(val),
      "NA_character_" = "C", 
       "NA" = "B", 
      '"NA"' = "A") 
 }

f1(NA)
[1] "B"
f1(NA_character_)
#[1] "C"
f1("NA")   
#[1] "A"
在这种情况下,
NA
被视为
NA\u字符
,因为它是一个字符向量。如果需要使用as
NA
,请将其保存在
列表中

for(k in list(NA, "NA")) cat(f1(k), "\n")
#B 
#A 

对不起,不清楚;也许标题中的
“NA”
应该是
“NA”
。我的意思是:是否有可能区分字符向量中缺少的值和文字
“NA”
?谢谢!使用
deparse
。我认为您应该保留您以前编辑的一个代码块:我的解决方案就是将
switch(k,…)
更改为
switch(deparse(k),…)
并为
“NA”
文本嵌套引号。@Hugh谢谢,我更新了该对象。取而代之的是,将其置于
开关
内是非常紧凑的。更新
for(k in list(NA, "NA")) cat(f1(k), "\n")
#B 
#A