>>>>> Michael Lawrence <lawrence.mich...@gene.com> >>>>> on Tue, 19 Apr 2016 05:34:41 -0700 writes:
> Not sure why R_has_methods_attached() exists. Maybe Martin could shed > some light on that. It was to support (via 'classgets' in attrib.c) a very fast class(.) <- "<newclass>" for S4 objects... to be used in setAs(......) methods, e.g., for the Matrix package where you have many classes with most slots the same, and I would have wanted to be clearly faster than calling new("<newclass>", x=.., y=.., z=.., u=..,v=.. ..) But that experiment has not finalized, maybe because it was a too hackish idea. I may have started writing that at a time where we still mostly thought that it was not possible to have a working S4 R "environment" where methods was only loaded but not attached. In conclusion, you can consider R_has_methods_attached as non-existent. > On Mon, Apr 18, 2016 at 11:50 PM, Kirill Müller > <kirill.muel...@ivt.baug.ethz.ch> wrote: >> Thanks for looking into it, your approach sounds good to me. See also >> R_has_methods_attached() >> (https://github.com/wch/r-source/blob/42ecf5f492a005f5398cbb4c9becd4aa5af9d05c/src/main/objects.c#L258-L265). >> >> I'm fine with Rscript not loading "methods", as long as everything works >> properly with "methods" loaded but not attached. >> >> >> -Kirill >> >> >> >> On 19.04.2016 04:10, Michael Lawrence wrote: >>> >>> Right, the methods package is not attached by default when running R >>> with Rscript. We should probably remove that special case, as it >>> mostly just leads to confusion, but that won't happen immediately. >>> >>> For now, the S4_extends() should probably throw an error when the >>> methods namespace is not loaded. And the check should be changed to >>> directly check whether R_MethodsNamespace has been set to something >>> other than the default (R_GlobalEnv). Agreed? >>> >>> On Mon, Apr 18, 2016 at 4:35 PM, Kirill Müller >>> <kirill.muel...@ivt.baug.ethz.ch> wrote: >>>> >>>> Scenario: An S3 method is declared for an S4 base class but called for an >>>> instance of a derived class. >>>> >>>> Steps to reproduce: >>>> >>>>> Rscript -e "test <- function(x) UseMethod('test', x); test.Matrix <- >>>>> function(x) 'Hi'; MatrixDispatchTest::test(Matrix::Matrix())" >>>> >>>> Error in UseMethod("test", x) : >>>> no applicable method for 'test' applied to an object of class >>>> "lsyMatrix" >>>> Calls: <Anonymous> >>>> 1: MatrixDispatchTest::test(Matrix::Matrix()) >>>> >>>>> Rscript -e "extends <- 42; test <- function(x) UseMethod('test', x); >>>>> test.Matrix <- function(x) 'Hi'; >>>>> MatrixDispatchTest::test(Matrix::Matrix())" >>>> >>>> [1] "Hi" >>>> >>>> To me, it looks like a sanity check in line 655 of src/main/attrib.c is >>>> making wrong assumptions, but there might be other reasons. >>>> >>>> (https://github.com/wch/r-source/blob/780021752eb83a71e2198019acf069ba8741103b/src/main/attrib.c#L655-L656) >>>> >>>> Same behavior in R 3.2.4, R 3.2.5 and R-devel r70420. >>>> >>>> >>>> Best regards >>>> >>>> Kirill >>>> >>>> ______________________________________________ >>>> R-devel@r-project.org mailing list >>>> https://stat.ethz.ch/mailman/listinfo/r-devel >>>> >> >> > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel