igraph (version 1.0.0)

[.igraph: Query and manipulate a graph as it were an adjacency matrix

Description

Query and manipulate a graph as it were an adjacency matrix

Usage

## S3 method for class 'igraph':
[(x, i, j, ..., from, to,
  sparse = igraph_opt("sparsematrices"), edges = FALSE, drop = TRUE,
  attr = if (is_weighted(x)) "weight" else NULL)

Arguments

x
The graph.
i
Index. Vertex ids or names or logical vectors. See details below.
j
Index. Vertex ids or names or logical vectors. See details below.
...
Currently ignored.
from
A numeric or character vector giving vertex ids or names. Together with the to argument, it can be used to query/set a sequence of edges. See details below. This argument cannot be present together with any of the i and j
to
A numeric or character vector giving vertex ids or names. Together with the from argument, it can be used to query/set a sequence of edges. See details below. This argument cannot be present together with any of the i and j
sparse
Logical scalar, whether to return sparse matrices.
edges
Logical scalar, whether to return edge ids.
drop
Ignored.
attr
If not NULL, then it should be the name of an edge attribute. This attribute is queried and returned.

Value

  • A scalar or matrix. See details below.

Details

The single bracket indexes the (possibly weighted) adjacency matrix of the graph. Here is what you can do with it:

  1. Check whether there is an edge between two vertices ($v$and$w$) in the graph:graph[v, w]A numeric scalar is returned, one if the edge exists, zero otherwise.
  2. Extract the (sparse) adjacency matrix of the graph, or part of it:graph[] graph[1:3,5:6] graph[c(1,3,5),]The first variants returns the full adjacency matrix, the other two return part of it.
  3. Thefromandtoarguments can be used to check the existence of many edges. In this case, bothfromandtomust be present and they must have the same length. They must contain vertex ids or names. A numeric vector is returned, of the same length asfromandto, it contains ones for existing edges edges and zeros for non-existing ones. Example:graph[from=1:3, to=c(2,3,5)].
  4. For weighted graphs, the[operator returns the edge weights. For non-esistent edges zero weights are returned. Other edge attributes can be queried as well, by giving theattrargument.
  5. Querying edge ids instead of the existance of edges or edge attributes. E.g.graph[1, 2, edges=TRUE]returns the id of the edge between vertices 1 and 2, or zero if there is no such edge.
  6. Adding one or more edges to a graph. For this the element(s) of the imaginary adjacency matrix must be set to a non-zero numeric value (orTRUE):graph[1, 2] <- 1 graph[1:3,1] <- 1 graph[from=1:3, to=c(2,3,5)] <- TRUEThis does not affect edges that are already present in the graph, i.e. no multiple edges are created.
  7. Adding weighted edges to a graph. Theattrargument contains the name of the edge attribute to set, so it does not have to beweight:graph[1, 2, attr="weight"]<- 5 graph[from=1:3, to=c(2,3,5)] <- c(1,-1,4)If an edge is already present in the network, then only its weigths or other attribute are updated. If the graph is already weighted, then theattr="weight"setting is implicit, and one does not need to give it explicitly.
  8. Deleting edges. The replacement syntax allow the deletion of edges, by specifyingFALSEorNULLas the replacement value:graph[v, w] <- FALSEremoves the edge from vertex$v$to vertex$w$. As this can be used to delete edges between two sets of vertices, either pairwise:graph[from=v, to=w] <- FALSEor not:graph[v, w] <- FALSEif$v$and$w$are vectors of edge ids or names.

[ allows logical indices and negative indices as well, with the usual R semantics. E.g. graph[degree(graph)==0, 1] <- 1 adds an edge from every isolate vertex to vertex one, and G <- make_empty_graph(10) G[-1,1] <- TRUE creates a star graph.

Of course, the indexing operators support vertex names, so instead of a numeric vertex id a vertex can also be given to [ and [[.

See Also

Other structural queries: [[.igraph; adjacent_vertices; are.connected, are_adjacent; ecount, gsize; ends, get.edge, get.edges; get.edge.ids; gorder, vcount; head_of; incident_edges; incident; is.directed, is_directed; neighbors; tail_of