2008/1/14, Robin Hankin <[EMAIL PROTECTED]>: > Hi > > [this after some considerable thought as to R-help vs R-devel] > > > > I want to write a (S3) method for as.function(); > toy example follows. > > Given a matrix "a", I need to evaluate trace(ax) as a function of > (matrix) "x". > > Here's a trace function: > > tr <- function (a) { > i <- seq_len(nrow(a)) > return(sum(a[cbind(i, i)])) > } > > > How do I accomplish the following: > > > 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)
What about the following? as.function.foo <- function(a, ...) function(x) sum(diag(a*x)) However, I don't see the need for an S3 method. Why don't simply use (?): mulTraceFun <- function(a) function(x) sum(diag(a*x)) So you also have a more meaningful name than an anonymous 'as.function'. HTH, Antonio. > > a <- 4 > f(x) # should still give tr(ax) even though "a" has been > reassigned. This would'nt work with my proposal, because of lexical scoping. > > > > > > [my real example is very much more complicated than this but > I need this toy one too and I can't see how to modify > as.function.polynomial() > to do what I want] > > > > > -- > 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 > -- Antonio, Fabio Di Narzo Ph.D. student at Department of Statistical Sciences University of Bologna, Italy ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel