One LOESS to Rule Them All: Rebuilding a Classic Smoother in Rust
Description and use
A Rust LOESS implementation that matches R’s loess numerically, offers many more options, and is up to 236× faster.
Problem
Existing LOESS implementations are legacy, limited in features, and hard to extend or optimize.
Outcome
The Rust implementation matches R’s loess to within 1e-12, offers a richer feature set, and is dramatically faster (47× serial, 236× parallel).
Workflow
- Validate against R’s loess to ensure numerical equivalence (max diff <1e-12).
- Design the core as a layered, modular architecture with swappable components.
- Implement performance optimizations: parallelism via fastLoess and SIMD via wide crate.
- Create bindings for R, Python, Julia, Node.js, WebAssembly, C++, Go, and Java so all ecosystems use the same engine.
- Publish benchmarks and CI checks against R’s loess.
Evidence
The project validates against R's loess, and the README reports a maximum difference below 1e-12 across the test scenarios.
On the project's benchmark harness against R's stats::loess, the README reports roughly 47x in serial mode and 236x in parallel mode.
- Record date: 2026-10-10T23:41:59.225Z