Performs a recursive hierarchical clustering on an opposing-homozygotes (OH)
matrix using Ward clustering and splits clusters until the maximum within-
cluster OH value is below a user-supplied threshold (maxsnpnooh).
.prManual(oh, maxsnpnooh)A data.frame with columns:
Individual ID (character).
An integer-like group code (generated randomly; not reproducible).
A numeric matrix representing opposing-homozygotes (OH) counts between individuals. Row and column names should be individual IDs. The matrix is expected to be square and symmetric.
Numeric scalar giving the maximum allowed within-group OH value. Groups with a larger maximum OH value (and size > 2) are split recursively.
This function writes to and reads from a file named "temp.txt" in the
current working directory, and then deletes it. It also prints
maxsnpnooh to the console.
The function returns a two-column data frame with individual IDs and a group
code. Group codes are generated randomly (via rnorm()) and therefore
are not stable across runs.
The recursion proceeds as follows:
Compute a pairwise distance object from oh using .fastdist
and convert it to a dist object.
Apply hierarchical clustering using hclust with
method = "ward.D".
Cut the dendrogram into two groups using cutree.
For each group, compute the maximum within-group OH value; if it
exceeds maxsnpnooh and the group has more than two individuals,
recurse into that subgroup. Otherwise, write group assignments and stop.