Ответ и вопрос связаны с этим сообщением: Измените метки подсказок в филогении в R < / а>. У меня есть старые ярлыки для наконечников, которые я хочу заменить новыми ярлыками для наконечников из-за таксономических изменений. Как мне сделать это с объектом multiPhylo в R? У меня есть случайное распределение деревьев от апостериорного, которое я хотел бы обновить, добавив новые таксономические имена.
Изменение меток наконечников для многофилового объекта
Ответы (1)
Объекты multiPhylo
- это просто списки phylo
объектов, поэтому лучший способ их изменить - использовать lapply
.
Сначала вы должны определить функцию, позволяющую переименовывать подсказки
## Function for renaming tips
rename.tips.phylo <- function(tree, names) {
tree$tip.label <- names
return(tree)
}
Затем вы можете применить его к сколь угодно большому количеству деревьев:
## Generating 50 random 5 tips trees
random_trees <- rmtree(50, 5)
## Renaming all the tips
random_trees_renamed <- lapply(random_trees, rename.tips.phylo,
names = c("A", "B", "C", "D", "E"))
Однако на выходе будет список, поэтому вам придется вручную переключить класс обратно на multiPhylo
:
## Class of the original object
class(random_trees)
#[1] "multiPhylo"
## Class of the renamed trees
class(random_trees_renamed)
#[1] "list"
## Changing the class
class(random_trees_renamed) <- "multiPhylo"
class(random_trees_renamed)
#[1] "multiPhylo"
И теперь все ваши ярлыки чаевых были переименованы:
## First tree
random_trees_renamed[[1]]$tip.label
#[1] "A" "B" "C" "D" "E"
## 42nd tree
random_trees_renamed[[42]]$tip.label
#[1] "A" "B" "C" "D" "E"
person
Thomas Guillerme
schedule
28.08.2019
В дополнение к этому, ему нужен вектор, чтобы определить, какие имена старые, а какие новые. Я бы заменил одну строку в функции на tree $ tip.label ‹- new_names [match (tree $ tip.label, old_names)], где new_names и old_names являются столбцами с именами таксонов. Таким образом, вам не нужно беспокоиться о порядке.
- person user2352714; 09.01.2021