我想编写一个R函数(使用grep),它允许我进行精确的模式匹配,但我无法弄清楚如何表示匹配的确切结束(使用$)。更具体地说,请考虑以下事项:
data(mtcars)
mtcars$a <- row.names(mtcars)
mtcars[grep("Merc 450SL", mtcars$a), ]
[1] "Merc 450SL" "Merc 450SLC"
mtcars[grep("Merc 450SL$", mtcars$a), ]
[1] "Merc 450SL"
所以,我想把后者写成一个函数,它包含一个精确的模式匹配,带有美元符号。我可以做一个简单的模式匹配(如第一个例子):
grep.f <- function(x){
b <- grep(x, mtcars$a, fixed=TRUE)
print(mtcars[b,"a"])
}
grep.f("Merc 450SL")
[1] "Merc 450SL" "Merc 450SLC"
当我将第二行更改为b <- grep(x$, mtcars$a, fixed = TRUE)
时,该功能显然会窒息,但我不知道应该如何实现这一点。
提前致谢!
答案 0 :(得分:1)
您可以将$
粘贴到变量的末尾,如下所示:
grep.f <- function(x) {
b <- grep(paste0(x, '$'), mtcars$a)
print(mtcars[b, "a"])
}
grep.f("Merc 450SL")
而不是打印,最好直接返回值:
grep.f <- function(x) {
grep(paste0(x, '$'), mtcars$a, value=T)
}
grep.f("Merc 450SL")