From hp@ge@ @ending from fredhutch@org  Wed May 16 02:25:47 2018
From: hp@ge@ @ending from fredhutch@org (=?UTF-8?B?SGVydsOpIFBhZ8Oocw==?=)
Date: Tue, 15 May 2018 17:25:47 -0700
Subject: [Rd] Dispatch mechanism seems to alter object before calling method
 on it
Message-ID: <f4a42b94-f62d-29a1-723a-159aec52b580@fredhutch.org>

Hi,

This was quite unexpected:

   setGeneric("foo", function(x) standardGeneric("foo"))

   setMethod("foo", "vector", identity)

   foo(matrix(1:12, ncol=3))
   # [1]  1  2  3  4  5  6  7  8  9 10 11 12

   foo(array(1:24, 4:2))
   # [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 
22 23 24

If I define a method for array objects, things work as expected though:

   setMethod("foo", "array", identity)

   foo(matrix(1:12, ncol=3))
   #      [,1] [,2] [,3]
   # [1,]    1    5    9
   # [2,]    2    6   10
   # [3,]    3    7   11
   # [4,]    4    8   12

So, luckily, I have a workaround.

But shouldn't the dispatch mechanism stay away from the business of
altering objects before passed to it?

Thanks,
H.

-- 
Herv? Pag?s

Program in Computational Biology
Division of Public Health Sciences
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N, M1-B514
P.O. Box 19024
Seattle, WA 98109-1024

E-mail: hpages at fredhutch.org
Phone:  (206) 667-5791
Fax:    (206) 667-1319



[Rd] Dispatch mechanism seems to alter object before calling method on it
=?UTF-8?B?SGVydsOpIFBhZ8Oocw==?=