I want to return a logical vector for regexp matches over a character vector, but match or %in do not seem to support regular expressions, e.g.:
> x <- c("Bill", "Brett", "Jane")
> grep("^B", x)
[1] 1 2
> x %in% "^B"
[1] FALSE FALSE FALSE
I would like this to return
[1] TRUE TRUE FALSE
Ideas?
Thanks,
Roberto
Just chain it:
> seq(along=(x)) %in% grep("^B", x)
[1] TRUE TRUE FALSE
So you could write yourself a little helper function that does both as shown here. But I presume one of the grep()
variants does that as well... Ah, yes, grepl()
is your friend:
> grepl("^B", x)
[1] TRUE TRUE FALSE
Nothing that a quick help(grep)
can't cure ;-)
One way is just to wrap two simple steps up in a function, where we get grep()
to do it's thing, but supply the indices of the elements in x
as the LHS of the call to %in%
:
foo <- function(x, pattern, ...) {
seq_along(x) %in% grep(pattern, x, ...)
}
With your example data we get:
> x <- c("Bill", "Brett", "Jane")
> foo(x, pattern = "^B")
[1] TRUE TRUE FALSE
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With