On Thu, 14 Mar 2024 10:41:54 +0100 Martin Maechler <maech...@stat.math.ethz.ch> wrote:
> Anybody trying S7 examples and see if they work w/o producing > wrong warnings? It looks like this is not applicable to S7. If I overwrite as.data.frame with a newly created S7 generic, it fails to dispatch on existing S3 classes: new_generic('as.data.frame', 'x')(factor(1)) # Error: Can't find method for `as.data.frame(S3<factor>)`. But there is no need to overwrite the generic, because S7 classes should work with existing S3 generics: foo <- new_class('foo', parent = class_double) method(as.data.frame, foo) <- function(x) structure( # this is probably not generally correct list(x), names = deparse1(substitute(x)), row.names = seq_len(length(x)), class = 'data.frame' ) str(as.data.frame(foo(pi))) # 'data.frame': 1 obs. of 1 variable: # $ x: <foo> num 3.14 So I think that is nothing to break because S7 methods for as.data.frame will rely on S3 for dispatch. > > The patch passes make check-devel, but I'm not sure how to safely > > put setGeneric('as.data.frame'); as.data.frame(factor(1:10)) in a > > regression test. > > {What's the danger/problem? we do have "similar" tests in both > src/library/methods/tests/*.R > tests/reg-S4.R > > -- maybe we can discuss bi-laterally (or here, as you prefer) > } This might be educational for other people wanting to add a regression test to their patch. I see that tests/reg-tests-1e.R is already running under options(warn = 2), so if I add the following near line 750 ("Deprecation of *direct* calls to as.data.frame.<someVector>")... # Should not warn for a call from a derivedDefaultMethod to the raw # S3 method -- implementation detail of S4 dispatch setGeneric('as.data.frame') as.data.frame(factor(1)) ...then as.data.frame will remain an S4 generic. Should the test then rm(as.data.frame) and keep going? (Or even keep the S4 generic?) Is there any hidden state I may be breaking for the rest of the test this way? The test does pass like this, so this may be worrying about nothing. -- Best regards, Ivan ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel