Как заменить матрицы при помощи lapply? - PullRequest
0 голосов
/ 27 мая 2020

Допустим, мои данные имеют следующую структуру:

A_matrix<-list(structure(c(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), .Dim = c(3L, 3L, 3L)), structure(c(1, 
0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0), .Dim = c(3L, 3L, 3L)))

As<-list(structure(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 0, -1, -2, -3, -4, 
-5, -6, -7, -8, 0, -1, -2, -3, -4, -5, -6, -7, -8), .Dim = c(3L, 
3L, 3L)), structure(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 
5, 6, 7, 8, 9, 0, -1, -2, -3, -4, -5, -6, -7, -8), .Dim = c(3L, 
3L, 3L)))

Как видите, A_matrix и As - это списки, содержащие массивы. Я хотел бы выполнить следующую операцию:

for (i in 1:length(A_matrix)) {
      A_matrix[[i]][, , 2] <- A_matrix[[i]][, , 1] %*% As[[i]][, , 1]
    }

Однако for неэффективен, потому что мои настоящие данные представляют собой список с размером массивов 2800 (3470, 30, 30). Я бы хотел использовать lapply, чтобы быть более эффективным. Итак, я подумал, что следующий код может работать:

    lapply(1:length(As), function(index)
  A_matrix[[index]][, ,2]<-A_matrix[[index]][, , 1] %*% As[[index]][,,1])

Но нет, я падаю, потому что этот код не заменяет вторую матрицу каждого массива. Кто-нибудь может мне помочь?

...