R: Drop, add or set the direction of an arc or an edge

arc operations {bnlearn} | R Documentation

## Drop, add or set the direction of an arc or an edge

### Description

Drop, add or set the direction of a directed or undirected arc (also known as edge).

### Usage

    # arc operations.
    set.arc(x, from, to, check.cycles = TRUE, check.illegal = TRUE, debug = FALSE)
    drop.arc(x, from, to, debug = FALSE)
    reverse.arc(x, from, to, check.cycles = TRUE, check.illegal = TRUE, debug = FALSE)

    # edge (i.e. undirected arc) operations
    set.edge(x, from, to, check.cycles = TRUE, check.illegal = TRUE, debug = FALSE)
    drop.edge(x, from, to, debug = FALSE)

### Arguments

`x` | an object of class `bn`.
`from` | a character string, the label of a node.
`to` | a character string, the label of another node.
`check.cycles` | a boolean value. If `TRUE` the graph is tested for acyclicity; otherwise the graph is returned anyway.
`check.illegal` | a boolean value. If `TRUE` arcs that break the parametric assumptions of `x`, such as those from continuous to discrete nodes in conditional Gaussian networks, cause an error.
`debug` | a boolean value. If `TRUE` a lot of debugging output is printed; otherwise the function is completely silent.

### Details

The `set.arc()` function operates in the following way:

- if there is no arc between `from` and `to`, the arc `from` -> `to` is added.

- if there is an undirected arc between `from` and `to`, its direction is set to `from` -> `to`.

- if the arc `to` -> `from` is present, it is reversed.

- if the arc `from` -> `to` is present, no action is taken.

The `drop.arc()` function operates in the following way:

- if there is no arc between `from` and `to`, no action is taken.

- if there is a directed or an undirected arc between `from` and `to`, it is dropped regardless of its direction.

The `reverse.arc()` function operates in the following way:

- if there is no arc between `from` and `to`, it returns an error.

- if there is an undirected arc between `from` and `to`, it returns an error.

- if the arc `to` -> `from` is present, it is reversed.

- if the arc `from` -> `to` is present, it is reversed.

The `set.edge()` function operates in the following way:

- if there is no arc between `from` and `to`, the undirected arc `from` - `to` is added.

- if there is an undirected arc between `from` and `to`, no action is taken.

- if either the arc `from` -> `to` or the arc `to` -> `from` are present, they are replaced with the undirected arc `from` - `to`.

The `drop.edge()` function operates in the following way:

- if there is no undirected arc between `from` and `to`, no action is taken.

- if there is an undirected arc between `from` and `to`, it is removed.

- if there is a directed arc between `from` and `to`, no action is taken.

### Value

All functions return invisibly an updated copy of `x`.

### Author(s)

Marco Scutari

### Examples

    res = cpdag(model2network("[A][C][F][B|A][D|A:C][E|B:F]"))
    res

    ## use debug = TRUE to get more information.
    updated = set.arc(res, "A", "B")
    updated
    updated = drop.arc(res, "A", "B")
    updated
    updated = drop.edge(res, "A", "B")
    updated
    updated = reverse.arc(res, "A", "D")
    updated

[Package bnlearn version 4.7 Index]