sapply(Date, is.numeric)
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 <ripley at stats.ox.ac.uk>
on Wed, 30 Jul 2008 13:29:38 +0100 (BST) writes:
BDR> On Wed, 30 Jul 2008, Martin Maechler wrote:
>>>>>>> "RobMcG" == McGehee, Robert <Robert.McGehee at geodecapital.com> >>>>>>> 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 at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel
Brian D. Ripley, ripley at stats.ox.ac.uk 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