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?
根据手册,这是不可能的,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)