I've now committed fixes in R-patched and R-devel.

There is one consequence: data.matrix() was testing for numeric columns by unlist(lapply(x, is.numeric)) and so incorrectly treating Date and POSIXct columns as numeric (which we had decided they were not). This affects package gvlma.

data.matrix() is now working as documented, but as we have an exception for factors, do we also want exceptions for Date and POSIXct?

On Wed, 30 Jul 2008, Martin Maechler wrote:

"BDR" == Prof Brian Ripley <[EMAIL PROTECTED]>
    on Wed, 30 Jul 2008 13:29:38 +0100 (BST) writes:

   BDR> On Wed, 30 Jul 2008, Martin Maechler wrote:
   >>>>>>> "RobMcG" == McGehee, Robert <[EMAIL PROTECTED]>
   >>>>>>> on Tue, 29 Jul 2008 15:40:37 -0400 writes:
   >>
   RobMcG> FYI,
   RobMcG> I've tried posting the below message twice to the bug tracking 
system,
   >>
   >> [....... r-bugs problems discussed in a separate thread ....]
   >>
   >>
   >>
   RobMcG> R-developers,
   RobMcG> The results below are inconsistent. From the documentation for
   RobMcG> is.numeric, I expect FALSE in both cases.
   >>
   >> >> x <- data.frame(dt=Sys.Date())
   >> >> is.numeric(x$dt)
   RobMcG> [1] FALSE
   >> >> sapply(x, is.numeric)
   RobMcG> dt
   RobMcG> TRUE
   >>
   RobMcG> ## Yet, sapply seems aware of the Date class
   >> >> sapply(x, class)
   RobMcG> dt
   RobMcG> "Date"
   >>
   >> Yes, thanks a lot, Robert, for the report.
   >>
   >> That *is* a bug somewhere in the .Internal(lapply(...)) C code,
   >> when S3 dispatch of primitive functions should happen.

   BDR> The bug is in do_is, which uses CHAR(PRINTNAME(CAR(call))), and when
   BDR> called from lapply that gives "FUN" not "is.numeric".  The root cause is
   BDR> the following comment

   BDR> FUN = CADR(args);  /* must be unevaluated for use in e.g. bquote */

   BDR> and hence that the function in the *call* passed to do_is can be
   BDR> unevaluated.

aah!  I see.

   >> Here's an R scriptlet exposing a 2nd example
   >>
   >> ### lapply(list, FUN)
   >> ### ------------------ seems to sometimes fail for
   >> ### .Primitive S3-generic functions
   >>
   >> (ds <- seq(from=Sys.Date(), by=1, length=4))
   >> ##[1] "2008-07-30" "2008-07-31" "2008-08-01" "2008-08-02"
   >> ll <- list(d=ds)
   >> lapply(list(d=ds), round)
   >> ## -> Error in lapply(list(d = ds), round) : dispatch error


   BDR> And that's a separate issue, in DispatchGroup which states that 
arguments
   BDR> have been evaluated (true) but the 'call' from lapply gives the
   BDR> unevaluated arguments and so there is a mismatch.

yes, I too found that this was a separate issue, the latter
one being new since version 2.7.0

   BDR> I'm testing fixes for both.

Excellent!
Martin


   >> ## or -- related to bug report by Robert McGehee on R-devel, on 
2008-07-29:
   >> sapply(list(d=ds), is.numeric)
   >> ## TRUE
   >>
   >> ## in spite of
   >> is.numeric(`[[`(ll,1)) ## FALSE , because of
   >> is.numeric.date
   >>
   >> ## or
   >> round(`[[`(ll,1))
   >> ## [1] "2008-07-30" "2008-07-31" "2008-08-01" "2008-08-02"
   >>
   >> ##-----------------------------
   >>
   >> But I'm currently too much tied up with other duties,
   >> to find and test bug-fix.
   >>
   >> Martin Maechler, ETH Zurich and R-Core Team

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


--
Brian D. Ripley,                  [EMAIL PROTECTED]
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to