2016-01-06 1 views
-1

У меня есть matrix с именами строк и столбцов, и вы хотите уменьшить его до submatrix определенной строки/colnames. Указанные имена находятся в строковом векторе значений ~20, а матрица имеет 55.000 rownames и 805 colnames. Как я могу сделать это эффективно в R?Submatrix от colname

IFNGenes = c('TIMM10','UBE2L6','MX1','IF16','IFI44L','IFIT3','ISG15','OAS1','RSAD2','IFI44','OAS3','DOX58','HERC5','BATF2','LIPA','RSAD2.1') 

subMatrix = theMatrix[,IFNGenes] 
Error in theMatrix[, IFNGenes] : subscript out of bounds 
+3

Как насчет небольшой воспроизводимый пример? Я думаю, вы можете использовать индексирование 'row/column'. – akrun

+0

Код выше, я попробовал и получил индексную ошибку. Может быть, некоторые из генов не в коментах? –

ответ

4

Если я правильно понял ваш вопрос правильно, вы ищете что-то вроде этого:

x <- matrix(1:100, 10) 
rownames(x) <- LETTERS[1:10] 
colnames(x) <- letters[1:10] 
x[c("C", "F", "A"), c("d", "b", "e")] 

Вы также можете сделать:

x[c("C", "F", "A"), c(4, 2, 5)] 

Если вы используете rowname-индекс (то же самое для colnames), который не существует в матрице, вы получаете ошибку:

> x[c("C", "F", "XX"), c(4, 2, 5)] 
Error in x[c("C", "F", "XX"), c(4, 2, 5)] : subscript out of bounds 

Вы можете найти такие indizes следующим образом:

r <- c("C", "F", "XX") 
r[which(! r %in% rownames(x))] 

Для ваших данных вы должны проверить:

IFNGenes[which(! IFNGenes %in% colnames(theMatrix))] 
+0

Да, я не понимал, что вы можете смешивать индексирование по целому числу и столбцу/rowname в R. –

+0

Спасибо jogo, какое утверждение было тем, что я искал –

Смежные вопросы