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.

Reply via email to