[Rd] as.function()

Antonio, Fabio Di Narzo antonio.fabio at gmail.com
Mon Jan 14 09:45:37 CET 2008


2008/1/14, Robin Hankin <r.hankin at noc.soton.ac.uk>:
> 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 at 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



More information about the R-devel mailing list