A frequently asked question is: “How are trees saved in ranger objects?”

Answer (taken from https://github.com/imbs-hl/ranger/issues/147):

child.nodeIDs is a list containing two vectors for each tree. These are the child node IDs for each node in the tree. The left children in the first vector, the right children in the second vector. The nodeIDs are 0-indexed. However, since the root of a tree (ID 0) cannot be a child, the 0 is used for terminal nodes.

In split.varIDs there is a vector for each tree with the splitting variables for each node in the tree. These IDs are 0-indexed, too. If you use the formula interface, the 0-variable should be the outcome. Terminal nodes also have a 0 here.

In split.values the splitting values for all nodes are saved. In terminal nodes, the outcome for this node is saved in split.values.

Note: A 0 in split.varIDs is no sufficient condition for a terminal node. Check child.nodeIDs to be sure.