Skip to contents

anicheck (development version)

Added

  • check_segment_length() reports how much each segment of a structure varies from its usual length (#39). Per individual and segment it gives the reference length — the structure’s length when it records one, otherwise the median over the track — the spread of the length as a MAD and a robust coefficient of variation, and the share of frames more than tolerance (default 30%) off the reference. The runs of frames off are kept with the check, to see when it happens, and plot() draws each segment’s length relative to its reference (with anivis 0.2.1.9003 or later). It is experimental: like anicore’s structures it is built on, its interface may change without a deprecation cycle.

Changed

  • Works with anicore’s anipoint class and rebuilt accessor API (animovement/anicore#154). The checks dispatch on anipoint, so an anievent is rejected with a clear error, and they read time from the frame’s index rather than assuming a time column.

Fixed

  • The checks handle an aniframe with no rows (#32). check_confidence() aborted with attempt to set an attribute on NULL, and check_na_timing() warned twice about min() and max() having “no non-missing arguments” — neither message mentioning the frame being empty, which is what was actually wrong. An empty frame is a normal product of a grouped pipeline, not a malformed input: dplyr::filter() gives one whenever a group matches nothing.

    All three now return an empty check, as check_na_gapsize() already did.

  • An empty check survives its own summary() and print(). do.call(rbind, list()) is NULL, so a check built from no groups carried a NULL where its methods expect a table, and both failed with invalid argument type. This affected check_na_gapsize() too, whose empty case otherwise worked (#32).

Fixed

  • print() on a check object writes its summary to stdout as one block, instead of emitting it as nine messages on stderr. capture.output(print(x)) returned nothing at all before, and suppressMessages() removed the summary entirely — so a pipeline wrapped in suppressMessages() to quiet a repetitive warning also lost its check output. The rendered summary is unchanged (#30).

anicheck 0.3.0 (2026-08-28)

Changed

  • The minimum anicore is 0.8.0, the first version published under that name — the dependency was renamed without a version constraint, so nothing recorded that a pre-rename aniframe will not do.

  • The core data structures come from anicore, which is what the aniframe package was renamed to in its 0.8.0 (animovement/anicore#84). The aniframe class keeps its name; only the package providing it changed, so anicore replaces aniframe in Imports and in every aniframe:: call.

Added

  • Check objects carry the aniframe declarations they were built from, as variables_what and variables_when attributes (animovement/anivis#21). group_cols concatenates identity and temporal context, so a consumer given only that vector cannot tell where one ends and the other begins — “the last grouping column” can land on a session rather than the finest identity. The two fields travel under the names aniframe gives them, so group_cols keeps its meaning and is now explained by the attributes beside it.

anicheck 0.2.0 (2026-06-29)

First substantial release. anicheck diagnoses movement-data quality, returning objects that anivis knows how to draw.

Added

  • check_na_timing() summarises where missing values fall, as one row per gap.
  • check_na_gapsize() tabulates how often each missing-value gap length occurs.
  • check_confidence() reduces per-keypoint tracking confidence to a compact density grid and five-number summary.
  • summary() and print() methods for each check, giving a per-group overview.
  • plot() methods that ensure anivis is installed, prompting if not, and then delegate to it — mirroring the performance / see split in easystats.

Removed

  • The unused dplyr dependency. stats and utils are now declared.

anicheck 0.1.1

Added

anicheck 0.1.0

Package skeleton. No user-facing functions yet.