[Bioc-devel] small request on graph::graphBAM()

Robert Castelo robert.castelo at upf.edu
Thu Feb 7 01:10:08 CET 2013


dear maintainers of the graph package,

i have a small request for the constructor function graphBAM() from the 
graph package.

the current help page of the graphBAM() constructor says the following 
about the argument called 'nodes':

A character vector of node labels. Use this to add degree
zero nodes to the graph. If ‘NULL’, the set of nodes found
in ‘from’ and ‘to’ will be used.

It would be great if when nodes != NULL and includes the set of nodes 
found in 'from' and 'to', 'nodes' would be taken as the set of nodes of 
the graph, without re-ordering it.

currently this function has the following line (*):

nodes <- sort(unique(c(as.character(df$from), as.character(df$to), nodes)))

this is a bit of a headache for me because the alphabetical ordering of 
vertices does not respect integer ordering (obviously):

library(graph)
df <- data.frame(from=paste0("Y", 1:10), to=paste0("Y", 2:11), 
weight=rep(1, 10))
nodes(graphBAM(df, nodes=paste0("Y", 1:10)))
[1] "Y1" "Y10" "Y11" "Y2" "Y3" "Y4" "Y5" "Y6" "Y7" "Y8" "Y9"

however, because i often deal with vectors of vertex labels created as

v <- paste0("Y", 1:p)

with p whatever positive integer, my vector of vertex labels is not 
identical to the vector returned by graph::nodes() which complicates the 
way i have to deal with this feature. re-ordering my vector of vertex 
labels by alphabetical order implies doing it *each* time i do one of 
those 'paste0()' calls, which is quite often, and this seems quite 
common, see 
http://simplystatistics.org/2013/01/31/paste0-is-statistical-computings-most-influential-contribution-of-the-21st-century 
:)

for this reason it would be great for me if the argument 'nodes' in 
graphBAM() would have this additional functionality of forcing an 
ordering on the vertex labels when 'nodes' include all vertices forming 
the given edges.

i think this would amount to replacing the line above (*) by

stopifnot(all(!duplicated(nodes))) ## given nodes should be unique
edgeNodes <- unique(c(as.character(df$from), as.character(df$to))
if (!all(edgeNodes %in% nodes))
nodes <- sort(unique(c(nodesEdges, nodes)))

note that with this code when one just adds extra degree zero nodes, the 
behavior does not change with respect to what it is doing right now and 
if one likes to stick to the alphabetical ordering, you can always give 
'nodes=sort(myvertexlabels)' as argument to the graphBAM() constructor 
function.

thanks!!
robert.



More information about the Bioc-devel mailing list