On 14 Jan 2008, at 11:50, Duncan Murdoch wrote:

> Robin Hankin wrote:
>> Hi
>>

[snip]

>> a <- crossprod(matrix(rnorm(12),ncol=3))
>> class(a) <- "foo"
>>
>> f <- as.function(a)       # need help to write as.function.foo()
>> x <- diag(3)
>>
>> f(x)             #should give tr(ax)
>>
>> a <- 4
>> f(x)           # should still give tr(ax) even though "a" has been   
>> reassigned.
>>
>>
> Brian's answer was what you want.  A less general version is this:
>
> > as.function.foo <- function(x, ...) {
> +    function(b) tr(x %*% b)
> + }
>


Wow.  Got it!  Looks like I'll have to read the R Language Definition  
again.

Thanks everyone.




> (I switched the names of the args, because the first arg to  
> as.function.foo should match the name of the first arg to  
> as.function).
>
> I was a little surprised that this worked even if a was changed  
> without ever evaluating f, because I thought lazy evaluation would  
> mess up that case.  But of course the value of x is forced when R  
> evaluates it to find out the class for dispatch to the method.
>
> Duncan Murdoch

--
Robin Hankin
Uncertainty Analyst and Neutral Theorist,
National Oceanography Centre, Southampton
European Way, Southampton SO14 3ZH, UK
  tel  023-8059-7743

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to