Я хочу создать дерево (кластер) с помощью веб-инструмента Interactive Tree of Life (iTOL). В качестве входного файла (или строки) этот инструмент использует формат Ньюика, который является способом представления графика -теоретические деревья с длинами ребер, используя круглые скобки и запятые. Кроме того, может поддерживаться дополнительная информация, такая как начальные значения узлов кластера.
Например, здесь я создал набор данных для кластерного анализа с помощью пакета clusterGeneration
:
library(clusterGeneration)
set.seed(1)
tmp1 <- genRandomClust(numClust=3, sepVal=0.3, numNonNoisy=5,
numNoisy=3, numOutlier=5, numReplicate=2, fileName="chk1")
data <- tmp1$datList[[2]]
После этого я выполнил анализ кластера и оценил поддержку узлов кластера с помощью начальной загрузки с использованием пакета pvclust
:
set.seed(2)
y <- pvclust(data=data,method.hclust="average",method.dist="correlation",nboot=100)
plot(y)
Вот значения кластера и начальной загрузки:
Чтобы создать файл Newick, я использовал пакет ape
:
library(ape)
yy<-as.phylo(y$hclust)
write.tree(yy,digits=2)
Функция write.tree
напечатает дерево в формате Ньюика:
((x2:0.45,x6:0.45):0.043,((x7:0.26,(x4:0.14,(x1:0.14,x3:0.14):0.0064):0.12):0.22,(x5:0.28,x8:0.28):0.2):0.011);
Эти числа представляют собой длины ветвей (длины ребер кластера). Следуя инструкциям со страницы справки iTOL (раздел "Загрузка собственных деревьев и работа с ними" ) Я вручную добавил загрузочные значения в свой файл Newick (значения выделены жирным шрифтом ниже):
((x2:0,45,x6:0,45)74:0,043,((x7:0,26,(x4:0,14,(x1:0,14,x3:0,14))55: 0,0064)68:0,12)100:0,22,(x5:0,28,x8:0,28)100:0,2)63 сильный>:0,011);
Он отлично работает, когда я загружаю строку в iTOL. Однако у меня огромный кластер, и делать это вручную кажется утомительным...
ВОПРОС: Какой код может выполнять это вместо ручного ввода?
Значения начальной загрузки можно получить:
(round(y$edges,2)*100)[,1:2]
Длина ветвей, используемая для формирования файла Ньюика, может быть получена следующим образом:
yy$edge.length
Я попытался понять, как работает функция write.tree
после ее отладки. Однако я заметил, что он внутри вызывает функцию .write.tree2
, и я не мог понять, как эффективно изменить исходный код и получить загрузочные значения в соответствующей позиции в файле Newick.
Любое предложение приветствуется.