← Back to all sparks
P

packageRank

INFRA · APIS
Velocity0.0

Computation and Visualization of Package Download Counts and Percentile Ranks

CRAN download analytics maintained one micro-change at a time, hundreds per year

crandownload-analyticslog-filteringvisualizationmaintenance
Current state
packageRank computes download counts and percentile ranks from CRAN's logs, with a filtering layer that tries to separate real installs from mirrors, sequences and bots. The recent releases are dense lists of small changes — thirty or more per version — spread across plot arguments, filter behaviour, and the cranDistribution object that now absorbs what packageDistribution() used to do separately.
Where it's heading
There is no directional arc here; there is a maintainer keeping a measurement instrument calibrated against a data source that keeps moving. CRAN's logs went missing for a week in 2025 and the package now ships those dates as data and draws them as polygons on every plot. A chatgpt argument has been threaded through the plotting functions since 0.9.6. Function surface churns constantly — arguments renamed, plot helpers archived, others integrated.
Prediction
Given the cadence, the next release will be another few dozen adjustments concentrated wherever CRAN's logs last surprised the maintainer. The consolidation of plotting arguments toward a single axis.package annotation looks unfinished.

Recent moves

  1. 5mo ago

    Package and version axis annotations across every plot

    The axis.package and axis.package.version arguments are pushed through singlePlot(), cranPlot(), rPlot(), rTotPlot() and multiPlot() at once, and packageDistribution() is folded into cranDistribution(). Consolidation, buried in three dozen individually tiny changes.

    View source ↗
  2. 10mo ago

    Missing CRAN log dates shipped as data and drawn on plots

    CRAN's download logs have gaps — five days across August and September 2025 — and the package now carries them as a dataset and shades them on every time series. Turning a data-source failure into a visible annotation is the more useful half of this release.

    View source ↗
  3. 1y ago

    Weekend and version overlays for the base graphics path

    Plot options that existed only under ggplot2 arrive for base graphics, and the timestamp handling moves off POSIXlt onto POSIXct with fasttime. Routine, and typical of how this package spends a version.

    View source ↗
  4. 1y ago

    Package history prefers CRAN over the pkgsearch fallback

    Three small behaviour tweaks and three plot fixes, with no new capability. The only user-visible one is packageHistory() trusting CRAN's own record ahead of pkgsearch.

    View source ↗
  5. 1y ago

    Distribution summaries gain totals and a top-N default

    cranDistribution() reporting fills out — total downloads in print and summary, a top 20 default, unique package counts moved into the object — and packageRank() stops reordering its inputs.

    View source ↗
  6. 1y ago

    cranDistribution() object and a direct query family

    The most structural release in the window: cranDistribution() arrives with print, plot and summary methods, and queryCount(), queryPackage(), queryPercentile() and queryRank() give direct lookups instead of computing a whole distribution to read one number.

    View source ↗