匹配 switch 语句中的字符串

Dam*_*ian 2 string r switch-statement

我想使用 switch 语句根据字符串的前两个字符进行分支。在下面显示的示例中,我想用“aabb”或“aacc”返回“Apple”

test<-c("aabb", "aacc", "bbbb")

foo <- Vectorize(function(a) {
      switch(as.character(a),
            "^aa" = "Apple",
            "bbbb" = "Grape",
            "Unknown")

}, "a")

> foo(test)
aabb      aacc      bbbb 
"Unknown" "Unknown"   "Grape" 
Run Code Online (Sandbox Code Playgroud)

如果存在完全匹配,我可以使语句起作用,但我无法弄清楚如何仅使用前两个字符来获得匹配。也许有一种使用正则表达式的方法?如图所示,我尝试使用 ^来匹配字符串的开头(与 一起使用grep),但它不起作用。

我想我可以使用嵌套ifelse语句 withgrepl但它可以使用switch?

mt1*_*022 5

根据手册,这是不可能的,switch因为它只允许精确匹配:

开关(EXPR,...)

如果 EXPR 的计算结果为字符串,则该字符串与....

但是你可以用case_whenin来做到dplyr

foo <- function(x){
    dplyr::case_when(
        grepl('^aa', x) ~ 'Apple',
        x == 'bbbb' ~ 'Grape',
        TRUE ~ 'Unknown'
    )
}
foo(test)
# [1] "Apple" "Apple" "Grape"
Run Code Online (Sandbox Code Playgroud)