[R] Error in defining function

Gabor Grothendieck ggrothendieck at gmail.com
Mon Jul 7 05:14:31 CEST 2008


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)
>
>
>
>



More information about the R-help mailing list