遍历矩阵

Looping over matrices

谢谢你的帮助!

我有 2 个矩阵:Mx1 和 Mx2 我想通过在 R 环境中循环选择矩阵来使用 pheatmap 制作热图

我试过了:

Matrices_list <- c(Mx1, Mx2)
for( i in Matrices_list_list ){pheatmap(i, filename= "i.pdf")}

但显然行不通 问题是 Df_list 现在是两个 Mx 的合并,而不是我无法在其中循环的 2 个不同的数据集。它在组合 Df_list

的每个元素中循环

期望的输出:

pheatmap(Mx1, filename="Mx1.pdf")
pheatmap(Mx2, filename="Mx2.pdf")

再次感谢您的帮助:)

A matrix 是具有 dimension 属性(通常是 2D)的 vector。在两个矩阵上使用 c 函数,删除维度属性和 return 单个一维向量,其中 length 等于 length(Mx1) + length(Mx2).

如评论中所示,如果我们需要将 matrix 本身保存在 list 中,将 names 属性作为各个矩阵的对象名称。使用 dplyr::lst,默认情况下它生成 listnames 作为对象名称

library(dplyr)
Matrices_list <- lst(Mx1, Mx2)

关于 OP post

中使用的 for 循环
for(i in Matrices_list ){...

i 是单个矩阵元素,没有任何名称属性。这可以另外描述为 for 每个循环,即对于 'Matrices_list' 的每个元素 'x'。在其他语言中,例如 C++,每个语法的语法为

for(auto i : Matrices_list) {...

不是遍历对象元素,而是遍历序列

for(i in seq_along(Matrices_list)) {...

names属性,提取那些元素和相应的名称来构造文件名。


对于 tidyverse,我们可以使用 imapiwalk 以及 .x 矩阵元素和 .y list 的名称或索引 (如果名字不存在)

library(purrr)
library(stringr)
imap(Matrices_list, ~ pheatmap(.x, filename = str_c(.y, ".pdf")))
iwalk(Matrices_list, ~ pheatmap(.x, filename = str_c(.y, ".pdf")))

imap/iwalk 的区别在于 iwalk 不会在控制台上打印 return 值。