【问题标题】:How to replace matrices using lapply?如何使用 lapply 替换矩阵?
【发布时间】:2020-09-14 18:15:31
【问题描述】:

假设我的数据具有以下结构:

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])

但不是,我摔倒了,因为这段代码没有替换每个数组的第二个矩阵。有人可以帮我吗?

【问题讨论】:

    标签: r arrays list lapply


    【解决方案1】:

    在每个lapply 调用中返回特定的index。

    lapply(seq_along(As), function(index) {
      A_matrix[[index]][, ,2] <- A_matrix[[index]][, , 1] %*% As[[index]][,,1]
      A_matrix[[index]]
    }) -> B_matrix
    

    使用for 循环检查输出 -

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-10
      • 2017-05-09
      • 1970-01-01
      • 2019-07-04
      • 1970-01-01
      • 2017-05-09
      • 2013-05-30
      • 1970-01-01
      相关资源
      最近更新 更多