2015-07-08 2 views
3

Я хотел бы построить две филогении друг против друга в R, используя пакет ape. Одно дерево имеет 40 узлов, и один имеет 26 узлов:Участок филогенетических деревьев лицом к лицу со ссылками в R

library(ape) 
tree1 <- rtree(40) 
tree2 <- rtree(26) 

cophyloplot графики функций этих лицом к лицу с заданными связями.

У меня возникли проблемы с указанием ссылок.

Обратите внимание, что в моих фактических файлах дерева nexus метки меток являются текстом (и я не уверен, как их изменить на цифры, если необходимо ...).

Ссылки должны быть следующими:

Если в файле tree1 связующей, кончик метки последовательностей являются 1-40. В файле nexus метки меток 1-26. Тогда ссылки должны быть:

a <- c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40) 
b <- c(14,1,4,1,9,12,2,10,6,3,13,5,14,15,18,19,19,7,14,9,10,11,25,22,21,16,23,24,26,17,1,12,12,21,15,16,21,8,20,21) 
association <- cbind(a, b) 

(т.е. последовательность 1 в tree1 связана с последовательностью 14 в tree2)

Итак, я использовать что-то вроде этого, чтобы построить деревья:

cophyloplot(tree1, tree2, assoc=association,length.line=4, space=28, gap=10, rotate=TRUE) 

И рассчитать матрицу расстояний:

dist.topo(tree1, tree2, method = "PH85") 

Я не совсем уверен где я ошибаюсь. Любая помощь будет оценена!

ответ

4

Чтобы построить деревья, попробуйте этот

library(ape) 
set.seed(1) 

# create trees 
tree1 <- rtree(40) 
tree2 <- rtree(26) 

# modify tip labels 
tree1$tip.label <- sub("t", "", tree1$tip.label, fixed = T) 
tree2$tip.label <- sub("t", "", tree2$tip.label, fixed = T) 

# create associations matrix 
a <- as.character(c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40)) 
b <- as.character(c(14,1,4,1,9,12,2,10,6,3,13,5,14,15,18,19,19,7,14,9,10,11,25,22,21,16,23,24,26,17,1,12,12,21,15,16,21,8,20,21)) 
association <- cbind(a, b) 

# plot 
cophyloplot(tree1, tree2, assoc = association, length.line = 4, space = 28, gap = 3) 

enter image description here

+0

спасибо !! Я получаю следующую ошибку: 'Ошибка в decx [i] <- strwidth (x $ tip.label [lsa [x $ tip.label == assoc [i, 1]]]): замена имеет длину 0 Поэтому я попробовал 'tree1 $ tip.label <- (1:40) tree2 $ tip.label <- (1:26)' – user2861089

1

cophyloplot функция не требует индексации метки наконечника. Можно назвать таксоны своими именами. Обратите внимание, что ответ lukeA хранит числа из ассоциаций как character. Преобразование их в текст, соответствующий меток подсказок, и построение двух деревьев показывает тот же результат.

association <- apply(association, 2, function(x) sub("^","t", x)) 

head(association) 
#  a b  
# [1,] "t1" "t14" 
# [2,] "t2" "t1" 
# [3,] "t3" "t4" 
# [4,] "t4" "t1" 
# [5,] "t5" "t9" 

cophyloplot(tree1, tree2, assoc=association, length.line=4, space=28, gap=3) 

Порядок, в котором ассоциации указаны в матрице, не имеет значения. Лучшей практикой было бы импортировать их из внешнего файла с read.table().

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