Add Edges to a Network Object
add.edges.RdAdd one or more edges to an existing network object.
Usage
add.edge(
x,
tail,
head,
names.eval = NULL,
vals.eval = NULL,
edge.check = FALSE,
...
)
add.edges(x, tail, head, names.eval = NULL, vals.eval = NULL, ...)Arguments
- x
an object of class
network- tail
for
add.edge, a vector of vertex IDs reflecting the tail set for the edge to be added; foradd.edges, a list of such vectors- head
for
add.edge, a vector of vertex IDs reflecting the head set for the edge to be added; foradd.edges, a list of such vectors- names.eval
for
add.edge, an optional list of names for edge attributes; foradd.edges, a list of length equal to the number of edges, with each element containing a list of names for the attributes of the corresponding edge- vals.eval
for
add.edge, an optional list of edge attribute values (matchingnames.eval); foradd.edges, a list of such lists- edge.check
logical; should we perform (computationally expensive) tests to check for the legality of submitted edges?
- ...
additional arguments
Value
Invisibly, add.edge and add.edges return pointers to
their modified arguments; both functions modify their arguments in place..
Details
The edge checking procedure is very slow, but should always be employed when
debugging; without it, one cannot guarantee that the network state is
consistent with network level variables (see
network.indicators). For example, by default it is possible to
add multiple edges to a pair of vertices.
Edges can also be added/removed via the extraction/replacement operators. See the associated man page for details.
Note
add.edges and add.edge were converted to an S3 generic
funtions in version 1.9, so they actually call add.edges.network and
add.edge.network by default, and may call other versions depending on
context (i.e. when called with a networkDynamic object).
References
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
Author
Carter T. Butts buttsc@uci.edu
Examples
#Initialize a small, empty network
g<-network.initialize(3)
#Add an edge
add.edge(g,1,2)
g
#> Network attributes:
#> vertices = 3
#> directed = TRUE
#> hyper = FALSE
#> loops = FALSE
#> multiple = FALSE
#> bipartite = FALSE
#> total edges= 1
#> missing edges= 0
#> non-missing edges= 1
#>
#> Vertex attribute names:
#> vertex.names
#>
#> No edge attributes
#Can also add edges using the extraction/replacement operators
#note that replacement operators are much slower than add.edges()
g[,3]<-1
g[,]
#> 1 2 3
#> 1 0 1 1
#> 2 0 0 1
#> 3 0 0 0
#Add multiple edges with attributes to a network
# pretend we just loaded in this data.frame from a file
# Note: network.edgelist() may be simpler for this case
elData<-data.frame(
from_id=c("1","2","3","1","3","1","2"),
to_id=c("1", "1", "1", "2", "2", "3", "3"),
myEdgeWeight=c(1, 2, 1, 2, 5, 3, 9.5),
someLetters=c("B", "W", "L", "Z", "P", "Q", "E"),
edgeCols=c("red","green","blue","orange","pink","brown","gray"),
stringsAsFactors=FALSE
)
valueNet<-network.initialize(3,loops=TRUE)
add.edges(valueNet,elData[,1],elData[,2],
names.eval=rep(list(list("myEdgeWeight","someLetters","edgeCols")),nrow(elData)),
vals.eval=lapply(1:nrow(elData),function(r){as.list(elData[r,3:5])}))
list.edge.attributes(valueNet)
#> [1] "edgeCols" "myEdgeWeight" "na" "someLetters"