Как исправить «плохо согласованное» филогенетическое дерево, чтобы построить его в R?

Я пытаюсь построить дерево предполагаемой филогении эвкалипта в R, используя пакет ape. Дерево взято из файла нексуса (Eucalypt_Bayes_dated_character_mapped.nex), который я скачал с веб-сайта CSIRO (https://data.csiro.au/collection/csiro:33546v2).

Я получаю следующую ошибку:

> plot(euc.tr)
Error in plot.phylo(euc.tr) : tree badly conformed; cannot plot. Check the edge matrix.

Я попытался посмотреть на euc.tr$edge, чтобы увидеть, могу ли я найти какие-либо ошибки, но изо всех сил пытаюсь понять, как числа в матрице должны соответствовать дереву, и я не уверен, что подразумевается под «плохо согласованным», даже после поиска в Google и руководстве по обезьянам.

Когда я открываю файл нексуса в Mesquite вместо R, я не вижу ничего необычного в дереве.

Резюме объекта филогенетического дерева в R:

> summary(euc.tr)

Phylogenetic tree: euc.tr 

  Number of tips: 674 
  Number of nodes: 568 
  Branch lengths:
    mean: 2.436121 
    variance: 23.99677 
    distribution summary:
     Min.   1st Qu.    Median   3rd Qu.      Max. 
 0.000728  0.118585  0.477268  2.297975 50.513412 
  No root edge.
  First ten tip labels: Angophora_bakeri 
                        Angophora_costata
                        Angophora_exul
                        Angophora_floribunda
                        Angophora_hispida
                        Angophora_inopina
                        Angophora_melanoxylon
                        Angophora_robur
                        Angophora_subvelutina
                        Angophora_woodsiana
  No node labels.

Заголовок матрицы ребер (из которых 1241 строк):

> head(euc.tr$edge)
     [,1] [,2]
[1,]  675  676
[2,]  676  677
[3,]  677  678
[4,]  678 6240
[5,]  678  679
[6,]  679  680
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
41
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема возникает из-за того, что матрица ребер содержит неверные значения: tail(euc.tr$edge) включает запись 62283, но все значения должны относиться к подсказке или внутреннему узлу, поэтому должно быть < nTip + nNode, то есть 674+568 = 1242.

Таким образом, похоже, что вы столкнулись с ошибкой в ​​​​функции обезьяны read.nexus(), возможно, вызванной тем, что функция пытается проанализировать форматирование Mesquite файла nexus: в частности, таблица перевода использует n### вместо просто чисел (###), чтобы указать, как подсказки переведены. Я бы предложил регистрируя это как ошибку в пакете ape.

Тем временем мне удалось построить дерево, отредактировав файл нексуса:

  • В строке 1377 замените все послеTREE tree_1 = содержимым из между одинарных кавычек ' в команде setTree в строке 1497 файла.

  • Удалите все после команды END; в строке 1379.

Благодарю вас! Мне также удалось построить дерево, используя изменения, которые вы внесли в файл nexus.

cflax 27.04.2022 04:18

Другие вопросы по теме