Hi,everyone.
I have a problem when using the grep.
for example:
a <- c("aa","aba","abac")
b<- c("ab","aba")
I want to match the whole word,so
grep("^aba$",a)
it returns 2
but when I used it a more useful way:
grep("^b[2]$",a),
it doesn't work at all, it can't find it, returning integer(0).
How can I chang the format in the second way?
Thanks.
--
Shao
[[alternative HTML version deleted]]
try
grep(paste("^",b[2],"$",sep=""),a)
your version will match "b2":
> grep("^b[2]$",c("b","b2","b3"))
[1] 2
--- Shao <xshining at gmail.com> wrote:
> Hi,everyone.
>
> I have a problem when using the grep.
> for example:
> a <- c("aa","aba","abac")
> b<- c("ab","aba")
>
> I want to match the whole word,so
> grep("^aba$",a)
> it returns 2
>
> but when I used it a more useful way:
> grep("^b[2]$",a),
> it doesn't work at all, it can't find it, returning integer(0).
>
> How can I chang the format in the second way?
>
> Thanks.
>
> --
> Shao
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at stat.math.ethz.ch 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.
>
____________________________________________________________________________________
Pinpoint customers who are looking for what you sell.
Shao wrote:> > Hi,everyone. > > I have a problem when using the grep. > for example: > a <- c("aa","aba","abac") > b<- c("ab","aba") > > I want to match the whole word,so > grep("^aba$",a) > it returns 2 > > but when I used it a more useful way: > grep("^b[2]$",a), > it doesn't work at all, it can't find it, returning integer(0). > > How can I chang the format in the second way? > > Thanks. >The regexp "^b[2]$" matches only two words: "b2" and "b" (in your present grep call with defaults extended = TRUE, perl = FALSE, fixed = FALSE). They don't present in a, that's why grep returns integer(0). If you want to find the word "b[2]" (the expression similar to an array indexing operator), either use fixed=TRUE and remove any regexp markup (^ and $)> a<- c("aa","aba","abac","b[2]") > grep("b[2]",a,fixed=TRUE)[1] 4 , or use escapes> grep("^b\\[2\\]$",a)[1] 4 -- View this message in context: http://www.nabble.com/About-grep-tf4228021.html#a12029243 Sent from the R help mailing list archive at Nabble.com.
On 07-Aug-07 04:20:27, Shao wrote:> Hi,everyone. > > I have a problem when using the grep. > for example: > a <- c("aa","aba","abac") > b<- c("ab","aba") > > I want to match the whole word,so > grep("^aba$",a) > it returns 2 > > but when I used it a more useful way: > grep("^b[2]$",a), > it doesn't work at all, it can't find it, returning integer(0). > > How can I chang the format in the second way? > > Thanks. > > -- > ShaoThe problem is that in the string "^b[2]$" the element b[2] of b is not evaluated, but simply the successive characters ^ b [ 2 ] $ are passed to grep as a character string, which of course is not found. You can construct a character string with the value of b[2] in it by using paste(): grep(paste("^",b[2],"$",sep=""),a) [1] 2 Ted. -------------------------------------------------------------------- E-Mail: (Ted Harding) <ted.harding at nessie.mcc.ac.uk> Fax-to-email: +44 (0)870 094 0861 Date: 07-Aug-07 Time: 07:43:14 ------------------------------ XFMail ------------------------------