From tal.galili at gmail.com  Mon May 18 22:01:44 2015
From: tal.galili at gmail.com (Tal Galili)
Date: Mon, 18 May 2015 23:01:44 +0300
Subject: [Rd] A "bug" in plot.dendrogram - can't plot lty with character
	color
Message-ID: <CANdJ3dXzdw+D-Bk3_rEeYh4RSTNq4TYj-tYK2wqTQ36UYZ=BZA@mail.gmail.com>

The problem:
===========
Once a dendrogram has a branch with both a line type AND a color (which is
a character color), the plot.dendrogram function will not plot and return
an error.

I say this is a bug because (I believe), we would like a dendrogram to be
able to use character colors, while also allowing control over line types.



This e-mail includes an example, and what I think a solution might be.

Reproducible example:
=================

install.packages('dendextend')
library('dendextend')

dend <- 1:2 %>% dist %>% hclust %>% as.dendrogram
plot(dend) # works fine

dend %>% set("branches_lty", 1:2) %>% plot # works fine
dend %>% set("branches_col", 1:2) %>% plot # works fine
dend %>% set("branches_col", as.character(1:2)) %>% plot # works fine
# Fails:
dend %>% set("branches_lty", 1:2) %>% set("branches_col",
as.character(1:2)) %>% plot

### Error:
# Error in segments(x0, y0, x1, y1, col = col, lty = lty, lwd = lwd) :
#    invalid line type: must be length 2, 4, 6 or 8

# This is because edgePar has to hold both "lty" and "col"
# Since "col" is a character, it forces "lty" to become a character also.
dend %>% set("branches_lty", 1:2) %>% set("branches_col",
as.character(1:2)) %>%
   unclass %>% str



Possible solution
==============
The simplest (and backward) compatible solution I can think of is to edit
the function:
stats:::plotNode

And change the following lines:
         col <- Xtract("col", ePar, default = par("col"),
                       i)
         lty <- Xtract("lty", ePar, default = par("lty"),
                       i)
         lwd <- Xtract("lwd", ePar, default = par("lwd"),
                       i)

With:

         col <- Xtract("col", ePar, default = par("col"),
                       i)
         lty <- as.numeric(Xtract("lty", ePar, default = par("lty"),
                       i))
         lwd <- as.numeric(Xtract("lwd", ePar, default = par("lwd"),
                       i))




With regards,
Tal

	[[alternative HTML version deleted]]



[Rd] A "bug" in plot.dendrogram - can't plot lty with character color
Tal Galili