查看原文
其他

把逻辑矩阵变成数值矩阵的最简单方法是乘以1

果子 果子学生信 2023-06-15

今天碰到一个需求,就是把如下的是逻辑矩阵变成数值。

rm(list = ls())
load(file = "gene_pathway_membership.rda")
dd <- gene_pathway_membership

在R语言中,默认TRUE等于1,FALSE等于0, 所以如果转换成功,最终这个矩阵是0和1组成的。

第一种方法

首先,我想到的方法肯定是apply, 他可以批量作用于行或者列,第二个参数1代表行,2代表列。
我们按列批量处理,用as.numeric函数来转换,转换后,再添加行名即可。

dd1 <- apply(dd,2,as.numeric)
rownames(dd1) <- rownames(dd)
比较成功。

第二种方法

我想到的另外一种方法是,先用as.numeric去转换,得到的是一串数值,不是矩阵,再把这串数值变成矩阵,然后分别添加行名和列名。

dd2 <- matrix(as.numeric(dd),nrow = nrow(dd))
rownames(dd2) <- rownames(dd)
colnames(dd2) <- colnames(dd)

稍微复杂了一点,值得注意的是,如果把一串数值变成matrix,他的默认顺序是这样的。

第三种方法

既然我们说过这样的话:

在R语言中,默认TRUE等于1,FALSE等于0

R语言什么时候会这样觉得呢,在计算的时候。所以我们可以把原来的矩阵乘以1,让R语言触发这个技能,他就会自动修改这些逻辑了。

dd3 <- dd*1

对我而言,这个就叫做优雅。

好了,这个技能由什么用呢?在upset作图的时候会用到,可以留意一下那个帖子。

我是果子,我们一会见。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存