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