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