R语言如何对多个列表应用函数并输出列表格式结果
实现两个列表对应位置矩阵相乘的apply族方案
最优方案:使用mapply
mapply本身支持多列表按索引同步迭代,是最适配该需求的apply族函数:
# 模拟测试数据:N取3,生成各含100个3×3方阵的列表A、B N <- 3 A <- lapply(1:100, function(x) matrix(rnorm(N*N), nrow = N)) B <- lapply(1:100, function(x) matrix(rnorm(N*N), nrow = N)) # 逐元素相乘,输出长度为100的列表 result <- mapply(`*`, A, B, SIMPLIFY = FALSE) # 若需要矩阵代数内积,替换运算符即可 # result <- mapply(`%*%`, A, B, SIMPLIFY = FALSE)
参数说明:
- 第一个参数传入要执行的运算函数,直接传入运算符
*(逐元素乘)或%*%(矩阵内积)即可 - 后续依次传入待迭代的两个列表A、B,函数会自动按相同索引位置取元素参与运算
- 必须加
SIMPLIFY = FALSE参数,否则mapply会自动将结果合并为数组,无法返回列表格式
备选方案:使用lapply
如果习惯用单列表迭代的lapply,也可以通过索引遍历实现:
result <- lapply(seq_along(A), function(i) A[[i]] * B[[i]]) # 内积版本:result <- lapply(seq_along(A), function(i) A[[i]] %*% B[[i]])
结果验证
可以通过以下代码验证运算正确性:
# 对比第一个元素的运算结果,返回TRUE即说明运算正确 identical(result[[1]], A[[1]] * B[[1]])
内容的提问来源于stack exchange,提问作者Amin Kaveh
相关产品推荐
相关产品推荐

