Should it work on traced functions ? As it is now it doesn't.
Best, Antoine Le jeu. 20 août 2020 à 09:58, Kurt Hornik <kurt.hor...@wu.ac.at> a écrit : > >>>>> Gabriel Becker writes: > > > I added that so I can look at the proposed fix and put it or something > > similar in bugzilla for review final review. > > > Apologies for the oversight. > > Fixed now with > > - while(as.character(bdexpr[[1L]]) == "{") > + while(is.call(bdexpr) && (as.character(bdexpr[[1L]]) == "{")) > > (the suggested fix does not work on things like > foo <- function(x) {{ x }} > ...) > > Best > -k > > > ~G > > > On Wed, Aug 19, 2020 at 3:40 PM Antoine Fabri <antoine.fa...@gmail.com> > > wrote: > > >> Dear R-devel, > >> > >> utils::isS3stdGeneric tries to subset the body of the function it's fed, > >> primitives don't like that because they don't have a body, identity > doesn't > >> like it either because it's body is a symbol. > >> > >> According to the doc, any function is a legal input. > >> > >> See below: > >> > >> identity > >> #> function (x) > >> #> x > >> #> <bytecode: 0x0000000013d6da28> > >> #> <environment: namespace:base> > >> > >> max > >> #> function (..., na.rm = FALSE) .Primitive("max") > >> > >> isS3stdGeneric(identity) > >> #> Error in bdexpr[[1L]]: objet de type 'symbol' non indiçable > >> > >> isS3stdGeneric(max) > >> #> Error in while (as.character(bdexpr[[1L]]) == "{") bdexpr <- > >> bdexpr[[2L]]: l'argument est de longueur nulle > >> > >> Here is a simple fix : > >> > >> isS3stdGeneric <- function(f) { > >> { > >> bdexpr <- body(f) > >> if(is.null(bdexpr) || !is.call(bdexpr)) return(FALSE) > >> while (as.character(bdexpr[[1L]]) == "{") bdexpr <- bdexpr[[2L]] > >> ret <- is.call(bdexpr) && identical(bdexpr[[1L]], as.name > >> ("UseMethod")) > >> if (ret) > >> names(ret) <- bdexpr[[2L]] > >> ret > >> } > >> } > >> > >> isS3stdGeneric(identity) > >> #> [1] FALSE > >> isS3stdGeneric(max) > >> #> [1] FALSE > >> > >> Best, > >> > >> Antoine > >> > >> [[alternative HTML version deleted]] > >> > >> ______________________________________________ > >> R-devel@r-project.org mailing list > >> https://stat.ethz.ch/mailman/listinfo/r-devel > >> > > > [[alternative HTML version deleted]] > > > ______________________________________________ > > R-devel@r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel > [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel