From rgentlem at jimmy.harvard.edu  Wed Aug  6 02:26:02 2003
From: rgentlem at jimmy.harvard.edu (Robert Gentleman)
Date: Wed Aug  6 07:26:01 2003
Subject: [Rd] S4 methods bug in naming of slots (PR#3665)
In-Reply-To: <200308060426.h764QrJH020539@pubhealth.ku.dk>;
	from statwy@stat.nus.edu.sg on Wed, Aug 06, 2003 at 06:26:53AM
	+0200
References: <200308060426.h764QrJH020539@pubhealth.ku.dk>
Message-ID: <20030806012602.D22791@jimmy.harvard.edu>

On Wed, Aug 06, 2003 at 06:26:53AM +0200, statwy@stat.nus.edu.sg wrote:
> Hello,
> 
> I am using R 1.7.1 on a Redhat Linux machine, version 7.3.
> The following works fine: 
> 
> setClass("ok", representation(
>       "A"       = "matrix",
>       "Cmatrix" = "matrix"))
> 
> new("ok",
>     "A" = diag(4),
>     "Cmatrix" = diag(4))
> 
> But the following doesn't work:
> 
> setClass("notok", representation(
>       "A" = "matrix",
>       "C" = "matrix"))
> 
> new("notok",
>     "A" = diag(4),
>     "C" = diag(4))
> 
> It says
> 
> > new("notok",
> +    "A" = diag(4),
> +    "C" = diag(4))
> Error in methodsPackageMetaName("C", name) :
>         The name of the object (e.g,. a class or generic function) to find in the meta-data must be a single string (got an object of class "matrix")
> 
> Can this bug be fixed? It doesn't work in the Windows version either. 
> Thanks in advance.

 It is not really a bug. If you look at the definition of the function
 new you will see that its first argument is named Class. The argument
 you want to use for the C slot gets matched to the Class argument -
 it isn't a class and you get an error message. So, to avoid
 the partial matching algorithm for matching fucntions arguments you
 would need to go:
 
  new(Class="notok", A=diag(4), C=diag(4))

 which does work. Note also, no need for quotes around A and C.

 Robert


> 
> Thomas
> 
> ______________________________________________
> R-devel@stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-devel

-- 
+---------------------------------------------------------------------------+
| Robert Gentleman                 phone : (617) 632-5250                   |
| Associate Professor              fax:   (617)  632-2444                   |
| Department of Biostatistics      office: M1B20                            |
| Harvard School of Public Health  email: rgentlem@jimmy.harvard.edu        |
+---------------------------------------------------------------------------+


[Rd] S4 methods bug in naming of slots (PR#3665)
Robert Gentleman