[R] 'Date' elements within a matrix

David Winsemius dwinsemius at comcast.net
Sun Mar 13 17:46:24 CET 2011


On Mar 13, 2011, at 11:46 AM, Bogaso Christofer wrote:

> Thanks everyone for clarifying my query. However I was wondering why  
> that
> Date character is not preserved within a matrix? Why R forcefully  
> changes
> that to numeric? I am especially concerned because as per the  
> definition of
> the matrix, each element needs to be of same class.

THe help page for `matrix` says that there is coercion with  
`as.vector` and the help page for `as.vector` describes further  
specific defaults for that operation, so I think your mental model of  
what matrix requires may need refinement from a simplistic notion of  
"matrix needs same class".

My reading could be wrong but it appears any vector of a non-atomic  
class is going to be coerced to an atomic class (as well as having any  
names stripped off).

-- 
David.

> Is there any other
> example other than Date class which R forcefully changes to some  
> simpler
> class if it placed within a matrix?
>
> Thanks and regards,
>
>
> -----Original Message-----
> From: Gabor Grothendieck [mailto:ggrothendieck at gmail.com]
> Sent: 12 March 2011 02:46
> To: Bogaso Christofer
> Cc: r-help at r-project.org
> Subject: Re: [R] 'Date' elements within a matrix
>
> On Fri, Mar 11, 2011 at 4:15 PM, Bogaso Christofer
> <bogaso.christofer at gmail.com> wrote:
>> Dear all, when I put date objects (class of 'Date') in a matrix it
>> becomes
>> numeric:
>>
>>> dat <- matrix(seq(as.Date("2011-01-01"), as.Date("2011-01-09"),  
>>> by="1
>> day"), 3)
>>
>>> dat
>>
>>      [,1]  [,2]  [,3]
>>
>> [1,] 14975 14978 14981
>>
>> [2,] 14976 14979 14982
>>
>> [3,] 14977 14980 14983
>>
>>> class(dat[1,1])
>>
>> [1] "numeric"
>>
>>
>>
>> As it could not preserve the 'Date' characteristics after putting my
>> Date observations, I find it difficult to carry forward further
>> calculation with Dates. Can somebody help me on how to preserve the
>> Data properties while storing them within some matrix?
>
> If its important to you to store them in a matrix (as opposed to a  
> data
> frame) then try storing them in a matrix of lists:
>
>> dd <- seq(as.Date("2011-01-01"), as.Date("2011-01-09"), by = "day") m
>> <- matrix(as.list(dd), 3) m[[1,1]]
> [1] "2011-01-01"
>
>
> -- 
> Statistics & Software Consulting
> GKX Group, GKX Associates Inc.
> tel: 1-877-GKX-GROUP
> email: ggrothendieck at gmail.com
>
> ______________________________________________
> 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.

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list