Subset Partitioning via Anticlustering
Overview
The method of anticlustering partitions a pool of elements into groups (i.e., anticlusters) with the goal of maximizing between-group similarity or within-group heterogeneity. The anticlustering approach thereby reverses the logic of cluster analysis that strives for high within-group homogeneity and clear separation between groups. Computationally, anticlustering is accomplished by maximizing instead of minimizing a clustering objective function, such as the intra-cluster variance (used in k-means clustering) or the sum of pairwise distances within clusters. The main function anticlustering() gives access to optimal and heuristic anticlustering methods described in Papenberg and Klau (2021; doi:10.1037/met0000301), Brusco et al. (2020; doi:10.1111/bmsp.12186), Papenberg (2024; doi:10.1111/bmsp.12315), Papenberg, Wang, et al. (2025; doi:10.1016/j.crmeth.2025.101137), Papenberg, Breuer, et al. (2025; doi:10.1017/psy.2025.10052), Yang et al. (2022; doi:10.1016/j.ejor.2022.02.003), and Wu et al. (2025; doi:10.1016/j.cor.2025.107030). The optimal algorithms require that an integer linear programming solver is installed. This package will install 'lpSolve' (https://cran.r-project.org/package=lpSolve) as a default solver, but it is also possible to use the package 'Rglpk' (https://cran.r-project.org/package=Rglpk), which requires the GNU linear programming kit (https://www.gnu.org/software/glpk/glpk.html), the package 'Rsymphony' (https://cran.r-project.org/package=Rsymphony), which requires the SYMPHONY ILP solver (https://github.com/coin-or/SYMPHONY), or the commercial solver Gurobi, which provides its own R package that is not available via CRAN (https://www.gurobi.com/downloads/). 'Rglpk', 'Rsymphony', 'gurobi' and their system dependencies have to be manually installed by the user because they are only suggested dependencies. Full access to the bicriterion anticlustering method proposed by Brusco et al. (2020) is given via the function bicriterion_anticlustering(), while kplus_anticlustering() implements the full functionality of the k-plus anticlustering approach proposed by Papenberg (2024). Some other functions are available to solve classical clustering problems. The function balanced_clustering() applies a cluster analysis under size constraints, i.e., creates equal-sized clusters. The function matching() can be used for (unrestricted, bipartite, or K-partite) matching. The function wce() can be used optimally solve the (weighted) cluster editing problem, also known as correlation clustering, clique partitioning problem or transitivity clustering.
Install
Health
- OK13 OK2026-09-08
- ERROR12 OK, 1 ERROR2026-09-07
- OK13 OK2026-08-05
- NOTE12 OK, 1 NOTE2026-08-01
- OK13 OK2026-06-10
Show 5 earlier changesHide 5 earlier changes
- ERROR12 OK, 1 ERROR2026-06-06
- OK13 OK2026-05-09
- ERROR12 OK, 1 ERROR2026-05-03
- OK12 OK2026-04-25
- NOTE11 OK, 3 NOTE2026-03-10
Documentation
- Help pages
- 27
- Examples that run
- 96%26 run in a plain check · 1 only when donttest examples are enabled (R CMD check --as-cran)
- Exported functions with examples
- 100%
- Documented parameters
- 100%
- Return-value docs
- 84%
- Help pages citing references
- 67%
Downloads
Repository
- PRs merged (all time)
- 85%
- Median days to close, 50 most recently updated closed issues
- 47
- Median days to close, 50 most recently updated closed PRs
- 0
Stars over time
Forks over time
Releases over time
Issues over time
PRs over time
Commits over time
Commit identities over time
4 development-tooling and community-health practices detected across 3 families in the upstream repository
Checks run against github.com/m-py/anticlust on 2026-10-21.
The R CMD check workflow runs on Linux
Dependencies
Installing anticlust adds 2 packages (2 with compiled code, 516 KB of source tarballs). Heaviest: lpSolve 457 KB, RANN 59 KB.
Code & Tests
Datasets
People & History
Show 4 peopleHide 4 people
Pick two releases to compare their code metrics.
- 0.8.18Latest
- 0.8.172026-09-15 · diff ↗
- 0.8.162026-09-09 · diff ↗ ·
added 3 exports
experimental_allocation, feasible_and_infeasible_region_search_anticlustering, mahalanobis_distance - RR 4.6.0 released · 2026-04-24
- 0.8.142026-04-15 · diff ↗
- 0.8.132025-11-29 · diff ↗
- 0.8.122025-10-31 · diff ↗
- RR 4.5.0 released · 2025-04-11
- 0.8.10-12025-03-26 · diff ↗
- 0.8.102025-03-14 · diff ↗
- 0.8.9-12025-01-20 · diff ↗
- 0.8.9
- 0.8.72024-10-01 · diff ↗
- 0.8.5
- 0.8.3
- RR 4.4.0 released · 2024-04-24
Show 15 earlier eventsHide 15 earlier events
- 0.8.1
- 0.8.0-12023-10-25 · diff ↗
- 0.8.0
- 0.7.02023-07-15 · diff ↗ ·
added 3 exports
categories_to_binary, kplus_moment_variables, optimal_dispersion - 0.6.42023-05-02 · diff ↗
- RR 4.3.0 released · 2023-04-21
- 0.6.32023-01-30 · diff ↗ ·
removed 2 exports
kplus_objective, mean_sd_objadded 1 export
kplus_anticlustering - RR 4.2.0 released · 2022-04-22
- 0.6.12021-12-07 · diff ↗
- 0.6.0
- RR 4.1.0 released · 2021-05-18
- 0.5.62020-11-24 · diff ↗
- 0.5.3
- 0.5.02020-06-29
- RR 4.0.0 released · 2020-04-24
Package metadata
- First published
- 2020-06-29
- Total releases
- 24 / 6 yrs
- License
- MIT + file LICENSE OSI
- Minimum R
- ≥ 3.6.0
- Bundled data
- 17 KB / 2 files
- Download size
- 622 KB
Cite
Cite this package
Run in R for the authors' entry:
citation("anticlust")The package provides a citation file, so citation() returns the authors' own entry.
It points to 10.1037/met0000301.
Cite the R Observatory
For a number measured here: a download total, a coverage figure, an archival date.
From data release v2026-10-23, which the citation names so these numbers can be found later. More on citing and the projects behind them.