R: Extraction and Replacement Operators for Network Objects

network.extraction {network} | R Documentation

## 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 class 'network'
    x[i, j, na.omit = FALSE]
    ## S3 replacement method for class '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

### 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 `NA`s 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).

### 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)`. Note that the assignment operator takes edge values input in adjacency matrix form.

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.

### Value

The extracted data, or none.

### Author(s)

Carter T. Butts buttsc@uci.edu

### References

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

### See Also

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

### Examples

      #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")
      g %e% "hoo" <- "wah"
      g %e% "hoo"
      #Assignment input should be as adjacency matrix
      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

[Package network version 1.13.0.1 Index]