Skip to content
Back to formatted view

Raw Message

Message-ID: <4B179B23.3030903@cam.ac.uk>
Date: 2009-12-03T11:04:03Z
From: robin hankin
Subject: S4 and head() problems

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