| \name{classesToAM} |
| \alias{classesToAM} |
| \title{ |
| Compute an Adjacency Matrix for Superclasses of Class Definitions |
| } |
| \description{ |
| Given a vector of class names or a list of class definitions, the |
| function returns an adjacency matrix of the superclasses of these |
| classes; that is, a matrix with class names as the row and column |
| names and with element [i, j] being 1 if the class in column j is a |
| direct superclass of the class in row i, and 0 otherwise. |
| |
| The matrix has the information implied by the \code{contains} slot of |
| the class definitions, but in a form that is often more convenient for |
| further analysis; for example, an adjacency matrix is used in packages |
| and other software to construct graph representations of relationships. |
| } |
| \usage{ |
| classesToAM(classes, includeSubclasses = FALSE, |
| abbreviate = 2) |
| } |
| \arguments{ |
| \item{classes}{ |
| Either a character vector of class names or a list, whose |
| elements can be either class names or class definitions. The |
| list is convenient, for example, to include the package slot for |
| the class name. See the examples. |
| } |
| \item{includeSubclasses}{ |
| A logical flag; if \code{TRUE}, then the matrix will include all |
| the known subclasses of the specified classes as well as the |
| superclasses. The argument can also be a logical vector of the |
| same length as \code{classes}, to include subclasses for some |
| but not all the classes. |
| } |
| \item{abbreviate}{ |
| Control of the abbreviation of the row and/or column labels of |
| the matrix returned: values 0, 1, 2, or 3 abbreviate neither, |
| rows, columns or both. The default, 2, is useful for printing |
| the matrix, since class names tend to be more than one |
| character long, making for spread-out printing. Values of 0 |
| or 3 would be appropriate for making a graph (3 avoids the |
| tendency of some graph plotting software to produce labels in |
| minuscule font size). |
| } |
| } |
| \details{ |
| For each of the classes, the calculation gets all the superclass |
| names from the class definition, and finds the edges in those classes' |
| definitions; that is, all the superclasses at distance 1. The |
| corresponding elements of the adjacency matrix are set to 1. |
| |
| The adjacency matrices for the individual class definitions are |
| merged. Note two possible kinds of inconsistency, neither of which |
| should cause problems except possibly with identically named classes from |
| different packages. Edges are computed from each superclass |
| definition, so that information overrides a possible inference from |
| extension elements with distance > 1 (and it should). When |
| matrices from successive classes in the argument are merged, the |
| computations do not currently check for inconsistencies---this is |
| the area where possible multiple classes with the same name could |
| cause confusion. A later revision may include consistency checks. |
| } |
| \value{ |
| As described, a matrix with entries 0 or 1, non-zero values |
| indicating that the class corresponding to the column is a direct |
| superclass of the class corresponding to the row. The row and |
| column names are the class names (without package slot). |
| } |
| |
| |
| \seealso{ |
| \code{\link{extends}} and \linkS4class{classRepresentation} for the underlying information from the class |
| definition. |
| } |
| \examples{ |
| |
| ## the super- and subclasses of "standardGeneric" |
| ## and "derivedDefaultMethod" |
| am <- classesToAM(list(class(show), class(getMethod(show))), TRUE) |
| am |
| |
| \dontrun{ |
| ## the following function depends on the Bioconductor package Rgraphviz |
| plotInheritance <- function(classes, subclasses = FALSE, ...) { |
| if(!require("Rgraphviz", quietly=TRUE)) |
| stop("Only implemented if Rgraphviz is available") |
| mm <- classesToAM(classes, subclasses) |
| classes <- rownames(mm); rownames(mm) <- colnames(mm) |
| graph <- new("graphAM", mm, "directed", ...) |
| plot(graph) |
| cat("Key:\n", paste(abbreviate(classes), " = ", classes, ", ", |
| sep = ""), sep = "", fill = TRUE) |
| invisible(graph) |
| } |
| |
| ## The plot of the class inheritance of the package "graph" |
| require(graph) |
| plotInheritance(getClasses("package:graph")) |
| |
| } |
| } |
| |
| \keyword{classes} |
| \keyword{programming} |