[R] test if elements of a character vector contain letters

Bert Gunter gunter.berton at gene.com
Mon Aug 6 18:42:03 CEST 2012


nzchar(x) & !is.na(x)

No?

-- Bert

On Mon, Aug 6, 2012 at 9:25 AM, Liviu Andronic <landronimirc at gmail.com> wrote:
> Dear all
> I'm pretty sure that I'm approaching the problem in a wrong way.
> Suppose the following character vector:
>> (x[1:10] <- paste(x[1:10], sample(1:10, 10), sep=''))
>  [1] "a10" "b7"  "c2"  "d3"  "e6"  "f1"  "g5"  "h8"  "i9"  "j4"
>> x
>  [1] "a10" "b7"  "c2"  "d3"  "e6"  "f1"  "g5"  "h8"  "i9"  "j4"  "k"
> "l"   "m"   "n"
> [15] "o"   "p"   "q"   "r"   "s"   "t"   "u"   "v"   "w"   "x"   "y"
> "z"   "1"   "2"
> [29] "3"   "4"   "5"   "6"   "7"   "8"   "9"   "10"  "11"  "12"  "13"
> "14"  "15"  "16"
> [43] "17"  "18"  "19"  "20"  "21"  "22"  "23"  "24"  "25"  "26"
>
>
> How do you test whether the elements of the vector contain at least
> one letter (or at least one digit) and obtain a logical vector of the
> same dimension? I came up with the following awkward function:
> is_letter <- function(x, pattern=c(letters, LETTERS)){
>     sapply(x, function(y){
>         any(sapply(pattern, function(z) grepl(z, y, fixed=T)))
>     })
> }
>
>> is_letter(x)
>   a10    b7    c2    d3    e6    f1    g5    h8    i9    j4     k
> l     m     n     o
>  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
> TRUE  TRUE  TRUE  TRUE
>     p     q     r     s     t     u     v     w     x     y     z
> 1     2     3     4
>  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
> FALSE FALSE FALSE FALSE
>     5     6     7     8     9    10    11    12    13    14    15
> 16    17    18    19
> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> FALSE FALSE FALSE FALSE
>    20    21    22    23    24    25    26
> FALSE FALSE FALSE FALSE FALSE FALSE FALSE
>> is_letter(x, 0:9)  ##function slightly misnamed
>   a10    b7    c2    d3    e6    f1    g5    h8    i9    j4     k
> l     m     n     o
>  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
> FALSE FALSE FALSE FALSE
>     p     q     r     s     t     u     v     w     x     y     z
> 1     2     3     4
> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
> TRUE  TRUE  TRUE  TRUE
>     5     6     7     8     9    10    11    12    13    14    15
> 16    17    18    19
>  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
> TRUE  TRUE  TRUE  TRUE
>    20    21    22    23    24    25    26
>  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
>
>
> Is there a nicer way to do this? Regards
> Liviu
>
>
> --
> Do you know how to read?
> http://www.alienetworks.com/srtest.cfm
> http://goodies.xfce.org/projects/applications/xfce4-dict#speed-reader
> Do you know how to write?
> http://garbl.home.comcast.net/~garbl/stylemanual/e.htm#e-mail
>
> ______________________________________________
> R-help at r-project.org 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.



-- 

Bert Gunter
Genentech Nonclinical Biostatistics

Internal Contact Info:
Phone: 467-7374
Website:
http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm



More information about the R-help mailing list