**From:** Martin Maechler (*maechler@stat.math.ethz.ch*)

**Date:** Tue 25 May 2004 - 06:16:15 EST

**Next message:**Carlos Guevel: "[R] barplot"**Previous message:**Mag. Ferri Leberl: "[R] adress the current index"**In reply to:**Prof Brian Ripley: "Re: [R] as.matrix.data.frame() in R 1.9.0 converts to character when it should (?) convert to numeric"

Message-id: <16562.22543.823840.710442@gargle.gargle.HOWL>

*>>>>> "BDR" == Prof Brian Ripley <ripley@stats.ox.ac.uk>
*

*>>>>> on Mon, 24 May 2004 17:02:21 +0100 (BST) writes:
*

BDR> I don't think a POSIXt element *is* numeric (that's a

BDR> basic atomic vector),

well, yes, in some strict sense, but at least

* > is.atomic( ISOdatetime(2003,1,1:3,0,0,0))
*

[1] TRUE

BDR> so the new behaviour seems right to me. The Warning is

BDR> wrong, though, and will be fixed.

Further note that data.matrix(.) still does convert to

numeric, and AFAIK all good books on S / R tell you to rather

use data.matrix(df) in situations you want a numeric matrix from a

data frame df.

BDR> On Mon, 24 May 2004, Don MacQueen wrote:

* >> Conversion of a data frame to a matrix using as.matrix() when a
*

* >> column of the data frame is POSIXt and all other columns are numeric
*

* >> has changed in R 1.9.0 from R 1.8.1. The new behavior issues a
*

* >> warning message and converts to a character matrix. In R 1.8.1, such
*

* >> an object was converted to a numeric matrix.
*

* >>
*

* >> Here is an example.
*

* >>
*

* >> #### R 1.9.0 ####
*

* >> > foo <- data.frame( x=1:3,dt=ISOdatetime(2003,1,1:3,0,0,0))
*

* >>
*

* >> > as.matrix(foo)
*

* >> x dt
*

* >> 1 "1" "2003-01-01"
*

* >> 2 "2" "2003-01-02"
*

* >> 3 "3" "2003-01-03"
*

* >> Warning message:
*

* >> longer object length is not a multiple of shorter object length in:
*

* >> cl == c("Date", "POSIXct", "POSIXlt")
*

<................>

* >> From ?as.matrix() in R 1.9.0:
*

* >>
*

* >> 'as.matrix' is a generic function. The method for data frames will
*

* >> convert any non-numeric/complex column into a character vector
*

* >> using 'format' and so return a character matrix, except that
*

* >> all-logical data frames will be coerced to a logical matrix.
*

* >>
*

* >> The POSIXt element is numeric, and so should be converted to numeric
*

* >> > is.numeric(foo$dt)
*

* >> [1] TRUE
*

that is a point, particularly together with the above

is.atomic(foo$dt) |-> TRUE

* >> ####
*

* >> I think this might qualify for bug status, either in and of itself or
*

* >> relative to documentation. But I'm not, as the posting guide says,
*

* >> "completely and utterly sure". So I'm posting to r-help first...I
*

* >> will send a bug report if an R-core member asks me to.
*

* >>
*

* >> Thanks
*

* >> -Don
*

Note that with a factor (instead of POSIX*t),

things are similar

* > str(ffoo <- data.frame(x=1:3, f=gl(3,1)))
*

`data.frame': 3 obs. of 2 variables:

$ x: int 1 2 3

$ f: Factor w/ 3 levels "1","2","3": 1 2 3

* > as.matrix(ffoo)
*

x f

1 "1" "1"

2 "2" "2"

3 "3" "3"

* > data.matrix(ffoo)
*

x f

1 1 1

2 2 2

3 3 3

but in that case,

* > is.numeric(ffoo$f)
*

[1] FALSE

hence, all according to the docs

------

Maybe we should either be more specific in help(as.matrix)

{and more other places ?} about what "numeric" means there,

or consider -- and this may well be unfeasible because it

potentially breaks current code -- to redefine

'is.numeric(.)' to be more restrictive:

e.g.,

if (is.object(x)) ===> ! is.numeric(x)

?

Martin

______________________________________________

R-help@stat.math.ethz.ch mailing list

https://www.stat.math.ethz.ch/mailman/listinfo/r-help

PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

**Next message:**Carlos Guevel: "[R] barplot"**Previous message:**Mag. Ferri Leberl: "[R] adress the current index"**In reply to:**Prof Brian Ripley: "Re: [R] as.matrix.data.frame() in R 1.9.0 converts to character when it should (?) convert to numeric"

*
This archive was generated by hypermail 2.1.3
: Mon 31 May 2004 - 23:05:12 EST
*