>>>>> "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