[R] Question on Reduce + rollmean

Muhammad Rahiz muhammad.rahiz at ouce.ox.ac.uk
Thu Jan 7 18:28:25 CET 2010


Dear Gabor & Henrique,

Thanks for your suggestions on the above problem. The following is more traditional and unfanciful but it works. Suitable for a prodige like myself...

m <- matrix(1:3,3,3)
x1 <- list(m, m+1, m+2, m+3, m+4) 

out <- list()
for (i in 1:4){
t[[i]] <- Reduce("+", x1[c(i:i+1)])
}

Muhammad

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:
> Here is a variation which also uses head and tail:
>
> mapply(function(x, y) (x + y)/2, tail(x, -1), head(x, -1), SIMPLIFY = FALSE)
>
>
> On Mon, Jan 4, 2010 at 12:37 PM, Henrique Dallazuanna <wwwhsd at gmail.com> wrote:
>   
>> For this example try this:
>>
>> lapply(lapply(list('head', 'tail'), do.call, list(x, n = -1)),
>> function(x)Reduce('+', x)/2)
>>
>>
>> On Mon, Jan 4, 2010 at 1:54 PM, 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.
>>>>>
>>>>>
>>>>>           
>>> ______________________________________________
>>> 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.
>>>
>>>       
>>
>> --
>> Henrique Dallazuanna
>> Curitiba-Paraná-Brasil
>> 25° 25' 40" S 49° 16' 22" O
>>
>> ______________________________________________
>> 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