Many more recent regular expression implementations have ways of indicating a match on a word boundary. It's usually "\b".

Here's what you did:

> gsub("x1", "i1", "x1 + x2 + x10 + xx1")
[1] "i1 + x2 + i10 + xi1"

The following worked for me to just change "x1" to "i1", while leaving alone any larger "word" that contains "x1":

> gsub("\\bx1\\b", "i1", "x1 + x2 + x10 + xx1")
[1] "i1 + x2 + x10 + xx1"
>

Note that the backslash must be escaped itself to get past the R lexical analyser, which is independent of the regexp processor. What the regexp processor sees is just a single backslash.

For more on this, look for perl documentation of regular expressions. Be aware that to use full perl regexps, you must supply the perl=T argument to gsub(). Also note that "\b" seems to be part of the most basic regular expression language in R; it even works with extended=F:

> gsub("\\bx1\\b", "i1", "x1 + x2 + x10 + xx1", perl=T)
[1] "i1 + x2 + x10 + xx1"
> gsub("\\bx1\\b", "i1", "x1 + x2 + x10 + xx1", perl=F)
[1] "i1 + x2 + x10 + xx1"
> gsub("\\bx1\\b", "i1", "x1 + x2 + x10 + xx1", perl=F, ext=F)
[1] "i1 + x2 + x10 + xx1"
>

(I assumed the fact that you have a matrix of strings is not relevant.)

Hope this helps,

Tony Plate

At Wednesday 09:07 PM 10/27/2004, Kevin Wang wrote:
Hi,

Suppose I've got a matrix, and the first few elements look like
  "x1 + x3 + x4 + x5 + x1:x3 + x1:x4"
  "x1 + x2 + x3 + x5 + x1:x2 + x1:x5"
  "x1 + x3 + x4 + x5 + x1:x3 + x1:x5"
and so on (have got terms from x1 ~ x14).

If I want to replace all the x1 with i7, all x2 with i14, all x3 with i13,
for example.  Is there an easy way?

I tried to put what I want to replace in a vector, like:
 repl = c("i7", "i14", "i13", "d2", "i8", "i5",
          "i6", "i3", "A", "i9", "i2",
          "i4", "i15", "i21")
and have another vector, say:
  > orig
 [1] "x1"  "x2"  "x3"  "x4"  "x5"  "x6"  "x7"  "x8"  "x9"  "x10"
[11] "x11" "x12" "x13" "x14"

Then I tried something like
  gsub(orig, repl, mat)
## mat is the name of my matrix

but it didn't work *_*.....it would replace terms like x10 with i70.

(I know it may be an easy question...but I haven't done much regular
expression)

Cheers,

Kevin

--------------------------------
Ko-Kang Kevin Wang
PhD Student
Centre for Mathematics and its Applications
Building 27, Room 1004
Mathematical Sciences Institute (MSI)
Australian National University
Canberra, ACT 0200
Australia

Homepage: http://wwwmaths.anu.edu.au/~wangk/
Ph (W): +61-2-6125-2431
Ph (H): +61-2-6125-7407
Ph (M): +61-40-451-8301

______________________________________________
[EMAIL PROTECTED] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

______________________________________________ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to