Я выполняю анализ начальной загрузки в R с использованием алгоритма максимальной экономии (pratchet () в библиотеке ape). Когда я запускаю анализ некорневых деревьев (созданных с помощью функции pratchet ()), начальная загрузка выполняется нормально. Но когда я хочу получить root-права для каждого загруженного дерева, прежде чем найти поддержку начальной загрузки, я получаю ошибку при случайном укоренении на любом из 100 деревьев. Обратите внимание, что это происходит перед вызовом любого кода для вычисления поддержки разделения или клады.
Если я использую алгоритм присоединения соседей (nj () в ape), проблем с рутированием вообще или с загрузкой в нисходящем направлении не возникает, но, по-видимому, это происходит (случайным образом) при рутировании деревьев на основе экономичности с использованием внешней группы. Странная вещь, которую я заметил, заключается в том, что если я записываю некорневые деревья в файл перед их укоренением (в случае возникновения ошибки при укоренении), а затем хочу их укоренить, это работает отлично.
Вот код, который я использую для анализа.
performBootstraping = function(charMatrix, bsIterations) {
# charMatrix is a DNA alignment matrix
# bsIteration are number of bootstrap iterations.
library(phangorn)
phySeq = phyDat(charMatrix)
treeMPRooted = getRootedParsimonyTree(charMatrix)
bValuesMP = boot.phylo(treeMPRooted, charMatrix, FUN=function(xx) {tt = getRootedParsimonyTree(xx); return(tt) },
B = bsIterations, trees=T, rooted=T)
# convert to percentage
bValues = bValuesMP$BP/bsIterations * 100;
plot(treeMPRooted, use.edge.length = F);
title('Max Parsimony tree with bootstrap percentage')
nodelabels(bValues, frame = 'rect')
# write the tree as newick
write.tree(treeMPRooted, paste0(outDir,'/rooted_MP.tree'))
return(bValuesMP)
}
getRootedParsimonyTree = function(cMatrix) {
phySeq = phyDat(cMatrix);
treeMP = pratchet(phySeq)
treeMPRooted = root(treeMP, outgroup='Germline', resolve.root=T)
return(treeMPRooted)
}
Вот трассировка стека и ошибка
Error in phy$edge[sndcol, 2] <- newNb[phy$edge[sndcol, 2]] <- n + 2:phy$Nnode :
number of items to replace is not a multiple of replacement length
6 root(treeMP, outgroup = "Germline", resolve.root = T) at libaryFunctions.R#105
5 getRootedParsimonyTree(xx) at libaryFunctions.R#32
4 FUN(x[, boot.samp])
3 boot.phylo(treeMPRooted, t.vaf, FUN = function(xx) {
tt = getRootedParsimonyTree(xx)
return(tt)
}, B = bstrapCount, trees = T, rooted = T) at libaryFunctions.R#32
2 performBootstraping(vaf, outDir, i, bsIterations) at runAllSitesBootstrapForAllPatients.R#15
1 runAllSitesBootstrapForAllPatients(ccfFileDir = ccfDir, outDirPref = outDir)
In addition: Warning message:
In newNb[phy$edge[sndcol, 2]] <- n + 2:phy$Nnode :
number of items to replace is not a multiple of replacement length