farrellja / URD

URD - Reconstruction of Branching Developmental Trajectories
GNU General Public License v3.0
117 stars 41 forks source link

Force-directed tree drawing error #15

Closed concatenize closed 5 years ago

concatenize commented 6 years ago

Hi again Jeff. I've run into an issue with treeForceDirectedLayout. I am guessing that for this function to work, the @tree$segment.names slot is supposed to contain something, but mine is empty. Maybe it got renamed at some point? Here is an example URD object and reproduction code. Thanks!

URD object: treeforce_bug_example.Robj.gz

> library(magrittr)
> library(URD)
> my_urd_tree = readRDS("path/to/unzipped/attached/file.Robj")
> my_urd_tree %<>% treeForceDirectedLayout

Error in data.frame(seg = segTerminal(object), name = object@tree$segment.names[segTerminal(object)],  : 
  arguments imply differing number of rows: 2, 0

> dge_urd_tree@tree$segment.names
NULL
> dge_urd_tree@tree %>% names %>% grep("segment", value = T, .)
[1] "segment.pseudotime.limits" "segment.divergence"        "segment.joins"             "segments"                 "segment.joins.initial"     "cells.in.segment"          "segment.layout"     

Output of traceback():

4: stop(gettextf("arguments imply differing number of rows: %s", 
       paste(unique(nrows), collapse = ", ")), domain = NA)
3: data.frame(seg = segTerminal(object), name = object@tree$segment.names[segTerminal(object)], 
       name.short = object@tree$segment.names.short[segTerminal(object)], 
       stringsAsFactors = F, row.names = segTerminal(object))
2: treeForcePositionLabels(object)
1: treeForceDirectedLayout(dge_urd_tree, tips = tip_cells)
farrellja commented 5 years ago

Hi again, Eric. Sorry for the long response time.

A quick workaround is to name the segments:

my_urd_tree <- nameSegments(my_urd_tree, c("28", "51"), segment.names=c("A", "B"), short.names = c("A","B"))
my_urd_tree <- treeForceDirectedLayout(my_urd_tree)
plotTreeForce(my_urd_tree, "Insig2")

However, I've also updated the debug branch of URD to correct this bug, so you can also reinstall URD from the debug branch, and it should now correctly generate a force-directed layout without named segments.

Also, thank you for submitting your reports with such nice miniature examples for debugging. It is very much appreciated.

Jeff