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字符
,因为它是一个字符向量。如果需要使用asNA
,请将其保存在列表中
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