如何用cor_gather()批量处理列表中31个成对矩阵转为三列数据框?
解决方案:批量处理列表中的矩阵为数据框
直接用base R的lapply就能实现需求,把单个矩阵的处理逻辑嵌入匿名函数即可:
# 批量将列表中每个矩阵转换为数据框 data_dfs <- lapply(data, function(mat) { mat %>% cor_gather(drop.na = TRUE) })
这段代码会遍历data列表中的每个矩阵,对每个矩阵执行你原本的cor_gather操作,最终返回一个包含31个数据框的列表data_dfs,每个数据框对应原列表中的一个矩阵。
如果需要把所有结果合并成单个数据框,并且区分每个数据框来自原列表中的哪个矩阵(原列表未命名,用索引标记),可以这样写:
library(dplyr) # 处理后合并为单个数据框,并添加来源索引 data_combined <- lapply(seq_along(data), function(idx) { data[[idx]] %>% cor_gather(drop.na = TRUE) %>% mutate(source_matrix = idx) # 新增列标记是第几个矩阵 }) %>% bind_rows()
若习惯使用purrr包(tidyverse生态工具),写法会更简洁:
library(purrr) library(dplyr) # 批量转换为数据框列表 data_dfs <- map(data, ~ .x %>% cor_gather(drop.na = TRUE)) # 直接合并为带来源标识的单个数据框 data_combined <- map_dfr(seq_along(data), ~ { data[[.x]] %>% cor_gather(drop.na = TRUE) %>% mutate(source_matrix = .x) })
map与lapply功能一致,map_dfr会自动将所有结果按行合并成一个数据框,省去后续bind_rows步骤。
内容的提问来源于stack exchange,提问作者Geomicro
相关产品推荐
相关产品推荐

