Hi, I have a vector, which contains both strings and numbers, e.g.> foo <- c("str1",1234,"str2",0.9876)I want to know if a distinct element of the vector is a string or a number and took "is.numeric", but> is.numeric(foo[2])[1] FALSE because R treats the numbers in a mixed vectors as strings:> foo[1] "str1" "1234" "str2" "0.9876" As a workaround I use:> !is.na(as.numeric(foo[2]))[1] TRUE> !is.na(as.numeric(foo[1]))[1] FALSE Warning message: NAs introduced by coercion This works, but I always get the spurious warning messages. Do you know a better way or a way to suppress these warning messages? Thanks, Arne -- Arne Henningsen Department of Agricultural Economics Christian-Albrechts-University Kiel 24098 Kiel, Germany Tel: +49-431-880-4445 Fax: +49-431-880-1397 ahenningsen at email.uni-kiel.de http://www.uni-kiel.de/agrarpol/ahenningsen.html
> Hi, > I have a vector, which contains both strings and numbers, e.g. > > > foo <- c("str1",1234,"str2",0.9876) >R> foo <- list("str1",1234,"str2",0.9876) R> lapply(foo, is.numeric) [[1]] [1] FALSE [[2]] [1] TRUE [[3]] [1] FALSE [[4]] [1] TRUE using lists is maybe the better solution. Torsten> I want to know if a distinct element of the vector is a string or a number and > took "is.numeric", but > > > is.numeric(foo[2]) > [1] FALSE > > because R treats the numbers in a mixed vectors as strings: > > > foo > [1] "str1" "1234" "str2" "0.9876" > > As a workaround I use: > > > !is.na(as.numeric(foo[2])) > [1] TRUE > > !is.na(as.numeric(foo[1])) > [1] FALSE > Warning message: > NAs introduced by coercion > > This works, but I always get the spurious warning messages. Do you know a > better way or a way to suppress these warning messages? > > Thanks, > Arne > > -- > Arne Henningsen > Department of Agricultural Economics > Christian-Albrechts-University Kiel > 24098 Kiel, Germany > Tel: +49-431-880-4445 > Fax: +49-431-880-1397 > ahenningsen at email.uni-kiel.de > http://www.uni-kiel.de/agrarpol/ahenningsen.html > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > http://www.stat.math.ethz.ch/mailman/listinfo/r-help > >
On Thu, 20 Feb 2003 10:58:46 +0100 Arne Henningsen <ahenningsen at email.uni-kiel.de> wrote:> Hi, > I have a vector, which contains both strings and numbers, e.g. > > > foo <- c("str1",1234,"str2",0.9876) > > I want to know if a distinct element of the vector is a string or a number and > took "is.numeric", but > > > is.numeric(foo[2]) > [1] FALSE > > because R treats the numbers in a mixed vectors as strings: > > > foo > [1] "str1" "1234" "str2" "0.9876" > > As a workaround I use: > > > !is.na(as.numeric(foo[2])) > [1] TRUE > > !is.na(as.numeric(foo[1])) > [1] FALSE > Warning message: > NAs introduced by coercion > > This works, but I always get the spurious warning messages. Do you know a > better way or a way to suppress these warning messages? > > Thanks, > Arne > > -- > Arne Henningsen > Department of Agricultural Economics > Christian-Albrechts-University Kiel > 24098 Kiel, Germany > Tel: +49-431-880-4445 > Fax: +49-431-880-1397 > ahenningsen at email.uni-kiel.de > http://www.uni-kiel.de/agrarpol/ahenningsen.html > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > http://www.stat.math.ethz.ch/mailman/listinfo/r-helpThis function in the Hmisc library may help: all.is.numeric <- function(x, what=c('test','vector')) { what <- match.arg(what) old <- options(warn=-1) on.exit(options(old)) xs <- x[x!='' & x!=' '] isnum <- !any(is.na(as.numeric(xs))) if(what=='test') isnum else if(isnum) as.numeric(x) else x } -- Frank E Harrell Jr Prof. of Biostatistics & Statistics Div. of Biostatistics & Epidem. Dept. of Health Evaluation Sciences U. Virginia School of Medicine http://hesweb1.med.virginia.edu/biostat