如何解决循环矩阵
感谢您的帮助!
我有 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
,默认情况下它会生成 names
的 list
作为对象名称
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,我们可以使用 imap
或 iwalk
与 .x
矩阵元素和 .y
list
的名称或索引(如果没有名字)
library(purrr)
library(stringr)
imap(Matrices_list,~ pheatmap(.x,filename = str_c(.y,".pdf")))
iwalk(Matrices_list,".pdf")))
imap/iwalk
的不同之处在于 iwalk
不会在控制台上打印返回值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。