Learn R Programming

network (version 1.18.2)

network.extraction: Extraction and Replacement Operators for Network Objects

Description

Various operators which allow extraction or replacement of various components of a network object.

Usage

# S3 method for network
[(x, i, j, na.omit = FALSE)

# S3 method for network [(x, i, j, names.eval = NULL, add.edges = FALSE) <- value

x %e% attrname

x %e% attrname <- value

x %eattr% attrname

x %eattr% attrname <- value

x %n% attrname

x %n% attrname <- value

x %nattr% attrname

x %nattr% attrname <- value

x %v% attrname

x %v% attrname <- value

x %vattr% attrname

x %vattr% attrname <- value

Value

The extracted data, or none.

Arguments

x

an object of class network.

i, j

indices of the vertices with respect to which adjacency is to be tested. Empty values indicate that all vertices should be employed (see below).

na.omit

logical; should missing edges be omitted (treated as no-adjacency), or should NAs be returned? (Default: return NA on missing.)

names.eval

optionally, the name of an edge attribute to use for assigning edge values.

add.edges

logical; should new edges be added to x where edges are absent and the appropriate element of value is non-zero?

value

the value (or set thereof) to be assigned to the selected element of x.

attrname

the name of a network or vertex attribute (as appropriate).

Author

Carter T. Butts buttsc@uci.edu

Details

Indexing for edge extraction operates in a manner analogous to matrix objects. Thus, x[,] selects all vertex pairs, x[1,-5] selects the pairing of vertex 1 with all vertices except for 5, etc. Following this, it is acceptable for i and/or j to be logical vectors indicating which vertices are to be included. During assignment, an attempt is made to match the elements of value to the extracted pairs in an intelligent way; in particular, elements of value will be replicated if too few are supplied (allowing expressions like x[1,]<-1). Where names.eval==NULL, zero and non-zero values are taken to indicate the presence of absence of edges. x[2,4]<-6 thus adds a single (2,4) edge to x, and x[2,4]<-0 removes such an edge (if present). If x is multiplex, assigning 0 to a vertex pair will eliminate all edges on that pair. Pairs are taken to be directed where is.directed(x)==TRUE, and undirected where is.directed(x)==FALSE.

If an edge attribute is specified using names.eval, then the provided values will be assigned to that attribute. When assigning values, only extant edges are employed (unless add.edges==TRUE); in the latter case, any non-zero assignment results in the addition of an edge where currently absent. If the attribute specified is not present on a given edge, it is added. Otherwise, any existing value is overwritten. The %e% operator can also be used to extract/assign edge values; in those roles, it is respectively equivalent to get.edge.value(x,attrname) and set.edge.value(x,attrname=attrname,value=value) (if value is a matrix) and set.edge.attribute(x,attrname=attrname,value=value) (if value is anything else). That is, if value is a matrix, the assignment operator treats it as an adjacency matrix; and if not, it treats it as a vector (recycled as needed) in the internal ordering of edges (i.e., edge IDs), skipping over deleted edges. In no case will attributes be assigned to nonexisted edges.

The %n% and %v% operators serve as front-ends to the network and vertex extraction/assignment functions (respectively). In the extraction case, x %n% attrname is equivalent to get.network.attribute(x,attrname), with x %v% attrname corresponding to get.vertex.attribute(x,attrname). In assignment, the respective equivalences are to set.network.attribute(x,attrname,value) and set.vertex.attribute(x,attrname,value). Note that the %% assignment forms are generally slower than the named versions of the functions beause they will trigger an additional internal copy of the network object.

The %eattr%, %nattr%, and %vattr% operators are equivalent to %e%, %n%, and %v% (respectively). The short forms are more succinct, but may produce less readable code.

References

Butts, C. T. (2008). “network: a Package for Managing Relational Data in R.” Journal of Statistical Software, 24(2). https://www.jstatsoft.org/v24/i02/

See Also

is.adjacent, as.sociomatrix, attribute.methods, add.edges, network.operators, and get.inducedSubgraph

Examples

Run this code

  #Create a random graph (inefficiently)
  g<-network.initialize(10)
  g[,]<-matrix(rbinom(100,1,0.1),10,10)
  plot(g)
  
  #Demonstrate edge addition/deletion
  g[,]<-0
  g[1,]<-1
  g[2:3,6:7]<-1
  g[,]
  
  #Set edge values
  g[,,names.eval="boo"]<-5
  as.sociomatrix(g,"boo")
  #Assign edge values from a vector
  g %e% "hoo" <- "wah"
  g %e% "hoo"
  g %e% "om" <- c("wow","whee")
  g %e% "om"
  #Assign edge values as a sociomatrix
  g %e% "age" <- matrix(1:100, 10, 10)
  g %e% "age"
  as.sociomatrix(g,"age")

  #Set/retrieve network and vertex attributes
  g %n% "blah" <- "Pork!"                 #The other white meat?
  g %n% "blah" == "Pork!"                 #TRUE!
  g %v% "foo" <- letters[10:1]            #Letter the vertices
  g %v% "foo" == letters[10:1]            #All TRUE

Run the code above in your browser using DataLab