This function is a wrapper to two functions: intCriteria function in package clusterCrit, and NbClust in package NbClust. It can be used to quantitatively compare different clustering options.

  pkg = "NbClust",
  hclst = NULL,
  k = NULL,
  h = NULL,
  crit = "Dunn",



An object of S3 class Spectra.


Character. One of c("NbClust", "clusterCrit"). The package to use for comparing clusters.


An object of S3 class hclust. Only applies to pkg = "clusterCrit".


Integer. The number of groups in which to cut the tree (hclust). Only applies to pkg = "clusterCrit".


Numeric. The height at which to cut the tree. Either k or h must be given, with k taking precedence. See cutree. Only applies to pkg = "clusterCrit".


String. A string giving the criteria to be used in evaluating the quality of the cluster. See liintCriteria. Only applies to pkg = "clusterCrit".


Other parameters to be passed to the functions. In particular, the default NbClust package will need some parameters. See the example.


A list giving the results, as described in intCriteria or NbClust.


Both of the packages used here compute very similar quantities. For details, see the publication and respective vignettes. Package clusterCrit takes the approach in which you cluster in a separate step using whatever parameters you like, then the tree is cut either at a given height or in such a way as to produce a fixed number of groups. One or more indices are then computed. Then, you repeat this process with different clustering criteria, and compare. Package NbClust allows one to specify a range of possible number of clusters and a few other parameters and will return indices corresponding to each set options, which is somewhat more automated.


M. Charrad et. al. "NbClust: An R Package for Determining the Relevant Number of Clusters in a Data Set." J. Stat. Soft. vol. 61 no. 6 October 2014.

See also

hclust for the underlying base function. hcaSpectra for HCA analysis of a Spectra object. hcaScores for HCA analysis of PCA scores from a Spectra object. Additional documentation at


Bryan A. Hanson (DePauw University)


if (FALSE) {

# Using clusterCrit
res1 <- hcaSpectra(metMUD2) # default clustering and distance methods
res2 <- hcaSpectra(metMUD2, d.method = "cosine")
# The return value from hcaSpectra is a list with hclust as the first element.
crit1 <- evalClusters(metMUD2, pkg = "clusterCrit", hclst = res1[[1]], k = 2)
crit2 <- evalClusters(metMUD2, pkg = "clusterCrit", hclst = res2[[1]], k = 2)
# crit1 and crit2 can now be compared.

# Using NbClust
res3 <- evalClusters(metMUD2, = 2, = 5, method = "average", index = "kl")