Torsten Hothorn wrote:
> 
> Hi,
> 
> how can one trace a nonstandardGenericFunction,
> especially "initialize"? An example:
> 
> setClass("dummy", representation(a = "numeric"))
> 
> setMethod("initialize", "dummy",
>           function(.Object, a = 2) { ### I want to trace this function
>               [EMAIL PROTECTED] <- a
>               .Object
>           })

Your problem is not with nonstandard generic functions.  It comes from
giving setMethod a function whose argument list is NOT identical to the
argument list for the generic function.

In this case, your method has formal arguments (.Object, a), but

R> formalArgs(initialize)
[1] ".Object" "..."    

This is allowed, but technically the method MUST  have the same
arguments as the generic.  So the mechanism used is to turn the supplied
method into a function, .local, in the actual method, and to call this
function to re-match arguments.  Tracing the method traces the method,
not the .local function.

In the future, we can likely make tracing work in the intuitive way for
such methods.

Meanwhile, you need to set things up yourself, by using an explicit
function and having the method call that function.

R> initDummy <- function(.Object, a = 2) {
+              [EMAIL PROTECTED] <- a
+              .Object
+          }
R> setMethod("initialize", "dummy", function(.Object,
...)initDummy(.Object, ...))
[1] "initialize"
R> trace(initDummy, browser, exit = browser)
[1] "initDummy"
R> new("dummy", 1.5)
Tracing initDummy(.Object, ...) on entry 
Called from: initDummy(.Object, ...)
Browse[1]> objects()
[1] "a"
Browse[1]> a
[1] 1.5



> 
> setMethod("show", "dummy", function(object) print([EMAIL PROTECTED]))
> 
> b <- new("dummy", a = 3)
> 
> trace("show", browser, signature = "dummy") ### trace method "show" to
>                                             ### class "dummy"
> 
> show(b) ### works fine
> 
> trace("initialize", browser, signature = "dummy")
> 
> R> b <- new("dummy") ### does not trace the function of interest ...
> Tracing initialize(value, ...) on entry
> Called from: initialize(value, ...)
> 
> Best,
> 
> Torsten
> 
> ______________________________________________
> [EMAIL PROTECTED] mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-devel

-- 
John M. Chambers                  [EMAIL PROTECTED]
Bell Labs, Lucent Technologies    office: (908)582-2681
700 Mountain Avenue, Room 2C-282  fax:    (908)582-3340
Murray Hill, NJ  07974            web: http://www.cs.bell-labs.com/~jmc

______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-devel

Reply via email to