From rksh1 at cam.ac.uk  Thu Dec  3 12:04:03 2009
From: rksh1 at cam.ac.uk (Robin Hankin)
Date: Thu, 03 Dec 2009 11:04:03 +0000
Subject: [Rd] S4 and head() problems
Message-ID: <4B179B23.3030903@cam.ac.uk>

Hi

I am having difficulty defining an S4 method for head() and tail().

I can't quite provide minimal self-contained code
because the problem appears to require the whole corpus
of my package; and there also appears to be a difference
between sourcing the lines directly, and having them
installed in a package.

The lines in question (I think) are:

setClass("mdm",
         representation = representation(
           xold  = "matrix",
           types = "factor"
           )
         )

"mdm" <- function(xold, types){
  new("mdm", xold=xold, types=types)
}

setGeneric("head",function(x,...){standardGeneric("head")})
setMethod("head",signature="mdm",function(x,n=6,...){
  mdm(head(x at xold,n=n,...) , types=factor(head(x at types,n=n,...)))
} )


If the above lines are part of the package source, and I install the package
then sometimes  I get errors like

 > head(toy_mm())
Error in function (classes, fdef, mtable)  :
  unable to find an inherited method for function "head", for signature 
"matrix"
 >

and sometimes it works as desired.

Why should head() not be able to take the first few lines of a matrix?
It seems to be "forgetting" that head.matrix() exists.

Can anyone give me some pointers for debugging this problem?

rksh







-- 
Robin K. S. Hankin
Uncertainty Analyst
University of Cambridge
19 Silver Street
Cambridge CB3 9EP
01223-764877



[Rd] S4 and head() problems
Robin Hankin