Published
Edited
Apr 19, 2020
1 star
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
tips = _.each(tree.get_tips(), (d => _.extend(d.data, {characters : [d.data.name], cost : 0})));
Insert cell
Insert cell
completed = tree.nodes.eachAfter(d => {
if(d.children && tips) {
let inter = _.intersection(..._.map(d.children, c => c.data.characters));
if(inter.length > 0) {
d.data.characters = inter;
d.data.cost = _.sumBy(d.children, c => c.data.cost);
} else {
d.data.characters = _.union(..._.map(d.children, c => c.data.characters))
d.data.cost = _.sumBy(d.children, c => c.data.cost) + 1;
}
}
})
Insert cell
Insert cell
Insert cell
Insert cell
reconstructed = completed.eachBefore(d => {
if(d.data.name == "root") {
// Pick ancestral state from set
d.data.asr = _.nth(d.data.characters, _.random(0, d.data.characters.length - 1 ))
} else {
// Let w be the parent node of v
let w = d.parent;
// if c(w) ∈ S(v) then set c(v) = c(w)
if(_.indexOf(d.data.characters, w.data.asr) >= 0) {
d.data.asr = w.data.asr;
} else {
d.data.asr = _.nth(d.data.characters, _.random(0, d.data.characters.length - 1 ))
}
}
})
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more