[R] case conversion and/or string comparison

Randall Skelton
Fri, 16 Nov 2001 11:37:55 -0000

This is no doubt trivial but after searching the help files and the web, I
cannot seem to find it.

1) How do I convert 'hgt' into 'HGT' in R?
2) How should I have used the help facilities to find this?

At the end of the day, all I want to do is case insensitive string
matching... i.e. 'if ("HGT" == 'hgt') print('this
should be true')'

I tried using some of the regular expression tools but I had some trouble
interpreting the results:

 > grep("HGT", "hgt", ignore.case = T)
 [1] 1
 > grep("HGT", "tem", ignore.case = T)
 numeric(0)

This appears to be what I want. However, putting an 'if' around this
fails for the false case.

 > if ( grep("HGT", "tem", ignore.case = T) )
print('hi');
 Error in if (grep("HGT", "tem", ignore.case = T))
print("hi") :
         argument of if(*) is not interpretable as logical

I suppose that R cannot interpret 'if (numeric(0))'.  I would think the
following would work?

 > grep("HGT", "hgt", ignore.case = T) == 1
 [1] TRUE
 > grep("HGT", "tem", ignore.case = T) == 1
 logical(0)

Note that the bottom is not 'FALSE'?  Why?

 > if (grep("HGT", "tem", ignore.case = T) == 1)
print('hi');
 Error in if (grep("HGT", "tem", ignore.case = T) == 1)
print("hi") :
         missing value where logical needed

I suppose that R cannot interpret 'if (logical(0))' either?

So my question is:  How to I return a logical 'TRUE/FALSE' when
comparing 2 strings?  Clearly, I am missing something.

Thanks in advance,
Randall