[R] Question on Reduce + rollmean

Gabor Grothendieck ggrothendieck at gmail.com
Mon Jan 4 17:12:59 CET 2010


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.rahiz at 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.rahiz at 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.rahiz at 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.rahiz at 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.rahiz at ouce.ox.ac.uk<mailto:muhammad.rahiz at 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.rahiz at ouce.ox.ac.uk<mailto:muhammad.rahiz at ouce.ox.ac.uk>
>>>>
>>>> ______________________________________________
>>>> R-help at r-project.org<mailto: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<http://www.r-project.org/posting-guide.html>
>>>> and provide commented, minimal, self-contained, reproducible code.
>>>>
>>>>
>>>>
>>>>
>>>
>>> ______________________________________________
>>> 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.
>>>
>>>
>



More information about the R-help mailing list