Как создать матрицу с использованием большого символа - PullRequest
0 голосов
/ 10 апреля 2020

Я довольно новичок в R, и я работаю с большой матрицей c генома, и я готовлю тепловые карты, используя определенные гены. Я подставляю матрицу, содержащую интересующие меня гены.

Я пытался сделать это следующим образом:

vector_infertility_genes <- infertility$V1

matrix_for_heatmap_infertility <- subset(my_genomic_matrix, vector_infertility_genes)

Но это дает мне только первое число х строк из моей матрицы, где х это количество символов в генах 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'), ]

Если мне придется вручную вводить имя строки Я снова убью каждого гена для поднабора. Есть ли более простой способ сделать это, создав вектор символов и используя его для подмножества?

1 Ответ

0 голосов
/ 11 апреля 2020

Я загадываю проблему. Ваши гены являются факторами, и когда вы используете их для подмножества матрицы, они преобразуются в цифры c:

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,]
...