Mike -
apply turns its argument into an array (in this case a
matrix), which can't accomodate dates. To operate on the
rows of a data frame, your best bet is probably to use a
for loop. There's no reason to dread loops in R -- just try
to avoid growing objects inside a loop by preallocating space
for the result.
- Phil
On Tue, 8 Feb 2011, Mike Williamson wrote:
Phil,
Thanks! I am not sure why min & max sometimes work & other times don't
work. In fact, running the script as you had it did work for me. For arrays
that I had, it wasn't working and still isn't. For the moment, I won't worry
about it. It seems maybe it is a hidden bug somewhere (or I am making an
error), instead of just a simple feature to add.
Regarding switching back to POSIXct, I wasn't aware of that method to
switch back. That will save a big headache, and I'm glad I asked!!
As long as you have so many great ideas, do you know how to handle times
/ dates when using "apply"? When I use "apply", it forces the times into
characters. E.g.:
tmp:
Col A Col B
1 2010-12-14 00:47:25 2010-12-14 20:25:40
2 2010-12-14 13:03:04 2010-12-14 20:25:45
3 2010-12-14 13:13:06 2010-12-14 20:25:41
4 2010-12-11 16:33:59 2010-12-14 20:25:41
5 2010-12-14 07:32:50 2010-12-14 20:25:41
6 2010-12-14 07:36:21 2010-12-14 20:25:45
7 2010-10-11 09:31:37 2010-12-01 14:21:42
8 2010-09-25 19:09:34 2010-09-25 21:10:50
9 2010-12-14 17:53:25 2010-12-14 20:33:49
10 2010-09-30 16:43:40 2010-12-01 15:36:07
If I perform:
* sapply(tmp, class) or lapply(tmp, class)
I get:
[1,] "POSIXt" "POSIXt"
[2,] "POSIXct" "POSIXct"
But if I perform:
* apply(tmp, 1, class)
I get:
[1] "character" "character" "character" "character" "character" "character"
[7] "character" "character" "character" "character"
So I cannot perform any operations on times by row, unless I touch the
dreaded "for loop". Or unless there is a secret I do not know...
Thanks!
Mike
"Telescopes and bathyscaphes and sonar probes of Scottish lakes,
Tacoma Narrows bridge collapse explained with abstract phase-space maps,
Some x-ray slides, a music score, Minard's Napoleanic war:
The most exciting frontier is charting what's already here."
-- xkcd
--
Help protect Wikipedia. Donate now:
http://wikimediafoundation.org/wiki/Support_Wikipedia/en
On Tue, Feb 8, 2011 at 12:31 PM, Phil Spector <spec...@stat.berkeley.edu>
wrote:
Mike -
In what sense do min and max not work?
tm = as.POSIXct(c("2010-12-14 20:25:40","2010-12-10
08:15:20","2010-10-05 05:12:10"))
min(tm)
[1] "2010-10-05 05:12:10 PDT"
max(tm)
[1] "2010-12-14 20:25:40 PST"
When a POSIX time becomes numeric, try something like this:
untm = as.numeric(tm)
untm
[1] 1292387140 1291997720 1286280730
class(untm) = 'POSIXct'
untm
[1] "2010-12-14 20:25:40 PST" "2010-12-10 08:15:20 PST"
[3] "2010-10-05 05:12:10 PDT"
That is, just force the class back to POSIXct, don't use
as.POSIXct.
Hope this helps.
- Phil Spector
Statistical Computing
Facility
Department of Statistics
UC Berkeley
spec...@stat.berkeley.edu
On Tue, 8 Feb 2011, Mike Williamson wrote:
Hello,
This is mostly to developers, but in case I missed
something in my
literature search, I am sending this to the broader
audience.
- Are there any plans in the works to make "time" classes
a bit more
friendly to the rest of the "R" world? I am not
suggesting to allow for
fancy functions to manipulate times, per se, or to figure
out how to
properly "add" times or anything complicated. Just some
fixes to make it
easier to work with the "time" classes. Here is a
sampling of some strange
bugs with the time classes that, to my knowledge, don't
exist with any other
core classes:
1. you cannot "unlist" a time without losing the class.
E.g., if you
unlist "2010-12-14 20:25:40" (POSIXct), you get "1292387141",
at
least on my
OS & with my time zone. Regardless of the exact number,
unlisting a time
class converts it to a numeric.
- upon converting to a numeric, it seems there is an
underlying,
assumed origin of "1970-01-01 00:00:00". However, this
same
assumption does
not underlie the conversion *back* to a POSIX time, e.g.,
through
as.POSIXct() function. Therefore, whenever a time is
"accidentally"
converted to a numeric, I have to force it back to a time
through
as.POSIXct(), *providing my own details* as to the origin.
There
is no easy way to find the underlying origin. This makes
me
nervous for any
persistent functions I create. If the underlying origin
ever
changes, then
all this code will be inaccurate. Maybe the origin will
never change, but
regardless it makes more sense to allow for the same
underlying origin
default for "as.POSIXct" that is used when unlisting, or
similar activities
that force the time into a numeric.
2. you cannot perform functions that otherwise seem
trivial, such
as a "max" or "min". I understand why, for instance, adding
is
hard. But
what about max or min? Greater than or less than are
possible, as is
order(). I have my own simple scripts using these 2
functions
in order to
create a "max" & "min" for times, but it would be nice to
have something
vetted & official.
If others could chime in with any strange behaviors they've
seen in
working with times, maybe we could get a critical mass of issues
that are
worthy of an overhaul.
Thanks & Regards,
Mike
"Telescopes and bathyscaphes and sonar probes of Scottish lakes,
Tacoma Narrows bridge collapse explained with abstract
phase-space maps,
Some x-ray slides, a music score, Minard's Napoleanic war:
The most exciting frontier is charting what's already here."
-- xkcd
--
Help protect Wikipedia. Donate now:
http://wikimediafoundation.org/wiki/Support_Wikipedia/en
[[alternative HTML version deleted]]
______________________________________________
R-help@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.
______________________________________________
R-help@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.