r - 如何使用 lapply 替换矩阵?
问题描述
假设我的数据具有以下结构:
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])
但不是,我正在下降,因为这段代码没有替换每个数组的第二个矩阵。有人能帮我吗?
解决方案
index
在每个lapply
调用中返回特定的。
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
推荐阅读
- notepad++ - 如何添加用户定义语言的功能和相关描述?
- c++ - 如何修复不推荐使用的枚举的 Doxygen 警告?
- circuit-sdk - 电路中的斜线命令
- laravel - Laravel - mariaDB 连接被拒绝
- c# - 重新开始的滚动列表
- jhipster - 在配置文件 jhipster 中启用 prometheus 启动失败
- vercel - 现在时间:api 需要来自静态构建步骤的 json 文件
- php - 为特定文件夹设置标题 (.htaccess)
- ruby-on-rails - ActiveAdmin 自定义资源操作(查看和操作)
- ios - iOS13:有没有办法禁用新的滑动输入功能?