William Dunlap
2019-May-21 17:38 UTC
[Rd] print.<strorageMode>() not called when autoprinting
It also is a problem with storage.modes "integer" and "complex": 3.6.0> print.integer <- function(x,...) "integer vector" 3.6.0> 1:10 [1] 1 2 3 4 5 6 7 8 9 10 3.6.0> print(1:10) [1] "integer vector" 3.6.0> 3.6.0> print.complex <- function(x, ...) "complex vector" 3.6.0> 1+2i [1] 1+2i 3.6.0> print(1+2i) [1] "complex vector" Bill Dunlap TIBCO Software wdunlap tibco.com On Tue, May 21, 2019 at 9:31 AM Martin Maechler <maechler at stat.math.ethz.ch> wrote:> >>>>> William Dunlap via R-devel > >>>>> on Thu, 16 May 2019 11:56:45 -0700 writes: > > > In R-3.6.0 autoprinting was changed so that print methods for the > storage > > modes are not called when there is no explicit class attribute. > E.g., > > > % R-3.6.0 --vanilla --quiet > >> print.function <- function(x, ...) { cat("Function with argument > list "); > > cat(sep="\n ", head(deparse(args(x)), -1)); invisible(x) } > >> f <- function(x, ...) { sum( x * seq_along(x) ) } > >> f > > function(x, ...) { sum( x * seq_along(x) ) } > >> print(f) > > Function with argument list function (x, ...) > > > Previous to R-3.6.0 autoprinting did call such methods > > % R-3.5.3 --vanilla --quiet > >> print.function <- function(x, ...) { cat("Function with argument > list "); > > cat(sep="\n ", head(deparse(args(x)), -1)); invisible(x) } > >> f <- function(x, ...) { sum( x * seq_along(x) ) } > >> f > > Function with argument list function (x, ...) > >> print(f) > > Function with argument list function (x, ...) > > > Was this intentional? > > No, it was not. ... and I've been the one committing the wrong change. > > ... Related to the NEWS entries which start > > "Changes in print.*() ...." > > Thank you Bill, for reporting.... > > It's amazing this has not been detected earlier by anybody. > > I think it is *only* for functions, not general > print.<storagemode>() as you were suggesting - right? > > Martin >[[alternative HTML version deleted]]
Lionel Henry
2019-May-21 17:50 UTC
[Rd] print.<strorageMode>() not called when autoprinting
FWIW it was the intention of the patch to make printing of unclassed functions consistent with other base types. This was documented in the "patch 3" section: https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17398 I think we need a general way to customise auto-printing for base types and even classed objects as that'd be useful for both users and IDEs. However S3 dispatch may not be optimal for this because it essentially requires polluting the global environment with print methods. Maybe it'd make sense to add getOption("autoprint") which should be set to a user- or environment- supplied function. That function would do the dispatch. I'd be happy to send a patch for this, if it makes sense. Best, Lionel> On 21 May 2019, at 13:38, William Dunlap via R-devel <r-devel at r-project.org> wrote: > > It also is a problem with storage.modes "integer" and "complex": > > 3.6.0> print.integer <- function(x,...) "integer vector" > 3.6.0> 1:10 > [1] 1 2 3 4 5 6 7 8 9 10 > 3.6.0> print(1:10) > [1] "integer vector" > 3.6.0> > 3.6.0> print.complex <- function(x, ...) "complex vector" > 3.6.0> 1+2i > [1] 1+2i > 3.6.0> print(1+2i) > [1] "complex vector" > > Bill Dunlap > TIBCO Software > wdunlap tibco.com > > > On Tue, May 21, 2019 at 9:31 AM Martin Maechler <maechler at stat.math.ethz.ch> > wrote: > >>>>>>> William Dunlap via R-devel >>>>>>> on Thu, 16 May 2019 11:56:45 -0700 writes: >> >>> In R-3.6.0 autoprinting was changed so that print methods for the >> storage >>> modes are not called when there is no explicit class attribute. >> E.g., >> >>> % R-3.6.0 --vanilla --quiet >>>> print.function <- function(x, ...) { cat("Function with argument >> list "); >>> cat(sep="\n ", head(deparse(args(x)), -1)); invisible(x) } >>>> f <- function(x, ...) { sum( x * seq_along(x) ) } >>>> f >>> function(x, ...) { sum( x * seq_along(x) ) } >>>> print(f) >>> Function with argument list function (x, ...) >> >>> Previous to R-3.6.0 autoprinting did call such methods >>> % R-3.5.3 --vanilla --quiet >>>> print.function <- function(x, ...) { cat("Function with argument >> list "); >>> cat(sep="\n ", head(deparse(args(x)), -1)); invisible(x) } >>>> f <- function(x, ...) { sum( x * seq_along(x) ) } >>>> f >>> Function with argument list function (x, ...) >>>> print(f) >>> Function with argument list function (x, ...) >> >>> Was this intentional? >> >> No, it was not. ... and I've been the one committing the wrong change. >> >> ... Related to the NEWS entries which start >> >> "Changes in print.*() ...." >> >> Thank you Bill, for reporting.... >> >> It's amazing this has not been detected earlier by anybody. >> >> I think it is *only* for functions, not general >> print.<storagemode>() as you were suggesting - right? >> >> Martin >> > > [[alternative HTML version deleted]] > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel
William Dunlap
2019-May-21 19:11 UTC
[Rd] print.<strorageMode>() not called when autoprinting
Letting a user supply the autoprint function would be nice also. In a way you can already do that, using addTaskCallback(), but that doesn't let you suppress the standard autoprinting. Having the default autoprinting do its own style of method dispatch doesn't seem right. Bill Dunlap TIBCO Software wdunlap tibco.com On Tue, May 21, 2019 at 10:50 AM Lionel Henry <lionel at rstudio.com> wrote:> FWIW it was the intention of the patch to make printing of unclassed > functions consistent with other base types. This was documented in the > "patch 3" section: > > https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17398 > > I think we need a general way to customise auto-printing for base types > and even classed objects as that'd be useful for both users and IDEs. > > However S3 dispatch may not be optimal for this because it essentially > requires polluting the global environment with print methods. Maybe > it'd make sense to add getOption("autoprint") which should be set to > a user- or environment- supplied function. That function would do the > dispatch. I'd be happy to send a patch for this, if it makes sense. > > Best, > Lionel > > > > On 21 May 2019, at 13:38, William Dunlap via R-devel < > r-devel at r-project.org> wrote: > > > > It also is a problem with storage.modes "integer" and "complex": > > > > 3.6.0> print.integer <- function(x,...) "integer vector" > > 3.6.0> 1:10 > > [1] 1 2 3 4 5 6 7 8 9 10 > > 3.6.0> print(1:10) > > [1] "integer vector" > > 3.6.0> > > 3.6.0> print.complex <- function(x, ...) "complex vector" > > 3.6.0> 1+2i > > [1] 1+2i > > 3.6.0> print(1+2i) > > [1] "complex vector" > > > > Bill Dunlap > > TIBCO Software > > wdunlap tibco.com > > > > > > On Tue, May 21, 2019 at 9:31 AM Martin Maechler < > maechler at stat.math.ethz.ch> > > wrote: > > > >>>>>>> William Dunlap via R-devel > >>>>>>> on Thu, 16 May 2019 11:56:45 -0700 writes: > >> > >>> In R-3.6.0 autoprinting was changed so that print methods for the > >> storage > >>> modes are not called when there is no explicit class attribute. > >> E.g., > >> > >>> % R-3.6.0 --vanilla --quiet > >>>> print.function <- function(x, ...) { cat("Function with argument > >> list "); > >>> cat(sep="\n ", head(deparse(args(x)), -1)); invisible(x) } > >>>> f <- function(x, ...) { sum( x * seq_along(x) ) } > >>>> f > >>> function(x, ...) { sum( x * seq_along(x) ) } > >>>> print(f) > >>> Function with argument list function (x, ...) > >> > >>> Previous to R-3.6.0 autoprinting did call such methods > >>> % R-3.5.3 --vanilla --quiet > >>>> print.function <- function(x, ...) { cat("Function with argument > >> list "); > >>> cat(sep="\n ", head(deparse(args(x)), -1)); invisible(x) } > >>>> f <- function(x, ...) { sum( x * seq_along(x) ) } > >>>> f > >>> Function with argument list function (x, ...) > >>>> print(f) > >>> Function with argument list function (x, ...) > >> > >>> Was this intentional? > >> > >> No, it was not. ... and I've been the one committing the wrong change. > >> > >> ... Related to the NEWS entries which start > >> > >> "Changes in print.*() ...." > >> > >> Thank you Bill, for reporting.... > >> > >> It's amazing this has not been detected earlier by anybody. > >> > >> I think it is *only* for functions, not general > >> print.<storagemode>() as you were suggesting - right? > >> > >> Martin > >> > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-devel at r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-devel > >[[alternative HTML version deleted]]
Reasonably Related Threads
- print.<strorageMode>() not called when autoprinting
- print.<strorageMode>() not called when autoprinting
- print.<strorageMode>() not called when autoprinting
- print.<strorageMode>() not called when autoprinting
- print.<strorageMode>() not called when autoprinting