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’slengthwhen 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 thantolerance(default 30%) off the reference. The runs of frames off are kept with the check, to see when it happens, andplot()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
anipointclass and rebuilt accessor API (animovement/anicore#154). The checks dispatch onanipoint, so ananieventis rejected with a clear error, and they read time from the frame’s index rather than assuming atimecolumn.
Fixed
-
The checks handle an aniframe with no rows (#32).
check_confidence()aborted withattempt to set an attribute on NULL, andcheck_na_timing()warned twice aboutmin()andmax()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()andprint().do.call(rbind, list())isNULL, so a check built from no groups carried aNULLwhere its methods expect a table, and both failed withinvalid argument type. This affectedcheck_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, andsuppressMessages()removed the summary entirely — so a pipeline wrapped insuppressMessages()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
anicoreis 0.8.0, the first version published under that name — the dependency was renamed without a version constraint, so nothing recorded that a pre-renameaniframewill not do.The core data structures come from
anicore, which is what theaniframepackage was renamed to in its 0.8.0 (animovement/anicore#84). Theaniframeclass keeps its name; only the package providing it changed, soanicorereplacesaniframeinImportsand in everyaniframe::call.
Added
- Check objects carry the aniframe declarations they were built from, as
variables_whatandvariables_whenattributes (animovement/anivis#21).group_colsconcatenates 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, sogroup_colskeeps 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()andprint()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.
anicheck 0.1.1
Added
-
check_confidence(), the first check.