[R] Question on Reduce + rollmean
Gabor Grothendieck
ggrothendieck at gmail.com
Thu Jan 7 19:15:42 CET 2010
That gives an error when I run it. I think you want this:
m <- matrix(1:3,3,3)
x1 <- list(m, m+1, m+2, m+3, m+4)
out <- list()
for(i in 1:4) out[[i]] <- (x1[[i]] + x1[[i+1]]) / 2
On Thu, Jan 7, 2010 at 12:28 PM, Muhammad Rahiz
<muhammad.rahiz at ouce.ox.ac.uk> wrote:
> 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