# Functions for Querying, Validating and Extracting from ERGM Formulas

### Description

These are all functions that are generally not called directly by users, but may be employed by other depending packages.

### Usage

1 2 3 4 5 | ```
nonsimp.update.formula(object, new, ..., from.new = FALSE)
term.list.formula(rhs, sign = +1)
append.rhs.formula(object, newterms, keep.onesided = FALSE)
``` |

### Arguments

`object` |
formula object to be updated |

`new` |
new formula to be used in updating |

`from.new` |
logical or character vector of variable names. controls how environment of formula gets updated. |

`rhs` |
a formula-style call containing the right hand side of
formula, obtained by |

`sign` |
an internal parameter used by |

`newterms` |
list of terms (names) to append to the formula |

`keep.onesided` |
if the initial formula is one-sided, keep it whether to keep it one-sided or whether to make the initial formula the new LHS |

`...` |
Additional arguments. Currently unused. |

### Details

`nonsimp.update.formula`

is a reimplementation of`update.formula`

that does not simplify. Note that the resulting formula's environment is set as follows. If`from.new==FALSE`

, it is set to that of object. Otherwise, a new sub-environment of object, containing, in addition, variables in new listed in from.new (if a character vector) or all of new (if TRUE).`term.list.formula`

returns a list containing terms in a given formula, handling`+`

and`-`

operators and parentheses, and keeping track of whether a term has a plus or a minus sign.`append.rhs.formula`

appends a list of terms to the RHS of a formula. If the formula is one-sided, the RHS becomes the LHS, if`keep.onesided==FALSE`

(the default).

### Value

`terms.list.formula`

returns a list of formula terms, each of
witch having an additional attribute `"sign"`

.

`nonsimp.update.formula`

and
`append.rhs.formula`

each return an updated formula object

### Examples

1 2 3 4 5 6 | ```
## append.rhs.formula
append.rhs.formula(y~x,list(as.name("z1"),as.name("z2"))) # y~x+z1+z2
append.rhs.formula(~y,list(as.name("z"))) # y~z
append.rhs.formula(~y+x,list(as.name("z"))) # y+x~z
append.rhs.formula(~y,list(as.name("z")),TRUE) # ~y+z
``` |