[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