This is due to the non-idempotent nature of apply. Instead of apply, you can use
- aaply in the plyr package http://tolstoy.newcastle.edu.au/R/devel/06/06/5687.html - or the idempotent apply (iapply) posted here by Hadley Wickham: and in either case you won`t have to permute the result. On Mon, Jan 4, 2010 at 10:54 AM, Muhammad Rahiz <muhammad.ra...@ouce.ox.ac.uk> wrote: > Thanks Gabor, > > It works alright. But is there alternative ways to perform rollmean apart > from permutating the data? > Possibly combining the Reduce and rollmean functions? > > The easiest but traditional way is > >> (x[[1]]+x[[2]]) / 2 >> (x[[2]]+x[[3]]) / 2 > > > Muhammad Rahiz | Doctoral Student in Regional Climate Modeling > > Climate Research Laboratory, School of Geography & the Environment > Oxford University Centre for the Environment > South Parks Road, Oxford, OX1 3QY, United Kingdom Tel: +44 (0)1865-285194 > Mobile: +44 (0)7854-625974 > Email: muhammad.ra...@ouce.ox.ac.uk > > > > > > > Gabor Grothendieck wrote: >> >> Try apply: >> >> library(zoo) # rollmean >> >> # test data >> m <- matrix(1:3, 3, 3) >> x <- list(m, m+3, m+6) >> >> # convert to array >> a <- array(unlist(x), c(3, 3, 3)); a >> >> # apply rollmean and permute to desired form >> aa <- apply(a, 1:2, rollmean, k = 2) >> aperm(aa, c(2, 3, 1)) >> >> The last line outputs: >> >> >>> >>> aperm(aa, c(2, 3, 1)) >>> >> >> , , 1 >> >> [,1] [,2] [,3] >> [1,] 2.5 2.5 2.5 >> [2,] 3.5 3.5 3.5 >> [3,] 4.5 4.5 4.5 >> >> , , 2 >> >> [,1] [,2] [,3] >> [1,] 5.5 5.5 5.5 >> [2,] 6.5 6.5 6.5 >> [3,] 7.5 7.5 7.5 >> >> >> On Sat, Jan 2, 2010 at 10:00 AM, Muhammad Rahiz >> <muhammad.ra...@ouce.ox.ac.uk> wrote: >> >>> >>> Let me rephrase; >>> >>> Given x as >>> >>> >>>> >>>> x >>>> >>> >>> [[1]] >>> V1 V2 V3 >>> [1,] 1 1 1 >>> [2,] 2 2 2 >>> [3,] 3 3 3 >>> >>> [[2]] >>> V1 V2 V3 >>> [1,] 4 4 4 >>> [2,] 5 5 5 >>> [3,] 6 6 6 >>> >>> [[3]] >>> V1 V2 V3 >>> [1,] 7 7 7 >>> [2,] 8 8 8 >>> [3,] 9 9 9 >>> >>> I'd like to calculate the moving average (interval = 2) i.e. >>> >>> ( x[[1]] + x[[2]] ) / 2 >>> ( x[[2]] + x[[3]] ) / 2 >>> ... and so on. >>> >>> The desired output will return >>> >>> 2.5 2.5 2.5 >>> 3.5 3.5 3.5 >>> 4.5 4.5 4.5 >>> >>> 5.5 5.5 5.5 >>> 6.5 6.5 6.5 >>> 7.5 7.5 7.5 >>> >>> >>> >>> >>> Muhammad Rahiz | Doctoral Student in Regional Climate Modeling >>> Climate Research Laboratory, School of Geography & the Environment >>> Oxford University Centre for the Environment, University of Oxford >>> South Parks Road, Oxford, OX1 3QY, United Kingdom >>> Tel: +44 (0)1865-285194 Mobile: +44 (0)7854-625974 >>> Email: muhammad.ra...@ouce.ox.ac.uk >>> >>> >>> >>> milton ruser wrote: >>> >>>> >>>> Dear M.Rahiz, >>>> >>>> Unfortunatelly I can't reproduce your example. >>>> PLEASE do read the posting guide >>>> >>>> http://www.R-project.org/posting-guide.html<http://www.r-project.org/posting-guide.html> >>>> >>>> bests >>>> >>>> milton >>>> On Sat, Jan 2, 2010 at 9:26 AM, Muhammad Rahiz >>>> <muhammad.ra...@ouce.ox.ac.uk<mailto:muhammad.ra...@ouce.ox.ac.uk>> >>>> wrote: >>>> Hello useRs, >>>> >>>> I'd like to perform a moving average on the dataset, xx. I've tried >>>> combining the functions Reduce and rollmean but it didn't work. >>>> >>>> >>>> >>>>> >>>>> r <- function(n) rollmean(n, 2) # where 2 = averaging interval >>>>> output < - Reduce("r", x) >>>>> >>>>> >>>> >>>> Error in f(init, x[[i]]) : unused argument(s) (x[[i]]) >>>> >>>> Is there anything wrong with the code in the first place? >>>> >>>> where >>>> >>>> >>>>> >>>>> x >>>>> >>>>> >>>> >>>> [[1]] >>>> V1 V2 V3 >>>> [1,] 1 1 1 >>>> [2,] 2 2 2 >>>> [3,] 3 3 3 >>>> >>>> [[2]] >>>> V1 V2 V3 >>>> [1,] 4 4 4 >>>> [2,] 5 5 5 >>>> [3,] 6 6 6 >>>> >>>> [[3]] >>>> V1 V2 V3 >>>> [1,] 7 7 7 >>>> [2,] 8 8 8 >>>> [3,] 9 9 9 >>>> >>>> The moving average is to be performed on >>>> >>>> 1,4,7 = (1+4)/2 , (4+7)/2 >>>> 2,5,8 = .. >>>> 3,6,9 = .. >>>> >>>> Thanks >>>> >>>> Muhammad >>>> >>>> -- >>>> Muhammad Rahiz | Doctoral Student in Regional Climate Modeling >>>> Climate Research Laboratory, School of Geography & the Environment >>>> Oxford University Centre for the Environment, University of Oxford >>>> South Parks Road, Oxford, OX1 3QY, United Kingdom >>>> Tel: +44 (0)1865-285194 Mobile: +44 (0)7854-625974 >>>> Email: muhammad.ra...@ouce.ox.ac.uk<mailto:muhammad.ra...@ouce.ox.ac.uk> >>>> >>>> ______________________________________________ >>>> R-help@r-project.org<mailto:R-help@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<http://www.r-project.org/posting-guide.html> >>>> and provide commented, minimal, self-contained, reproducible code. >>>> >>>> >>>> >>>> >>> >>> ______________________________________________ >>> R-help@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. >>> >>> > ______________________________________________ R-help@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.