james.foadi at diamond.ac.uk
2010-Jul-07 15:09 UTC
[Rd] how to define method for "+" function in a new class
Dear R developers, I have a new class, which I called "Molecule", and have tried to define a "+" operation for 2 objects of this class. This is what I have written so far, although the method is not complete (I'm trying to look at it at intermediate stages): setMethod( f=3D"+", signature(x=3D"Molecule",y=3D"Molecule"), definition=3Dfunction(x,y,...) { # Check both objects are correct checkMolecule(x) checkMolecule(y) # Extract chains information ch1 <- getMoleculeChains(x) ch2 <- getMoleculeChains(y) union_ch <- unique(c(ch1,ch2)) not_used <- .ALPHABET for (i in seq(along =3D union_ch)) { idx <- which(not_used !=3D union_ch[i]) if (length(idx) !=3D 0) not_used <- not_used[idx] } return(not_used) } ) The definition of class Molecule is included earlier in the same file. When I source it, I get the following error message: Error in match.call(fun, fcall) :=20 unused argument(s) (x =3D "Molecule", y =3D "Molecule") I can't see what's wrong in my method definition. Can anyone help me with this? J Dr James Foadi PhD Membrane Protein Laboratory (MPL) Diamond Light Source Ltd Diamond House Harewell Science and Innovation Campus Chilton, Didcot Oxfordshire OX11 0DE Email : james.foadi at diamond.ac.uk Alt Email: j.foadi at imperial.ac.uk -- This e-mail and any attachments may contain confidential...{{dropped:8}}
james.foadi at diamond.ac.uk
2010-Jul-07 15:16 UTC
[Rd] how to define method for "+" function in a new class
I don't know why a "3D" appears instead of a "(". Please, interpret a "( whenever you see a "3D". J Dr James Foadi PhD Membrane Protein Laboratory (MPL) Diamond Light Source Ltd Diamond House Harewell Science and Innovation Campus Chilton, Didcot Oxfordshire OX11 0DE Email : james.foadi at diamond.ac.uk Alt Email: j.foadi at imperial.ac.uk -----Original Message----- From: r-devel-bounces at r-project.org on behalf of james.foadi at diamond.ac.uk Sent: Wed 07/07/2010 16:09 To: r-devel at r-project.org Subject: [Rd] how to define method for "+" function in a new class Dear R developers, I have a new class, which I called "Molecule", and have tried to define a "+" operation for 2 objects of this class. This is what I have written so far, although the method is not complete (I'm trying to look at it at intermediate stages): setMethod( f=3D"+", signature(x=3D"Molecule",y=3D"Molecule"), definition=3Dfunction(x,y,...) { # Check both objects are correct checkMolecule(x) checkMolecule(y) # Extract chains information ch1 <- getMoleculeChains(x) ch2 <- getMoleculeChains(y) union_ch <- unique(c(ch1,ch2)) not_used <- .ALPHABET for (i in seq(along =3D union_ch)) { idx <- which(not_used !=3D union_ch[i]) if (length(idx) !=3D 0) not_used <- not_used[idx] } return(not_used) } ) The definition of class Molecule is included earlier in the same file. When I source it, I get the following error message: Error in match.call(fun, fcall) :=20 unused argument(s) (x =3D "Molecule", y =3D "Molecule") I can't see what's wrong in my method definition. Can anyone help me with this? J Dr James Foadi PhD Membrane Protein Laboratory (MPL) Diamond Light Source Ltd Diamond House Harewell Science and Innovation Campus Chilton, Didcot Oxfordshire OX11 0DE Email : james.foadi at diamond.ac.uk Alt Email: j.foadi at imperial.ac.uk -- This e-mail and any attachments may contain confidential...{{dropped:16}}
Martin Morgan
2010-Jul-07 15:43 UTC
[Rd] how to define method for "+" function in a new class
On 07/07/2010 08:09 AM, james.foadi at diamond.ac.uk wrote:> > > Dear R developers, > I have a new class, which I called "Molecule", and have tried to define > a "+" operation for 2 objects of this class. > This is what I have written so far, although the method is not complete > (I'm trying to look at it at intermediate stages): > > setMethod( > f=3D"+", > signature(x=3D"Molecule",y=3D"Molecule"), > definition=3Dfunction(x,y,...) > { > # Check both objects are correct > checkMolecule(x) > checkMolecule(y) > > # Extract chains information > ch1 <- getMoleculeChains(x) > ch2 <- getMoleculeChains(y) > union_ch <- unique(c(ch1,ch2)) > not_used <- .ALPHABET > for (i in seq(along =3D union_ch)) > { > idx <- which(not_used !=3D union_ch[i]) > if (length(idx) !=3D 0) not_used <- not_used[idx] > } > > return(not_used) > } > ) > > > The definition of class Molecule is included earlier in the same file. > When I source it, I get the following error message: > > Error in match.call(fun, fcall) :=20 > unused argument(s) (x =3D "Molecule", y =3D "Molecule")If I> getGeneric("+")standardGeneric for "+" defined from package "base" belonging to group(s): Arith function (e1, e2) standardGeneric("+", .Primitive("+")) <environment: 0xb432f8> Methods may be defined for arguments: e1, e2 Use showMethods("+") for currently available ones. I see that the generic is defined to take two arguments e1 and e2. So setMethod("+", c("Molecule", "Molecule"), function(e1, e2) { ## ... }) but actually here it might often pay to discover ?GroupGenericFunctions and end up with something like setClass("A", representation=representation(x="numeric")) setMethod("Arith", c("A", "A"), function(e1, e2) { new(class(e1), x=callGeneric(e1=e1 at x, e2=e2 at x)) }) and then> new("A", x=1:5) + new("A", x=5:1)An object of class "A" Slot "x": [1] 6 6 6 6 6 but also> new("A", x=1:5) * new("A", x=5:1)An object of class "A" Slot "x": [1] 5 8 9 8 5 Martin> > > I can't see what's wrong in my method definition. Can anyone help me > with this? > > J > > Dr James Foadi PhD > Membrane Protein Laboratory (MPL) > Diamond Light Source Ltd > Diamond House > Harewell Science and Innovation Campus > Chilton, Didcot > Oxfordshire OX11 0DE > > Email : james.foadi at diamond.ac.uk > Alt Email: j.foadi at imperial.ac.uk >-- Martin Morgan Computational Biology / Fred Hutchinson Cancer Research Center 1100 Fairview Ave. N. PO Box 19024 Seattle, WA 98109 Location: Arnold Building M1 B861 Phone: (206) 667-2793