Re: [R] Error in defining function

From: Megh Dal <megh700004_at_yahoo.com>
Date: Mon, 07 Jul 2008 00:19:45 -0700 (PDT)


"You will have to translate each character string to a function separately."

Here I have a modified program :

  library(zoo)
 Z.index <- as.Date(sample(12450:15500, 3000))   Z.data <- matrix(rnorm(300), ncol = 1)

  data1 <- zoo(Z.data, Z.index)

  fnc = function(data1)
    {
    selection2 = select.list(c("Mean", "SD"), multiple = T)

     Mean = function(dataa) mean(dataa)
     SD = function(dataa) sd(dataa)
     
     my.match.fun <- function(x) match.fun(x) ###
     
     for (i in length(selection2))
        {
         selection2[i] <- my.match.fun(selection2[i]) ###
        }
        
    ag = function(z, by, selection2)
                  {
                         f = function(f) aggregate(z, by, f)
                         do.call(cbind, sapply(selection2, f, simplify = F))
                  }

     return(ag(data1, as.yearqtr, selection2))
    }

    fnc(data1)

Frustrated !! still error. I also have tried downloading from R-forge. But download page is not working. I then tried directly from R using install.packages. Still there is no improvement.

Regards,

> From: Gabor Grothendieck <ggrothendieck@gmail.com>
> Subject: Re: [R] Error in defining function
> To: megh700004_at_yahoo.com
> Cc: r-help_at_stat.math.ethz.ch
> Date: Monday, July 7, 2008, 8:44 AM
> Your program works as is if you choose Mean but you have
> introduced two new errors:
>
> 1. SD is not defined in your program.
>
> 2. if multiple choices are taken then it will try to pass a
> vector to
> my.match.fun but that calls match.fun which only allows
> functions
> to be passed to it. You will have to translate each
> character string
> to a function separately.
>
> Try this:
>
> funs <- c("Mean", "SD")
> f <- function(fun) aggregate(data1, as.yearqtr,
> get(fun))
> do.call(cbind, sapply(tolower(funs), f, simplify = FALSE))
>
>
> On Sun, Jul 6, 2008 at 10:43 PM, Megh Dal
> <megh700004_at_yahoo.com> wrote:
> > I made some changes and also incorporated your advice
> :
> >
> > library(zoo)
> > Z.index <- as.Date(sample(12450:15500, 3000))
> > Z.data <- matrix(rnorm(300), ncol = 1)
> >
> > data1 <- zoo(Z.data, Z.index)
> >
> > fnc = function(data1)
> > {
> > selection2 = select.list(c("Mean",
> "SD"), multiple = T)
> >
> > Mean = function(dataa) mean(dataa)
> > my.match.fun <- function(x) match.fun(x) ###
> > selection2 <- my.match.fun(selection2) ###
> > ag = function(z, by, selection2)
> > {
> > f = function(f) aggregate(z,
> by, f)
> > do.call(cbind,
> sapply(selection2, f, simplify = F))
> > }
> >
> > return(aggregate(data1, as.yearqtr, selection2))
> > }
> >
> > fnc(data1)
> >
> > But still getting same error.
> >
> >
> > --- On Mon, 7/7/08, Gabor Grothendieck
> <ggrothendieck_at_gmail.com> wrote:
> >
> >> From: Gabor Grothendieck
> <ggrothendieck_at_gmail.com>
> >> Subject: Re: [R] Error in defining function
> >> To: megh700004_at_yahoo.com
> >> Cc: r-help_at_stat.math.ethz.ch
> >> Date: Monday, July 7, 2008, 1:23 AM
> >> On Sun, Jul 6, 2008 at 3:19 PM, Megh Dal
> >> <megh700004_at_yahoo.com> wrote:
> >> > Can anyone please tell me why I am getting
> this error?
> >> >
> >> > library(zoo)
> >> > Z.index <- as.Date(sample(12450:15500,
> 3000))
> >> > Z.data <- matrix(rnorm(300), ncol = 1)
> >> >
> >> > data1 <- zoo(Z.data, Z.index)
> >> >
> >> > fnc = function(data1)
> >> > {
> >> > selection2 =
> select.list(c("Mean"),
> >> multiple = F)
> >> >
> >> > Mean = function(dataa) mean(dataa)
> >> >
> >> > return(aggregate(data1, as.yearqtr,
> selection2))
> >> > }
> >> >
> >> > fnc(data1)
> >> >
> >> > I got following error :
> >> > Error in get(as.character(FUN), mode =
> >> "function", envir = envir) :
> >> > variable "Mean" of mode
> >> "function" was not found
> >> >
> >>
> >> Its a bug in aggregate.zoo . Its just been fixed
> in the
> >> zoo devel version
> >> available on R-Forge so you can either grab that
> or use the
> >> workaround
> >> below:
> >>
> >> library(zoo)
> >>
> >> set.seed(1)
> >> Z.data <- matrix(rnorm(300), ncol = 1)
> >> Z.index <- as.Date(sample(12450:15500, 3000))
> >> data1 <- zoo(Z.data, Z.index)
> >>
> >> fnc <- function(data1) {
> >> selection2 <- select.list("Mean",
> multiple
> >> = FALSE)
> >> Mean <- function(dataa) mean(dataa)
> >>
> >> my.match.fun <- function(x) match.fun(x)
> ###
> >> selection2 <- my.match.fun(selection2) ###
> >>
> >> return(aggregate(data1, as.yearqtr,
> selection2))
> >> }
> >>
> >> fnc(data1)
> >
> >
> >
> >



R-help_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. Received on Mon 07 Jul 2008 - 07:22:58 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Mon 07 Jul 2008 - 11:31:51 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive