Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Looping over a Date or POSIXct object results in a numeric iterator

Why does iterating through a Date or POSIXct object result in numeric? For example:

test = as.Date("2009-01-01") print( class( test ) ) # [1] "Date" for ( day in test ) {     print( class( day ) ) } # [1] "numeric" 

The same thing happens with POSIXct:

test = as.POSIXct("2009-01-01") print( class( test ) ) # [1] "POSIXct" "POSIXt" for ( day in test ) {     print( class( day ) ) } # [1] "numeric" 
like image 803
SFun28 Avatar asked Jun 22 '11 03:06

SFun28


1 Answers

?"for" says that seq (the part after in) is "[A]n expression evaluating to a vector (including a list and an expression) or to a pairlist or 'NULL'".

So your Date vector is being coerced to numeric because Date objects aren't strictly vectors:

is.vector(Sys.Date()) # [1] FALSE is.vector(as.numeric(Sys.Date())) # [1] TRUE 

The same is true for POSIXct vectors:

is.vector(Sys.time()) # [1] FALSE is.vector(as.numeric(Sys.time())) # [1] TRUE 
like image 58
Joshua Ulrich Avatar answered Sep 19 '22 03:09

Joshua Ulrich