Допустим, у нас есть список (имён) листов дерева t$tip.label, а также список граней t$edges (всегда от корня в сторону листа).
Список граней, это int [1:..., 1:2] (список пар вида вершина-вершина; от корня к листу).
Допустим у нас есть некая функция присвоения значений граням, которая распространяется начиная с листов к корню. Простейший пример: каждой гране присваиваем значение, соответствующее сумме значений для поддерева, растущего из этой грани.
Как это нужно реализовывать в R? Поигрался с рекурсией, но получил слишком глубокую рекурсию.
my_tip_function <- function(l)rep(1,times=length(l))
my_edge_function <- function(edges,tip.label) ifelse (is.na(tip.label[edges[,2]]),sum(my_edge_function(edges,tip.label)[sapply(edges[,2], function(x) edges[which(edges[,1]==x)])]),my_tip_function(tip.label))
Допустим:
edge=matrix(c(4,1,4,5,5,3,5,2),ncol=2,byrow=T)
tips=c('a','b','c')
my_edge_function(edge,tips)
Ошибка: исполнение расположено слишком глубоко: неопределенная рекурсия / options(expressions=)?
Что может быть не так?