<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">
<br><div><html>On Mar 24, 2008, at 11:49 AM, Ben Bolker wrote:</html><br class="Apple-interchange-newline"><blockquote type="cite"><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Peter Cowan wrote:</div> <blockquote type="cite"><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">On Mar 23, 2008, at 3:19 PM, Ben Bolker wrote:</div> <blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">For my own edification let me see if I understand what folks are</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">thinking.<span class="Apple-converted-space">  </span>There are two aspects of a phylo object under discussion</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">the node index and the node labels.<span class="Apple-converted-space">  </span>As far as node labels are</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">concerned there is agreement that these need to be arbitrary with no</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">restrictions on being unique, or even existing.</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">However, there is a discussion about node indices, and whether they</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">should be enforced to be<span class="Apple-converted-space">  </span>an ordered vector from 1:Nnodes.</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">One argument for keeping them 1:Nnodes is that it is easier to iterate</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">over the nodes this way.<span class="Apple-converted-space">  </span>I can see that, but looping for each in R is</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">easy, is there an example where this would be difficult?</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">One argument for just using a number is that it become easier to</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">compare trees, but this require expose the node indices to end users.</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">I'm not sure this has much value for the end users who generally don't</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">care much for the internal representation of the tree.<span class="Apple-converted-space">  </span>Is there a</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">value to developers to have non consecutive node indices?</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Steve's proposed solution to the tree comparison/tracking issue is to</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">use node labels (not indices), this would require a richer node label</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">model than the one currently implemented.<span class="Apple-converted-space">  </span>I think Steve has a node</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">label data frame in mind.<span class="Apple-converted-space">  </span>That would allow unique node label</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">information to sit next to potentially non-unique node label</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">information.<span class="Apple-converted-space">  </span>This seems overly complex to me.<span class="Apple-converted-space">  </span>A phylo4D object</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">already has a node data data frame, which has unique row names,</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">perhaps this should be used instead?</div> </blockquote></blockquote><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Back to where we started -- we can't do this because **data frame</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">row names are required to be unique**.</div> </blockquote><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">This will teach me to flippantly throw out an idea with out thinking about it carefully, I'm not sure it would even work.<span class="Apple-converted-space">  </span>However, the idea was, that if we are looking for a unique index by which to compare two trees derived from a larger tree, then the row names of the node data data frame should show the differences, because row names are retained after subsetting.</div> </blockquote><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">  </span>If you look at prune.R, you'll see that when pruning (which is exactly</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">such a case where we need to keep track of correspondence, so that we</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">can drop the appropriate node data), we create a temporary set of</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">"tags" to use in matching before vs. after -- assign them to</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">the rownames of the node data -- and use them to subset the node data.</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">   </span>This strategy would work generally -- if we spent a lot of time</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">generating such tags I guess I could see a point to saving them</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">internally, but I don't think this will change the external API.</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">So we would only need to tell people about them if we wanted developers</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">to be able to use them.</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; "><span class="Apple-converted-space">  </span>Looking at prune.R makes me a little nervous that node labels aren't</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">getting handled correctly, but I would want to check carefully before</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">I went in there and started breaking stuff ...</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><br></div></blockquote></div><div> <span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Lucida Grande; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Lucida Grande; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ; font-size: 12px; ; font-family: Lucida Grande; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ; font-size: 12px; ; font-family: Lucida Grande; ">OK, last comment on this because I don't seem to be making sense to people:)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ; font-size: 12px; ; font-family: Lucida Grande; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ; font-size: 12px; ; font-family: Lucida Grande; ">In Ben's example above, all you have to do is use the node numbers themselves, rather than generate some temporary tags. </div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ; font-size: 12px; ; font-family: Lucida Grande; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ; font-size: 12px; ; font-family: Lucida Grande; "><span class="Apple-style-span" style="font-size: 13px; "><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 12px; font-family: 'Lucida Grande'; ">More important than developer convenience in this case, is user trust. It is easier for users to double check that they've really done what they wanted to do if there is an easily identifiable node number that they can look too.  Many users are uncomfortable when they can't verify.  And remember, most people can't write forensic code to verify tree manipulations on their own.</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-size: 12px; font-family: 'Lucida Grande'; "><br></div></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ; font-size: 12px; ; font-family: Lucida Grande; ">Thibaut made some good points and a suggestion:</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ; font-size: 12px; ; font-family: Lucida Grande; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ; font-size: 12px; ; font-family: Lucida Grande; "><blockquote type="cite"><blockquote type="cite"><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">Yes, I realize this. That is why I was insisting earlier that matching shouldn't be done on labels. Either they are labels for convenience or they are not. We can't have it both</div> <br></blockquote><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">I think we can, and should. One may want his/her data matched to the tree according to the tip labels. We can match data using node numbers by default, but an option in the constructor should still allow one to match data as we did previously. One argument for this is that node numbers are tree-dependent, while taxon names are not. A  user may try to match a single data.frame of traits with several different trees, and it would be a pain to have to rename/reorder the row.names each time.</div></blockquote><div><br></div><div>I agree, we should match on node numbers by default and tip labels as an option.</div><div><br></div><div>So just to be clear, my suggestion is to use node number as the matching value by default. Users can use the node numbers to associate their data with the tree. Printing a tree object will dump the node numbers. Alternatively, there is a phylo4 to data.frame function that they can use to retrieve the node numbers.</div><div><br></div><div>Alternatively, users can also match by species name (tip label), set as an option.</div></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ; font-size: 12px; ; font-family: Lucida Grande; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ; font-size: 12px; ; font-family: Lucida Grande; ">Marguerite</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ; font-size: 12px; ; font-family: Lucida Grande; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ; font-size: 12px; ; font-family: Lucida Grande; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ; font-size: 12px; ; font-family: Lucida Grande; "><span class="Apple-style-span" style="font-size: 12px; ; font-family: Lucida Grande; "><span class="Apple-style-span" style="font-size: 12px; ; font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; ">____________________________________________</span></span></span></span></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ; font-size: 12px; ; font-family: Lucida Grande; "><span class="Apple-style-span" style="font-size: 12px; ; font-family: Lucida Grande; "><span class="Apple-style-span" style="font-size: 12px; ; font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; ">Marguerite A. Butler</span></span></span></span></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ; font-size: 12px; ; font-family: Lucida Grande; "><span class="Apple-style-span" style="font-size: 12px; ; font-family: Lucida Grande; "><span class="Apple-style-span" style="font-size: 12px; ; font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; ">Department of Zoology</span></span></span></span></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ; font-size: 12px; ; font-family: Lucida Grande; "><span class="Apple-style-span" style="font-size: 12px; ; font-family: Lucida Grande; "><span class="Apple-style-span" style="font-size: 12px; ; font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; ">University of Hawaii</span></span></span></span></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ; font-size: 12px; ; font-family: Lucida Grande; "><font class="Apple-style-span" size="3"><span class="Apple-style-span" style="font-size: 13px;; font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; font-size: 13px; "><span class="Apple-style-span" style="font-family: Lucida Grande; font-size: 13px; "><span class="Apple-style-span" style="font-family: Lucida Grande; font-size: 13px; ">2538 McCarthy Mall, Edmondson 259</span></span></span></span></font></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Helvetica; min-height: 14px; ; font-family: Helvetica; ; font-size: 12px; "><span class="Apple-style-span" style="font-family: Helvetica; font-size: 12px; "><span class="Apple-style-span" style="font-family: Helvetica; font-size: 12px; ">Honolulu, HI  96822</span></span><br style="; font-family: Helvetica; ; font-size: 12px; "></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 12px/normal Helvetica; min-height: 14px; font-family: Helvetica; ; font-family: Helvetica; ; font-size: 12px; "><br class="khtml-block-placeholder"></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ; font-size: 12px; ; font-family: Lucida Grande; "><span class="Apple-style-span" style="font-size: 12px; ; font-family: Lucida Grande; "><span class="Apple-style-span" style="font-size: 12px; ; font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; ">Phone: 808-956-4713</span></span></span></span></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ; font-size: 12px; ; font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; ">Lab:  808-956-5867</span></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ; font-size: 12px; ; font-family: Lucida Grande; "><span class="Apple-style-span" style="font-size: 12px; ; font-family: Lucida Grande; "><span class="Apple-style-span" style="font-size: 12px; ; font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; ">FAX:   808-956-9812</span></span></span></span></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ; font-size: 12px; ; font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; ">Dept: 808-956-8617</span></span></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ; font-size: 12px; ; font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; "><a href="http://www.hawaii.edu/zoology/faculty/butler.html">http://www.hawaii.edu/zoology/faculty/butler.html</a></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ; font-size: 12px; ; font-family: Lucida Grande; "><span class="Apple-style-span" style="font-size: 12px; ; font-family: Lucida Grande; "><span class="Apple-style-span" style="font-size: 12px; ; font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; "><span class="Apple-style-span" style="font-family: Lucida Grande; "><a href="http://www2.hawaii.edu/~mbutler">http://www2.hawaii.edu/~mbutler</a></span></span></span></span></span></div><span class="Apple-style-span" style="font-family: Lucida Grande; font-size: 13px; "></span></span></span></span></span><div><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Lucida Grande; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px 0px; color: rgb(0, 0, 0); font-family: Lucida Grande; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-align: auto; -khtml-text-decorations-in-effect: none; text-indent: 0px; -apple-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="font-family: Lucida Grande; font-size: 13px; "><span class="Apple-style-span" style="font-family: Lucida Grande; font-size: 13px; "><span class="Apple-style-span" style="font-family: Lucida Grande; font-size: 13px; "><a href="http://www.hawaii.edu/zoology/">http://www.hawaii.edu/zoology/</a></span></span></span></span></span></span></span></div><br class="Apple-interchange-newline"></span> </div><br></body></html>