2015-05-10 4 views
-1

Я скорректировал матрицу в текстовом файле для локального выравнивания с помощью функции pairwiseAlignment. Тогда я использовал эту функцию для ввода его в R:Как преобразовать матрицу в числовую матрицу?

ex <- as.matrix(read.table("~/scoringMatrix", header=FALSE, sep = "\t", row.names = 1, as.is=TRUE) 

Формат является следующее:

> ex 

    A T C G 
A 5 -2 -1 -2 
T -2 7 -1 -2 
C -1 -1 7 2 
G -2 -2 2 8 

Теперь всякий раз, когда я использую pairwiseAlignment функции я получаю следующее сообщение об ошибке:

pairwiseAlignment(x[[1]], x[[2]], substitutionMatrix = ex, gapOpening = -2, gapExtension = -8, scoreOnly = FALSE) 
    Error in XStringSet.pairwiseAlignment(pattern = pattern, subject = subject, : 
     'substitutionMatrix' must be a numeric matrix 

Если я будет использовать уже существующую матрицу замещения, такую ​​как BLOSUM50, она отлично работает. Итак, как мне сделать эту матрицу подходящей для parwiseAlignment?

> dput(ex) 
structure(logical(0), .Dim = c(5L, 0L), .Dimnames = list(c(" A T C G", 
"A 5 -2 -1 -2", "T -2 7 -1 -2", "C -1 -1 7 2", "G -2 -2 2 8" 
), NULL)) 

Хотя dput(BLOSUM50) выглядит совершенно иначе:

> dput(BLOSUM50) 
structure(c(5L, -2L, -1L, -2L, -1L, -1L, -1L, 0L, -2L, -1L, -2L, 
-1L, -1L, -3L, -1L, 1L, 0L, -3L, -2L, 0L, -2L, -1L, -1L, -5L, 
-2L, 7L, -1L, -2L, -4L, 1L, 0L, -3L, 0L, -4L, -3L, 3L, -2L, -3L, 
-3L, -1L, -1L, -3L, -1L, -3L, -1L, 0L, -1L, -5L, -1L, -1L, 7L, 
2L, -2L, 0L, 0L, 0L, 1L, -3L, -4L, 0L, -2L, -4L, -2L, 1L, 0L, 
-4L, -2L, -3L, 4L, 0L, -1L, -5L, -2L, -2L, 2L, 8L, -4L, 0L, 2L, 
-1L, -1L, -4L, -4L, -1L, -4L, -5L, -1L, 0L, -1L, -5L, -3L, -4L, 
5L, 1L, -1L, -5L, -1L, -4L, -2L, -4L, 13L, -3L, -3L, -3L, -3L, 
-2L, -2L, -3L, -2L, -2L, -4L, -1L, -1L, -5L, -3L, -1L, -3L, -3L, 
-2L, -5L, -1L, 1L, 0L, 0L, -3L, 7L, 2L, -2L, 1L, -3L, -2L, 2L, 
0L, -4L, -1L, 0L, -1L, -1L, -1L, -3L, 0L, 4L, -1L, -5L, -1L, 
0L, 0L, 2L, -3L, 2L, 6L, -3L, 0L, -4L, -3L, 1L, -2L, -3L, -1L, 
-1L, -1L, -3L, -2L, -3L, 1L, 5L, -1L, -5L, 0L, -3L, 0L, -1L, 
-3L, -2L, -3L, 8L, -2L, -4L, -4L, -2L, -3L, -4L, -2L, 0L, -2L, 
-3L, -3L, -4L, -1L, -2L, -2L, -5L, -2L, 0L, 1L, -1L, -3L, 1L, 
0L, -2L, 10L, -4L, -3L, 0L, -1L, -1L, -2L, -1L, -2L, -3L, 2L, 
-4L, 0L, 0L, -1L, -5L, -1L, -4L, -3L, -4L, -2L, -3L, -4L, -4L, 
-4L, 5L, 2L, -3L, 2L, 0L, -3L, -3L, -1L, -3L, -1L, 4L, -4L, -3L, 
-1L, -5L, -2L, -3L, -4L, -4L, -2L, -2L, -3L, -4L, -3L, 2L, 5L, 
-3L, 3L, 1L, -4L, -3L, -1L, -2L, -1L, 1L, -4L, -3L, -1L, -5L, 
-1L, 3L, 0L, -1L, -3L, 2L, 1L, -2L, 0L, -3L, -3L, 6L, -2L, -4L, 
-1L, 0L, -1L, -3L, -2L, -3L, 0L, 1L, -1L, -5L, -1L, -2L, -2L, 
-4L, -2L, 0L, -2L, -3L, -1L, 2L, 3L, -2L, 7L, 0L, -3L, -2L, -1L, 
-1L, 0L, 1L, -3L, -1L, -1L, -5L, -3L, -3L, -4L, -5L, -2L, -4L, 
-3L, -4L, -1L, 0L, 1L, -4L, 0L, 8L, -4L, -3L, -2L, 1L, 4L, -1L, 
-4L, -4L, -2L, -5L, -1L, -3L, -2L, -1L, -4L, -1L, -1L, -2L, -2L, 
-3L, -4L, -1L, -3L, -4L, 10L, -1L, -1L, -4L, -3L, -3L, -2L, -1L, 
-2L, -5L, 1L, -1L, 1L, 0L, -1L, 0L, -1L, 0L, -1L, -3L, -3L, 0L, 
-2L, -3L, -1L, 5L, 2L, -4L, -2L, -2L, 0L, 0L, -1L, -5L, 0L, -1L, 
0L, -1L, -1L, -1L, -1L, -2L, -2L, -1L, -1L, -1L, -1L, -2L, -1L, 
2L, 5L, -3L, -2L, 0L, 0L, -1L, 0L, -5L, -3L, -3L, -4L, -5L, -5L, 
-1L, -3L, -3L, -3L, -3L, -2L, -3L, -1L, 1L, -4L, -4L, -3L, 15L, 
2L, -3L, -5L, -2L, -3L, -5L, -2L, -1L, -2L, -3L, -3L, -1L, -2L, 
-3L, 2L, -1L, -1L, -2L, 0L, 4L, -3L, -2L, -2L, 2L, 8L, -1L, -3L, 
-2L, -1L, -5L, 0L, -3L, -3L, -4L, -1L, -3L, -3L, -4L, -4L, 4L, 
1L, -3L, 1L, -1L, -3L, -2L, 0L, -3L, -1L, 5L, -4L, -3L, -1L, 
-5L, -2L, -1L, 4L, 5L, -3L, 0L, 1L, -1L, 0L, -4L, -4L, 0L, -3L, 
-4L, -2L, 0L, 0L, -5L, -3L, -4L, 5L, 2L, -1L, -5L, -1L, 0L, 0L, 
1L, -3L, 4L, 5L, -2L, 0L, -3L, -3L, 1L, -1L, -4L, -1L, 0L, -1L, 
-2L, -2L, -3L, 2L, 5L, -1L, -5L, -1L, -1L, -1L, -1L, -2L, -1L, 
-1L, -2L, -1L, -1L, -1L, -1L, -1L, -2L, -2L, -1L, 0L, -3L, -1L, 
-1L, -1L, -1L, -1L, -5L, -5L, -5L, -5L, -5L, -5L, -5L, -5L, -5L, 
-5L, -5L, -5L, -5L, -5L, -5L, -5L, -5L, -5L, -5L, -5L, -5L, -5L, 
-5L, -5L, 1L), .Dim = c(24L, 24L), .Dimnames = list(c("A", "R", 
"N", "D", "C", "Q", "E", "G", "H", "I", "L", "K", "M", "F", "P", 
"S", "T", "W", "Y", "V", "B", "Z", "X", "*"), c("A", "R", "N", 
"D", "C", "Q", "E", "G", "H", "I", "L", "K", "M", "F", "P", "S", 
"T", "W", "Y", "V", "B", "Z", "X", "*"))) 
+0

Использует ли 'apply (x, 2, as.numeric)' work? –

+0

@TadDallas вы имели в виду 'ex2 <- apply (ex, 2, as.numeric)'? Это не работает, если это то, что вы имели в виду. – estranged

+0

вы уверены, что хотите 'header = FALSE', поскольку у вас есть заголовок' A T C G'. Если это так, использование 'header = FALSE' сделает первую строку вашей матрицы этими метками, поэтому ваша матрица будет' character' – user20650

ответ

2

Похоже, ваш файл 'scoringMatrix' имеет пространство разделителями колонны, и что его вход только

ex = as.matrix(read.delim("scoringMatrix", sep="")) 

, который имеет Структура

> dput(ex) 
structure(c(5L, -2L, -1L, -2L, -2L, 7L, -1L, -2L, -1L, -1L, 7L, 
2L, -2L, -2L, 2L, 8L), .Dim = c(4L, 4L), .Dimnames = list(c("A", 
"T", "C", "G"), c("A", "T", "C", "G"))) 

На вашем входе не было никаких символов табуляции \t, поэтому каждая строка была прочитана как один столбец. И row.names=1 означает, что один столбец назначается в качестве имен строк - так у вас есть 5 строк и нулевых столбцов

> read.table("scoringMatrix", sep="\t", header=FALSE, row.names=1) 
data frame with 0 columns and 5 rows 

Принуждение это к матрице результатов в 5 х 0 матрицы, и то, что вы видите в вашем исходным отображением являются имена строк (!) матрицы.

Это может быть создан в R «вручную», как это было предложено @DavidArenburg с

matrix(c(5, -2, -1, -2, 
     -2, 7, -1, -2, 
     -1, -1, 7, 2, 
     -2, -2, 2, 8), 
     nrow=4, ncol=4, 
     dimnames=list(
     c("A", "C", "G", "T"), 
     c("A", "C", "G", "T")), 
     byrow=TRUE) 
+0

Это сработало! Спасибо за хорошее объяснение. – estranged

+1

OP фактически создал эту матрицу вручную с помощью текстового редактора. Другим вариантом было бы создать аналогичную матрицу, используя R. Что-то вроде 'head (BLOSUM50 [, 1: 4], 4)' –

+0

@Martin, о, это отличная информация о том, как его создать вручную. – estranged

2

Другим вариантом является просто выбрать нужный столбец/строки из BLOSUM50 с помощью match и избежать создания этого файла вручную текстовый редактор, в первую очередь

indx <- match(c("A", "T", "C", "G"), rownames(BLOSUM50)) 
BLOSUM50[indx, indx] 
# A T C G 
# A 5 0 -1 0 
# T 0 5 -1 -2 
# C -1 -1 13 -3 
# G 0 -2 -3 8 
Смежные вопросы