network.extraction.RdVarious operators which allow extraction or replacement of various
components of a network object.
# S3 method for class 'network'
x[i, j, na.omit = FALSE]
# S3 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 <- valuean object of class network.
indices of the vertices with respect to which adjacency is to be tested. Empty values indicate that all vertices should be employed (see below).
logical; should missing edges be omitted (treated as
no-adjacency), or should NAs be returned? (Default: return NA
on missing.)
optionally, the name of an edge attribute to use for assigning edge values.
logical; should new edges be added to x where edges
are absent and the appropriate element of value is non-zero?
the value (or set thereof) to be assigned to the selected
element of x.
the name of a network or vertex attribute (as appropriate).
The extracted data, or none.
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.
Butts, C. T. (2008). “network: a Package for Managing Relational Data in R.” Journal of Statistical Software, 24(2). doi:10.18637/jss.v024.i02
#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[,]
#> 1 2 3 4 5 6 7 8 9 10
#> 1 0 1 1 1 1 1 1 1 1 1
#> 2 0 0 0 0 0 1 1 0 0 0
#> 3 0 0 0 0 0 1 1 0 0 0
#> 4 0 0 0 0 0 0 0 0 0 0
#> 5 0 0 0 0 0 0 0 0 0 0
#> 6 0 0 0 0 0 0 0 0 0 0
#> 7 0 0 0 0 0 0 0 0 0 0
#> 8 0 0 0 0 0 0 0 0 0 0
#> 9 0 0 0 0 0 0 0 0 0 0
#> 10 0 0 0 0 0 0 0 0 0 0
#Set edge values
g[,,names.eval="boo"]<-5
as.sociomatrix(g,"boo")
#> 1 2 3 4 5 6 7 8 9 10
#> 1 0 5 5 5 5 5 5 5 5 5
#> 2 0 0 0 0 0 5 5 0 0 0
#> 3 0 0 0 0 0 5 5 0 0 0
#> 4 0 0 0 0 0 0 0 0 0 0
#> 5 0 0 0 0 0 0 0 0 0 0
#> 6 0 0 0 0 0 0 0 0 0 0
#> 7 0 0 0 0 0 0 0 0 0 0
#> 8 0 0 0 0 0 0 0 0 0 0
#> 9 0 0 0 0 0 0 0 0 0 0
#> 10 0 0 0 0 0 0 0 0 0 0
#Assign edge values from a vector
g %e% "hoo" <- "wah"
g %e% "hoo"
#> [1] "wah" "wah" "wah" "wah" "wah" "wah" "wah" "wah" "wah" "wah" "wah" "wah"
#> [13] "wah"
g %e% "om" <- c("wow","whee")
g %e% "om"
#> [1] "wow" "whee" "wow" "whee" "wow" "whee" "wow" "whee" "wow" "whee"
#> [11] "wow" "whee" "wow"
#Assign edge values as a sociomatrix
g %e% "age" <- matrix(1:100, 10, 10)
g %e% "age"
#> [1] 11 21 31 41 51 61 71 81 91 52 53 62 63
as.sociomatrix(g,"age")
#> 1 2 3 4 5 6 7 8 9 10
#> 1 0 11 21 31 41 51 61 71 81 91
#> 2 0 0 0 0 0 52 62 0 0 0
#> 3 0 0 0 0 0 53 63 0 0 0
#> 4 0 0 0 0 0 0 0 0 0 0
#> 5 0 0 0 0 0 0 0 0 0 0
#> 6 0 0 0 0 0 0 0 0 0 0
#> 7 0 0 0 0 0 0 0 0 0 0
#> 8 0 0 0 0 0 0 0 0 0 0
#> 9 0 0 0 0 0 0 0 0 0 0
#> 10 0 0 0 0 0 0 0 0 0 0
#Set/retrieve network and vertex attributes
g %n% "blah" <- "Pork!" #The other white meat?
g %n% "blah" == "Pork!" #TRUE!
#> [1] TRUE
g %v% "foo" <- letters[10:1] #Letter the vertices
g %v% "foo" == letters[10:1] #All TRUE
#> [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE