This function creates a new graph, by merging several vertices into one. The vertices in the new graph correspond to sets of vertices in the input graph.

## Usage

`contract(graph, mapping, vertex.attr.comb = igraph_opt("vertex.attr.comb"))`

## Arguments

- graph
The input graph, it can be directed or undirected.

- mapping
A numeric vector that specifies the mapping. Its elements correspond to the vertices, and for each element the id in the new graph is given.

- vertex.attr.comb
Specifies how to combine the vertex attributes in the new graph. Please see

`attribute.combination()`

for details.

## Details

The attributes of the graph are kept. Graph and edge attributes are
unchanged, vertex attributes are combined, according to the
`vertex.attr.comb`

parameter.

## See also

Other functions for manipulating graph structure:
`+.igraph()`

,
`add_edges()`

,
`add_vertices()`

,
`complementer()`

,
`compose()`

,
`connect()`

,
`delete_edges()`

,
`delete_vertices()`

,
`difference.igraph()`

,
`difference()`

,
`disjoint_union()`

,
`edge()`

,
`igraph-minus`

,
`intersection.igraph()`

,
`intersection()`

,
`path()`

,
`permute()`

,
`rep.igraph()`

,
`reverse_edges()`

,
`simplify()`

,
`union.igraph()`

,
`union()`

,
`vertex()`

## Author

Gabor Csardi csardi.gabor@gmail.com

## Examples

```
g <- make_ring(10)
g$name <- "Ring"
V(g)$name <- letters[1:vcount(g)]
E(g)$weight <- runif(ecount(g))
g2 <- contract(g, rep(1:5, each = 2),
vertex.attr.comb = toString
)
## graph and edge attributes are kept, vertex attributes are
## combined using the 'toString' function.
print(g2, g = TRUE, v = TRUE, e = TRUE)
#> IGRAPH 2a0d33f UNW- 5 10 -- Ring
#> + attr: name (g/c), mutual (g/l), circular (g/l), name (v/c), weight
#> | (e/n)
#> + edges from 2a0d33f (vertex names):
#> [1] a, b--a, b a, b--c, d c, d--c, d c, d--e, f e, f--e, f e, f--g, h
#> [7] g, h--g, h g, h--i, j i, j--i, j a, b--i, j
```