# as.directed

##### Convert between directed and undirected graphs

`as.directed`

converts an undirected graph to directed,
`as.undirected`

does the opposite, it converts a directed graph to
undirected.

- Keywords
- graphs

##### Usage

`as.directed(graph, mode = c("mutual", "arbitrary"))`as.undirected(graph, mode = c("collapse", "each", "mutual"),
edge.attr.comb = igraph_opt("edge.attr.comb"))

##### Arguments

- graph
The graph to convert.

- mode
Character constant, defines the conversion algorithm. For

`as.directed`

it can be`mutual`

or`arbitrary`

. For`as.undirected`

it can be`each`

,`collapse`

or`mutual`

. See details below.- edge.attr.comb
Specifies what to do with edge attributes, if

`mode="collapse"`

or`mode="mutual"`

. In these cases many edges might be mapped to a single one in the new graph, and their attributes are combined. Please see`attribute.combination`

for details on this.

##### Details

Conversion algorithms for `as.directed`

:

- "arbitrary"
The number of edges in the graph stays the same, an arbitrarily directed edge is created for each undirected edge.

- "mutual"
Two directed edges are created for each undirected edge, one in each direction.

Conversion algorithms for `as.undirected`

:

- "each"
The number of edges remains constant, an undirected edge is created for each directed one, this version might create graphs with multiple edges.

- "collapse"
One undirected edge will be created for each pair of vertices which are connected with at least one directed edge, no multiple edges will be created.

- "mutual"
One undirected edge will be created for each pair of mutual edges. Non-mutual edges are ignored. This mode might create multiple edges if there are more than one mutual edge pairs between the same pair of vertices.

##### Value

A new graph object.

##### See Also

`simplify`

for removing multiple and/or loop edges from
a graph.

##### Examples

```
# NOT RUN {
g <- make_ring(10)
as.directed(g, "mutual")
g2 <- make_star(10)
as.undirected(g)
# Combining edge attributes
g3 <- make_ring(10, directed=TRUE, mutual=TRUE)
E(g3)$weight <- seq_len(ecount(g3))
ug3 <- as.undirected(g3)
print(ug3, e=TRUE)
# }
# NOT RUN {
x11(width=10, height=5)
layout(rbind(1:2))
plot( g3, layout=layout_in_circle, edge.label=E(g3)$weight)
plot(ug3, layout=layout_in_circle, edge.label=E(ug3)$weight)
# }
# NOT RUN {
g4 <- graph(c(1,2, 3,2,3,4,3,4, 5,4,5,4,
6,7, 7,6,7,8,7,8, 8,7,8,9,8,9,
9,8,9,8,9,9, 10,10,10,10))
E(g4)$weight <- seq_len(ecount(g4))
ug4 <- as.undirected(g4, mode="mutual",
edge.attr.comb=list(weight=length))
print(ug4, e=TRUE)
# }
```

*Documentation reproduced from package igraph, version 1.2.3, License: GPL (>= 2)*