From: Martin Morgan <mtmorgan_at_fhcrc.org>

Date: Thu, 20 Mar 2008 16:43:25 -0700

> [1] 1 4

*>
*

> Error: argument "j" is missing, with no default

*> Error in callNextMethod() : error in evaluating a 'primitive' next method
*

*>
*

*> but with a matrix the two cases work:
*

> [1] 1 4

*> [1] 1
*

*>
*

> Can you please advise me a solution for this problem?

*> Thank you in advance for the help.
*

*>
*

*> Musa
*

*>
*

*> [[alternative HTML version deleted]]
*

*>
*

*> ______________________________________________
*

*> R-help_at_r-project.org mailing list
*

*> https://stat.ethz.ch/mailman/listinfo/r-help
*

*> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
*

*> and provide commented, minimal, self-contained, reproducible code.
*

Date: Thu, 20 Mar 2008 16:43:25 -0700

Musa Parmaksiz wrote:

> Hi R-Help,

*>
**> Please consider the following simple case: I have a class like
**>
**> setClass("myClass",
**> representation(x="matrix", y="character"))
**>
**> and I would like to use the method *"["* for a *myClass* objects (but
**> changing the default *drop* argument from TRUE to FALSE):
**>
**> setMethod("[","myClass",
**> function(x,i,j,...,drop=FALSE)
**> {
**> x <- x_at_x
**> callNextMethod()
*

I think you are hoping that x_at_x will be subsetted, and it appears that it is. But I think this is a bug. 'callNextMethod' without any arguments should be using the 'x' in the signature. This should result in an error like the one seen here

setMethod("[",

signature=signature(x="myClass"), function(x, i, j, ..., drop=FALSE) { callNextMethod() })

> test[1,]

Error in x[i = i, j = , ...] : object is not subsettable

Normally, to change the value of the variable 'seen' by the next method, one would expect to have to write something like

setMethod("[",

signature=signature(x="myClass"), function(x, i, j, ..., drop=FALSE) { callNextMethod(x=x_at_x, i=i, j=j, ..., drop=drop) })

You can now see how this is a little more complicated -- if j is missing in the original function call, then it can't be used in an assignment in callNextMethod. You'd have to write something like

setMethod("[",

signature=signature(x="myClass"), function(x, i, j, ..., drop=FALSE) { if (missing(i) && missing(j)) callNextMethod(x=x_at_x,,, ..., drop=drop) else if (missing(j)) callNextMethod(x=x_at_x, i=i, , ..., drop=drop) else if (missing(i)) callNextMethod(x=x_at_x, , j=j, ..., drop=drop) else callNextMethod(x=x_at_x, i=i, j=j, ..., drop=drop) })

or, since this is really an implementation that dispatches on the 'misssing'-ness of i, j, a series of methods like

setMethod("[",

signature=signature( x="myClass", i="ANY', j="missing") function(x, i, j, ..., drop=FALSE) { callNextMethod(x_at_x, i=i, , ..., drop=drop) })

Notice too how it is necessary to specify the argument list in quite an odd way, with a ',' for the 'missing' variable(s). This is because "[" is a so-called 'Primitive' function, and primitive functions match by position rather than the usual matching by name:

> matrix(1:20,5)[4,2]

[1] 9

> matrix(1:20,5)[j=4,i=2]

[1] 9

!

I read somewhere that when faced with learning complicated systems, otherwise intelligent people will develop wildly inaccurate stories to explain why the system 'works'. The above is my story.

Martin

> x<-as.myClass(x)

*> }
**> )
**>
**> suppose that *as.myClass* method has been already defined. Actually, all I
**> want is to pass all the arguments to *"["* method for *matrix*, except
**> changing the default behaviour for *drop*.
**>
**> When I execute:
*

>> test<-new("myClass",x=cbind(1:3,4:6),y="a") >> test[1,] # works as expected

> [1] 1 4

>> test[1,drop=TRUE] # does not work

> Error: argument "j" is missing, with no default

>> m<-cbind(1:3,4:6) >> m[1,]

> [1] 1 4

>> m[1,drop=TRUE]

> Can you please advise me a solution for this problem?

-- Martin Morgan Computational Biology / Fred Hutchinson Cancer Research Center 1100 Fairview Ave. N. PO Box 19024 Seattle, WA 98109 Location: Arnold Building M2 B169 Phone: (206) 667-2793 ______________________________________________ R-help_at_r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.Received on Thu 20 Mar 2008 - 23:51:58 GMT

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.2.0, at Fri 21 Mar 2008 - 01:30:23 GMT.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help.
Please read the posting
guide before posting to the list.
*