gpt4 book ai didi

r - 是否可以在 "NA"中区分 NA_character_ 和 `switch` ?

转载 作者:行者123 更新时间:2023-12-01 00:21:47 25 4
gpt4 key购买 nike

Match NA's in switch() loop ,回答者显示使用 `NA`switch将匹配缺失值。然而,"NA"也匹配。我有一个字符向量,其中包含字符串 "NA"以及缺失值 NA .我将这个向量的元素一个一个地传递给 switch ,但无法区分两者

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))区分它们,但使用 switch的目的是限制 if ... else 的嵌套声明,所以我宁愿使用 switch如果只是在备选方案列表中选择正确的名称,则可以单独使用。我注意到帮助文件说(我的重点):

If EXPR evaluates to a character string then that string is matched (exactly) to the names of the elements in ...



所以我想知道这里是否有“完全等于 NA_character_”的特殊含义。

最佳答案

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

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"

使用 OP 的循环
for(k in c(NA, "NA")) cat(f1(k), "\n")
#C
#A

在这种情况下, NA被视为 NA_character_因为它是一个字符向量。如果我们需要使用为 NA ,然后将其保存在 list
for(k in list(NA, "NA")) cat(f1(k), "\n")
#B
#A

关于r - 是否可以在 "NA"中区分 NA_character_ 和 `switch` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48220051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com