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 ------------------------------