On 13/02/2014 15:51, Marc Schwartz wrote:

On Feb 13, 2014, at 8:43 AM, Rainer M Krug <rai...@krugs.de> wrote:

Hi

I want to search for multiple pattern as grep is doing for a single
pattern, but this obviously not work:

grep("an", month.name)
[1] 1
grep("em", month.name)
[1]  9 11 12
grep("eb", month.name)
[1] 2
grep(c("an", "em", "eb"), month.name)
[1] 1
Warning message:
In grep(c("an", "em", "eb"), month.name) :
  argument 'pattern' has length > 1 and only the first element will be used


Is there an equivalent which returns the positions as grep is doing, but
not using the strict full-string matching of match()?

I could obviously do:

unlist( sapply(pat, grep, month.name ) )
an em1 em2 em3  eb
  1   9  11  12   2

but is there a more compact command I am missing?

Thanks,

Rainer


The vertical bar '|' acts as a logical 'or' operator in regex expressions:

grep("an|em|eb", month.name)
[1]  1  2  9 11 12

grep("an|em|eb", month.name, value = TRUE)
[1] "January"   "February"  "September" "November"  "December"


Regards,

Marc Schwartz

and if you want your patterns in a vector
> pat <-c("an", "em", "eb")
> grep(paste(pat, collapse="|"), month.name)
[1]  1  2  9 11 12

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to