jmc at research.bell-labs.com
Tue Apr 1 10:23:42 MEST 2003
I think this is a consequence of the extra context added to make methods
work right with R lexical scoping, namespaces, etc. Or a subtlety in
R's definition of missing()?
The problem is that somehow the default expression for argument `ncol'
makes that argument appear NOT to be missing. But an attempt to
evaluate it fails because the local variable `n' hasn't been defined
The following debugging snippets, using trace on the method for
"numeric", show what's happening. But as to why, we need some expert
R> trace("diag", sig="numeric", browser)
Tracing diag(2) on entry
Called from: diag(2)
Error during wrapup: Object "n" not found
R> selectMethod("diag", "numeric")
Method Definition (Class "MethodDefinitionWithTrace"):
function (x = 1, nrow, ncol = n)
By the way, while this example seems to be some obscure glitch, there is
a real potential for code that relies heavily on lazy evaluation to
break when functions are made generic, just for the simple reason that
arguments involved in method signatures (ANY defined method signature)
may need to be evaluated to dispatch the method, before they would
normally be needed in the body of the original non-generic function.
Roger Koenker wrote:
> I'm still having difficulties with methods...is the following behavior expected?
> (This is without loading any libraries)
> R : Copyright 2003, The R Development Core Team
> Version 1.7.0 Under development (unstable) (2003-03-31)
> > ls()
> > diag(2)
> [,1] [,2]
> [1,] 1 0
> [2,] 0 1
> > setGeneric("diag")
>  "diag"
> > diag(2)
> Error in diag(2) : Object "n" not found
> Seems to be a perverse consequence of some slightly fancy use of lazy evaluation....
> url: www.econ.uiuc.edu Roger Koenker Dept. of Economics UCL,
> email rkoenker at uiuc.edu Department of Economics Drayton House,
> vox: 217-333-4558 University of Illinois 30 Gorden St,
> fax: 217-244-6678 Champaign, IL 61820 London,WC1H 0AX, UK
> vox: 020-7679-5838
> R-devel at stat.math.ethz.ch mailing list
John M. Chambers jmc at bell-labs.com
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
More information about the R-devel