Изменение меток наконечников для многофилового объекта


person user11501147    schedule 27.08.2019    source источник


Ответы (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
comment
В дополнение к этому, ему нужен вектор, чтобы определить, какие имена старые, а какие новые. Я бы заменил одну строку в функции на tree $ tip.label ‹- new_names [match (tree $ tip.label, old_names)], где new_names и old_names являются столбцами с именами таксонов. Таким образом, вам не нужно беспокоиться о порядке. - person user2352714; 09.01.2021