循环矩阵

问题描述

感谢您的帮助!

我有 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")

再次感谢您的帮助:)

解决方法

matrix 是具有 vector 轴属性(通常是 2D)的 dim。在两个矩阵上使用 c 函数,移除维度属性并返回单个一维向量,其中 length 等于 length(Mx1) + length(Mx2)

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

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

关于 OP 帖子中使用的 for 循环

for(i in Matrices_list ){...

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

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,".pdf")))

imap/iwalk 的不同之处在于 iwalk 不会在控制台上打印返回值。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...