```
combLevel <- function(n) {
B <- matrix(1)
for(i in 2:n) {
maxB <- apply(B, 1, max) + 1
B <- B[rep(1:nrow(B), maxB), ]
B <- cbind(B, unlist(lapply(maxB, seq, 1, -1)))
}
dimnames(B) <- list(NULL, NULL)
B
}
```

With 4 levels, this led to a total of 15 combinations, 1 with 4 levels, 6 with 3 levels, 7 with 2 levels, and 1 with 1 level.
```
> combLevel(4)
[,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 1 2 3 3
[3,] 1 2 3 2
[4,] 1 2 3 1
[5,] 1 2 2 3
[6,] 1 2 2 2
[7,] 1 2 2 1
[8,] 1 2 1 3
[9,] 1 2 1 2
[10,] 1 2 1 1
[11,] 1 1 2 3
[12,] 1 1 2 2
[13,] 1 1 2 1
[14,] 1 1 1 2
[15,] 1 1 1 1
```

How did I come up with the function? I pictured the problem as a bifurcating tree, assigning each of the original levels to a new level, one at a time. At each step in the tree, the next level would either be **different**from one of the previous levels, or

**the same as**one of the previous levels.

The code for producing this diagram is shown below.

```
library(DiagrammeR)
nodes <- create_nodes(
nodes = 1:23,
type = "number",
label = c(1, 2:1, 3:1, 2:1, 4:1, 3:1, 3:1, 3:1, 2:1))
edges <- create_edges(
from = rep(1:8, c(2, 3, 2, 4, 3, 3, 3, 2)),
to = 2:23,
rel = "related")
graph <- create_graph(
nodes_df = nodes,
edges_df = edges,
graph_attrs = "layout = dot")
render_graph(graph)
```

## No comments:

## Post a Comment