[R] Parenthesis recognition with grep

Charilaos Skiadas cskiadas at gmail.com
Sun Aug 31 17:24:31 CEST 2008


Try:

myStr <- "YD\\(001\\)"

In POSIX format, or in most such formats in fact, special characters  
like parentheses have a particular meaning, and need to be escaped if  
they are to have the "parenthesis" meaning. This is done typically by  
putting a backslash in front of them. Since however a backslash has a  
special meaning inside a "...", namely it is use to "escape" things,  
we need to escape it, hence the two backslashes you see back to back.  
You can use:

cat(myStr)

To see what hte string actually has in it.

A better way to solve your problem in your case is to use the  
original myStr you had, but change the grep call to be:

grep(myStr, headers, fixed=TRUE)


The fixed=TRUE part tells it to treat myStr as a string to be matched  
exactly. Of course ?grep should probably have led you to this.


Haris Skiadas
Department of Mathematics and Computer Science
Hanover College


On Aug 31, 2008, at 10:54 AM, Sébastien wrote:

> Hi Jorge,
>
> This is doing the work just fine. Thank you !
> However, I would like to know what should be done with the grep  
> call...
> just for my personal education :)
>
> Sebastien
>
> Jorge Ivan Velez a écrit :
>>
>> Dear Sébastien,
>>
>> Is this what you want?
>>
>> which(myStr==headers)
>> [1]  2
>>
>> which(headers%in%myStr)
>> [1] 2
>>
>>
>> HTH,
>>
>> Jorge
>>
>>
>>
>> On Sun, Aug 31, 2008 at 10:28 AM, Sébastien <pomchip at free.fr
>> <mailto:pomchip at free.fr>> wrote:
>>
>>     Dear R-users,
>>
>>     I need to dynamically recognize the index of a given string myStr
>>     in a vector of string. The problem is that myStr might contain
>>     parenthesis, causing grep not to recognize it the way I want (see
>>     below). The help mentions that the pattern used by grep should be
>>     in the POSIX format... I guess the problem is here;  
>> unfortunately,
>>     I am not familiar with the subtleties of the POSIX format
>>
>>     ex:
>>     myStr <- "YD(001)"
>>     headers <-c("TD", "YD(001)", "YD(002)", "T", "Y(001)", "Y(002)")
>>     grep(myStr, headers)
>>
>>     How should I modify my grep call to get the match right?
>>
>>     Thank you for your help,
>>
>>     Sebastien
>>



More information about the R-help mailing list