R: Apply Functions Over Nodes

nodeapply {partykit} | R Documentation

## Apply Functions Over Nodes

### Description

Returns a list of values obtained by applying a function to `party` or `partynode` objects.

### Usage

    nodeapply(obj, ids = 1, FUN = NULL, ...)
    ## S3 method for class 'partynode'
    nodeapply(obj, ids = 1, FUN = NULL, ...)
    ## S3 method for class 'party'
    nodeapply(obj, ids = 1, FUN = NULL, by_node = TRUE, ...)

### Arguments

`obj` | an object of class `partynode` or `party`.
`ids` | integer vector of node identifiers to apply over.
`FUN` | a function to be applied to nodes. By default, the node itself is returned.
`by_node` | a logical indicating if `FUN` is applied to subsets of `party` objects or `partynode` objects (default).
`...` | additional arguments.

### Details

Function `FUN` is applied to all nodes with node identifiers in `ids` for a `partynode` object. The method for `party` by default calls the `nodeapply` method on it's `node` slot. If `by_node` is `FALSE`, it is applied to a `party` object with root node `ids`.

### Value

A list of results of length `length(ids)`.

### Examples

        ## a tree as flat list structure
        nodelist <- list(
            # root node
            list(id = 1L, split = partysplit(varid = 4L, breaks = 1.9),
                kids = 2:3),
            # V4 <= 1.9, terminal node
            list(id = 2L, info = "terminal A"),
            # V4 > 1.9
            list(id = 3L, split = partysplit(varid = 5L, breaks = 1.7),
                kids = c(4L, 7L)),
            # V5 <= 1.7
            list(id = 4L, split = partysplit(varid = 4L, breaks = 4.8),
                kids = 5:6),
            # V4 <= 4.8, terminal node
            list(id = 5L, info = "terminal B"),
            # V4 > 4.8, terminal node
            list(id = 6L, info = "terminal C"),
            # V5 > 1.7, terminal node
            list(id = 7L, info = "terminal D")
        )

        ## convert to a recursive structure
        node <- as.partynode(nodelist)

        ## return root node
        nodeapply(node)

        ## return info slots of terminal nodes
        nodeapply(node, ids = nodeids(node, terminal = TRUE),
            FUN = function(x) info_node(x))

        ## fit tree using rpart
        library("rpart")
        rp <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis)

        ## coerce to `constparty'
        rpk <- as.party(rp)

        ## extract nodeids
        nodeids(rpk)
        unlist(nodeapply(node_party(rpk), ids = nodeids(rpk),
            FUN = id_node))
        unlist(nodeapply(rpk, ids = nodeids(rpk), FUN = id_node))

        ## but root nodes of party objects always have id = 1
        unlist(nodeapply(rpk, ids = nodeids(rpk), FUN = function(x)
            id_node(node_party(x)), by_node = FALSE))

[Package partykit version 1.2-7 Index]