Skip to content
Back to formatted view

Raw Message

Message-ID: <CAOQ5NyfK-67N6yHgdP-_Nr8=i34d7zkiR9J6OYFnCtN6_A=fjA@mail.gmail.com>
Date: 2016-04-19T02:10:23Z
From: Michael Lawrence
Subject: S3 dispatch for S4 subclasses only works if variable "extends" is accessible from global environment
In-Reply-To: <57156F2B.4000205@ivt.baug.ethz.ch>

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.mueller at 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 at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>