[Rd] S4 problems

Martin Morgan mtmorgan at fhcrc.org
Tue Feb 15 15:24:20 CET 2011


On 02/14/2011 11:54 PM, robin hankin wrote:
> Hello everybody
> 
> [R-2.12.1]
> 
> I am having difficulty dealing with Oarray objects.
> I have a generic function, call it foo(), and I wish
> to define  a method for Oarray objects.
> 
> I do not have or want a method for regular arrays [actually,
> I want to coerce to an Oarray, and give a warning].
> 
> But setMethod() does not behave as desired, giving
> an error message when I try to define a method for
> Oarray objects.
> 
> Also, if I define a method for array objects, this does not
> give an error message, but neither does it behave as desired,
> as the method is not found when  passing an Oarray object
> to foo().
> 
> 
> LE110:~/packages% R --vanilla --quiet
>> library(Oarray)
>> setGeneric("foo",function(x){standardGeneric("foo")})
> [1] "foo"
>>  setMethod("foo","Oarray",function(x){x})
> in method for ‘foo’ with signature ‘"Oarray"’: no definition for class "Oarray"
> [1] "foo"
>> setMethod("foo","array",function(x){x})
> [1] "foo"
>> a <- Oarray(0,2:3)
>> is.array(a)
> [1] TRUE
>> foo(a)
> Error in function (classes, fdef, mtable)  :
>   unable to find an inherited method for function "foo", for signature "Oarray"
> 
> Three questions:
> 
> Why does the first call to setMethod() give an error message?

Oarray is an S3 class, so

setOldClass("Oarray")

before defining methods on the class.

Hope that helps,

Martin

> Why does (a) not find the method defined for arrays, even though 'a'
> is an array?
> How can I make "foo(a)" behave as desired when 'a' is an object of
> class 'Oarray'?
> 
> 
> 
> 
> 
> 


-- 
Computational Biology
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N. PO Box 19024 Seattle, WA 98109

Location: M1-B861
Telephone: 206 667-2793



More information about the R-devel mailing list