其他
把逻辑矩阵变成数值矩阵的最简单方法是乘以1
今天碰到一个需求,就是把如下的是逻辑矩阵变成数值。
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作图的时候会用到,可以留意一下那个帖子。
我是果子,我们一会见。