R语言如何用嵌套lapply计算嵌套列表中数组第三维度的均值
R嵌套列表数组第三维均值的lapply实现方案
核心实现代码
仅需一行代码即可完成计算,且完全保留原列表结构:
big_list <- lapply(big_list, function(sublist) lapply(sublist, function(arr) apply(arr, 1:2, mean, na.rm = TRUE)))
如果使用R4.1及以上版本,可以用简写匿名函数进一步压缩代码:
big_list <- lapply(big_list, \(s) lapply(s, \(a) apply(a, 1:2, mean, na.rm = T)))
逻辑说明
- 外层
lapply遍历big_list中的每一个子列表(对应原结构中的list1~list8) - 内层
lapply遍历单个子列表中的所有三维数组 - 内层对每个数组执行的
apply操作和原有for循环中的逻辑完全一致,最终返回的列表结构和原始big_list完全匹配
性能优化方案
如果数据量较大,可使用rowMeans代替apply提升计算速度,rowMeans是C实现的向量化函数,计算效率远高于R层循环的apply:
big_list <- lapply(big_list, \(s) lapply(s, \(a) rowMeans(a, dims = 2, na.rm = T)))
你可以通过identical()函数验证结果和原有for循环输出完全一致:
# 先运行原有for循环得到结果,再和lapply版本对比 identical(big_list_for, big_list_lapply)
内容的提问来源于stack exchange,提问作者climsaver
相关产品推荐
相关产品推荐

