r - 如何使用大字符向量对矩阵进行子集化
问题描述
我对 R 很陌生,我正在处理一个大型基因组矩阵,我正在使用某些基因准备热图。我对包含我感兴趣的基因的矩阵进行了子集化。
我试着这样做:
vector_infertility_genes <- infertility$V1
matrix_for_heatmap_infertility <- subset(my_genomic_matrix, vector_infertility_genes)
但这只给了我矩阵中的前 x 行,其中 x 是我在 vector_infertility 基因中的字符数。
到目前为止,我能够通过执行以下操作来避开这个问题:
matrix_for_heatmap_infertility <- my_genomic_matrix[c('EPHX1', 'HSPB1', 'CLU', 'GAMT', 'PICK1', 'NR3C1',
'SIRT1', 'NPAS2', 'SPRY4', 'MAP3K1', 'SOS1', 'SALL4',
'GRIP1', 'PUM2', 'SOX9', 'RIPK4', 'CHD7', 'BCOR',
'CCNB1', 'NFE2L2', 'CHD2', 'CYP1B1', 'MDM2', 'CREBBP',
'ICK', 'ZFY', 'SIN3A', 'GATA4'), ]
如果我必须再次手动键入每个基因的行名到这样的子集,我会自杀。有没有更简单的方法来创建一个字符向量并将其用于子集?
解决方案
我正在猜测这个问题。您的基因是因子,当您使用它们对矩阵进行子集化时,它们将转换为数字:
genes = c('EPHX1','HSPB1', 'CLU', 'GAMT','PICK1', 'NR3C1','SIRT1', 'NPAS2',
'SPRY4', 'MAP3K1', 'SOS1', 'SALL4','GRIP1', 'PUM2', 'SOX9', 'RIPK4', 'CHD7',
'BCOR','CCNB1','NFE2L2', 'CHD2', 'CYP1B1', 'MDM2', 'CREBBP', 'ICK', 'ZFY',
'SIN3A', 'GATA4')
class(genes)
[1] "character"
infertility = data.frame(V1=genes)
vector_infertility_genes <- infertility$V1
class(vector_infertility_genes)
[1] "factor"
默认情况下,data.frame 将字符作为向量,现在我在下面创建一个带有一些随机基因名称的矩阵,并插入从 101-128 中选择的基因:
my_genomic_matrix = matrix(runif(1000*3),ncol=3)
rownames(my_genomic_matrix) = paste0("gene",1:1000)
rownames(my_genomic_matrix)[101:128] = genes
这给了你一些奇怪的东西:
head(my_genomic_matrix[vector_infertility_genes,])
[,1] [,2] [,3]
gene8 0.6705400 0.92836211 0.39245031
gene12 0.6550523 0.87094037 0.08309788
gene5 0.3737798 0.94779178 0.44279510
gene9 0.4544450 0.77939541 0.13901245
gene19 0.6284895 0.47871950 0.60837784
gene18 0.2369957 0.01336282 0.10390174
这在大多数情况下应该有效,只要您确定您的 vector_infertility_genes 在 my_genomic_matrix 的行名中:
head(my_genomic_matrix[as.character(vector_infertility_genes),])
[,1] [,2] [,3]
EPHX1 0.1380852 0.91638593 0.5155086
HSPB1 0.4828377 0.44798223 0.6011990
CLU 0.7974677 0.84083760 0.4378384
GAMT 0.9654133 0.04167125 0.6087020
PICK1 0.1958134 0.22254847 0.5157768
NR3C1 0.4228220 0.14512706 0.6136789
如果缺少一些,您还可以执行以下操作:
vector_infertility_genes = as.character(vector_infertility_genes)
my_genomic_matrix[rownames(my_genomic_matrix) %in% vector_infertility_genes,]
推荐阅读
- javascript - 单元测试 ember 并发任务和产量
- pandas - 将 DataFrame 转换为 sql
- docker - 如何为 docker swarm 中每个节点上的任务设置独特的环境?
- azure - 是否可以通过 powershell 在计划任务/频率上更新 URL 是应用程序洞察力中的可用性测试
- django - 使用命令“django-admin startproject”,不会创建任何东西
- java - 配置 spring 批处理作业范围时调用 configprops 时出错
- android - 从 API 更改第 20 篇文章的颜色
- node.js - 错误:Reference.child 失败:第一个参数是无效路径。路径必须是非空字符串,并且不能包含“.”、“#”、“$”、“[”或“]”
- flutter - 在 null 上调用了 getter 'hourOfPeriod'。接收方:null 尝试调用:HourOfPeriod in flutter
- typescript - debounceTime 到服务调用