2015-03-03 5 views
2

Я хотел бы сделать cumsum из нескольких матриц, получающих этапы. Если мы рассмотрим:sumcum on matrix using R

A <- structure(c(1, 2, 3, 2, 3, 1, 4, 1, 2), .Dim = c(3, 3)) 
#  [,1] [,2] [,3] 
# [1,] 1 2 4 
# [2,] 2 3 1 
# [3,] 3 1 2 
B <- structure(c(6, 1, 9, 6, 3, 7, 3, 2, 8), .Dim = c(3, 3)) 
#  [,1] [,2] [,3] 
# [1,] 6 6 3 
# [2,] 1 3 2 
# [3,] 9 7 8 
C <- structure(c(1, 1, 2, 5, 3, 3, 3, 9, 1), .Dim = c(3, 3)) 
#  [,1] [,2] [,3] 
# [1,] 1 5 3 
# [2,] 1 3 9 
# [3,] 2 3 1 

Я хотел бы следующие результаты:

 [,1] [,2] [,3] 
[1,] 1 2 4 
[2,] 2 3 1 
[3,] 3 1 2 

    [,1] [,2] [,3] 
[1,] 7 8 7 
[2,] 3 6 3 
[3,] 12 8 10 

    [,1] [,2] [,3] 
[1,] 8 13 10 
[2,] 4 9 12 
[3,] 14 11 11 

со всеми шагами! Я мог бы сделать это с циклом for, но медленно с большой матрицей, как я могу это сделать с применением?

ответ

11

Это идеальная работа для Reduce:

Reduce("+", list(A,B,C), accumulate=TRUE) 
[[1]] 
    [,1] [,2] [,3] 
[1,] 1 2 4 
[2,] 2 3 1 
[3,] 3 1 2 

[[2]] 
    [,1] [,2] [,3] 
[1,] 7 8 7 
[2,] 3 6 3 
[3,] 12 8 10 

[[3]] 
    [,1] [,2] [,3] 
[1,] 8 13 10 
[2,] 4 9 12 
[3,] 14 11 11 
+0

Благодаря @James !!! Это потрясающе! – user1595929