Skip to content
Back to formatted view

Raw Message

Message-ID: <4B015866.10405@stats.uwo.ca>
Date: 2009-11-16T13:49:26Z
From: Duncan Murdoch
Subject: on gsub (simple, but not to me!) sintax
In-Reply-To: <4B0151D2.2070004@unifi.it>

On 11/16/2009 8:21 AM, Ottorino-Luca Pantani wrote:
> Dear R users,
> my problem today deals with my ignorance on regular expressions.
> a matter I recently discovered.

You were close.  First, gsub by default doesn't need escapes before the 
parens.  (There are lots of different conventions for regular 
expressions, unfortunately.)  So the Emacs regular expression V_\(.\)_ 
is entered as "V_(.)_" in the default version of gsub().  Second, to 
enter a backslash into a string, you need to escape it.  So the 
replacement pattern V_0\1_ is entered as "V_0\\1_".  So

gsub("V_(.)_", "V_0\\1_", foo)

should give you what you want.

Duncan Murdoch

> 
> Consider the following
> 
> foo <-
> c("V_7_101110_V",  "V_7_101110_V",  "V_9_101110_V",  "V_9_101110_V",
> "V_9_s101110_V",  "V_9_101110_V",  "V_9_101110_V",  "V_11_101110_V",
> "V_11_101110_V", "V_11_101110_V", "V_11_101110_V", "V_11_101110_V",
> "V_17_101110_V", "V_17_101110_V")
> 
> what I'm trying to obtain is to add a zero in front of numbers below 10,
> as in
> 
> c("V_07_101110_V",  "V_07_101110_V",  "V_09_101110_V",  "V_09_101110_V",
> "V_09_101110_V",  "V_09_101110_V",  "V_09_101110_V",  "V_11_101110_V",
> "V_11_101110_V", "V_11_101110_V", "V_11_101110_V", "V_11_101110_V",
> "V_17_101110_V", "V_17_101110_V")
> 
> 
> I'm able to do this on the emacs buffer through query-replace-regexp
> 
> C-M-%
> search for
> V_\(.\)_
> and substitute with
> V_0\1_
> 
> but I completely ignore how to do it with gsub within R
> and the help is quite complicate to understand
> (at least to me, at this moment in time)
> 
> I can search the vector through
> grep("V_._",  foo)
> 
> but I always get errors either on
> gsub('V_\(.\)_', 'V_0\1_', foo)
> 
> 
> or I get not what I'm looking for on
> gsub('V_._', 'V_0._', foo)
> gsub('V_._', 'V_0\1_', foo)
> 
> Thanks in advance