在R函数中grep

时间:2014-09-12 23:09:53

标签: regex r grep

我想编写一个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)时,该功能显然会窒息,但我不知道应该如何实现这一点。

提前致谢!

1 个答案:

答案 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")