From maechler at stat.math.ethz.ch  Fri Mar  4 14:38:14 2016
From: maechler at stat.math.ethz.ch (Martin Maechler)
Date: Fri, 4 Mar 2016 14:38:14 +0100
Subject: [Rd] as.vector in R-devel loaded 3/3/2016
In-Reply-To: <BN4PR12MB0883CA6ED32FC60B5F8CC902E1BE0@BN4PR12MB0883.namprd12.prod.outlook.com>
References: <CA+_rFBK8c5gXFm41StNPDiBYTW=uLXvj5d4cGzpfi9gdv-mW7A@mail.gmail.com>
	<CA+_rFBJbtEw47Qq-yfs54E7AwgX8+HK3FcXL3a7z+coDA=-KeQ@mail.gmail.com>
	<CB88A7FF-6C3D-400A-A086-6C6E5E75B507@gmail.com>
	<22233.27661.347312.341398@stat.math.ethz.ch>
	<BN4PR12MB0883CA6ED32FC60B5F8CC902E1BE0@BN4PR12MB0883.namprd12.prod.outlook.com>
Message-ID: <22233.36806.752001.689591@stat.math.ethz.ch>

>>>>> Morgan, Martin <Martin.Morgan at RoswellPark.org>
>>>>>     on Fri, 4 Mar 2016 12:36:25 +0000 writes:

    > I see as below, where getGeneric and getMethod imply a different signature; the signature is mode="any" for both cases in R version 3.2.3 Patched (2016-01-28 r70038)I don't know how to reproduce Jeff's error, though.

    >> library(Matrix)

    >> as.vector
    > function (x, mode = "any") 
    > .Internal(as.vector(x, mode))
    > <bytecode: 0xe79f88>
    > <environment: namespace:base>

so note, that even though Matrix is loaded, as.vector did not
have to change to a standardGeneric(.).

"The" reason is list among the NEWS  for R-devel :

 o   S4 dispatch works within calls to .Internal(). This means explicit
     S4 generics are no longer needed for unlist and as.vector.  

so this change was very much on purpose and has had the goal to
keep as.vector() "as fast as possible".

*BUT* indeed, the "signature mismatch" you observe has been
an bogous side effect of the change, and it may even be the
reason why versions of Matrix built in different versions of R
(3.2.x  vs  3.3.x) are problematic.

I'll commit a fix for this buglet {which also affects 'unlist' !} 
in a moment.

So after all, I'm very glad for this thread!
Martin

    >> getGeneric("as.vector")
    > standardGeneric for "as.vector" defined from package "base"

    > function (x, mode) 
    > standardGeneric("as.vector")
    > <bytecode: 0x29a6bd0>
    > <environment: 0x299f988>
    > Methods may be defined for arguments: x
    > Use  showMethods("as.vector")  for currently available ones.
    >> selectMethod("as.vector", "ANY")
    > Method Definition (Class "internalDispatchMethod"):

    > function (x, mode) 
    > .Internal(as.vector(x, mode))
    > <environment: base>

    > Signatures:
    > x    
    > target  "ANY"
    > defined "ANY"
    >> sessionInfo()
    > R Under development (unstable) (2016-02-27 r70232)
    > Platform: x86_64-pc-linux-gnu (64-bit)
    > Running under: Ubuntu 14.04.4 LTS

    > locale:
    > [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
    > [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
    > [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
    > [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
    > [9] LC_ADDRESS=C               LC_TELEPHONE=C            
    > [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

    > attached base packages:
    > [1] stats     graphics  grDevices utils     datasets  methods   base     

    > other attached packages:
    > [1] Matrix_1.2-4

    > loaded via a namespace (and not attached):
    > [1] grid_3.3.0      lattice_0.20-33



[Rd] as.vector in R-devel loaded 3/3/2016
Martin Maechler