[Rd] S3 method dispatch for methods in local environments
Martin Maechler
m@ech|er @end|ng |rom @t@t@m@th@ethz@ch
Tue May 12 21:05:15 CEST 2020
>>>>> Viechtbauer, Wolfgang (SP)
>>>>> on Tue, 12 May 2020 18:05:32 +0000 writes:
> Dear All,
> In R 3.6.3 (and earlier), method dispatch used to work for methods stored in local environments that are attached to the search path. For example:
> myfun <- function(y) {
> out <- list(y=y)
> class(out) <- "myclass"
> return(out)
> }
> print.myclass <- function(x, ...) print(formatC(x$y, format="f", digits=5))
> myfun(1:4)
> # prints: [1] "1.00000" "2.00000" "3.00000" "4.00000"
> rm(print.myclass)
> myenv <- new.env()
> myenv$print.myclass <- local(function(x, ...) print(formatC(x$y, format="f", digits=5)), myenv)
> attach(myenv)
> myfun(1:4)
> # still prints: [1] "1.00000" "2.00000" "3.00000" "4.00000"
> But since R 4.0.0, this no longer words and the above prints:
> $y
> [1] 1 2 3 4
> attr(,"class")
> [1] "myclass"
> Is this intended?
yes, most probably, unless
> And is there a way to still make this work?
Using the new
.S3method(<generic>, <class>, <method_function>)
had been intended as substitute. Can you try it with your
attached-environment (which makes sense!) approach ?
Best,
Martin
More information about the R-devel
mailing list