camtrapReport
Reproducible reporting for camera-trap monitoring data
camtrapReport converts camera-trap data in Camtrap
DP format into two coordinated HTML
outputs:
The package focuses on the reporting workflow. It complements tools for camera-trap data management and specialised ecological modelling rather than replacing them.

Workflow from Camtrap DP input through camtrapReport to the
Data Status Check and Ecological Report.
Although camtrapReport has not yet been applied in a published
ecological study, it has been developed and evaluated using real-world
camera-trap monitoring datasets from multiple study sites across North
America, Asia, Europe, Africa, and Australia. Evaluation involved both
developer-led testing and independent users who applied the package to
their own datasets and provided feedback. In Europe, this evaluation has
drawn particularly on datasets available through camera-trap research
networks, including the European Observatory of Wildlife
network, which spans diverse geographic settings
and monitoring designs.
Experience across these heterogeneous datasets has informed checks for metadata completeness and spatiotemporal coverage, improvements to report generation, and revisions based on user feedback. Related publications, presentations, and training activities are listed on the Resources page.
camtrapReport requires R 4.1.0 or later. Install it from GitHub with
pak:
if (!requireNamespace("pak", quietly = TRUE)) {
install.packages("pak")
}
pak::pkg_install(
"spatialecology/camtrapReport"
)
To automatically check and install packages required by available, newly added, or updated report modules:
camtrapReport::install_all()
install_all() scans the bundled and registered user modules and
installs any missing dependencies automatically.
This executed example uses a compact Camtrap DP dataset derived from
GMU8_LEUVEN, together with bundled habitat data and a study-area
boundary. The dataset is copied to a temporary directory because
camData() may store processed files beside writable input data.
library(camtrapReport)
example_root <- tempfile("camtrapReport-example-")
dir.create(
example_root,
recursive = TRUE
)
copied <- file.copy(
from = system.file(
"external",
"dataset",
package = "camtrapReport",
mustWork = TRUE
),
to = example_root,
recursive = TRUE,
copy.mode = FALSE
)
habitat <- utils::read.csv(
system.file(
"external",
"habitat",
"habitat.csv",
package = "camtrapReport",
mustWork = TRUE
)
)
study_area <- system.file(
"external",
"study_area",
"study_area.shp",
package = "camtrapReport",
mustWork = TRUE
)
cm <- camData(
data = file.path(example_root, "dataset"),
habitat = habitat,
study_area = study_area,
update = TRUE
)
cm
#> Camera trap Object for the site : GMU8 LEUVEN
#> =====================================================
#> Total number of sequences : 10182
#> Total number of observations : 10798
#> Total number of animals : 4693
#> Total number of detected species: 41
#> Date/time (years) with data : 2018, 2019, 2020, 2021, 2022, and 2023
#> -----------------------------------------------------
camData() also accepts a Camtrap DP ZIP archive or an extracted
Camtrap DP directory. Habitat data and a study-area boundary are
optional.
status() generates a Data Status Check report that provides a
structured assessment of whether the camera-trap dataset is ready for
ecological reporting. It summarises five core areas: spatial quality,
temporal coverage, essential data availability, classification and
validation, and annotation quality. The report also summarises
observation types by capture method and concludes with an overall
data-quality classification, highlighting issues that require attention
and providing clear guidance to users and data owners on what should be
corrected or improved before ecological analysis. The function returns
the path to the generated HTML report; set view = TRUE to open it in a
browser.
status_file <- status(
cm,
view = FALSE
)
report() generates a structured Ecological Report that brings together
the selected analytical modules in a single, reproducible document.
Depending on the available data and selected report sections, it can
include information on sampling effort, species richness and occurrence,
co-occurrence, activity patterns, habitat use, abundance and density,
species accumulation, and spatial patterns. Analytical results are
integrated with tables, figures, maps, and automatically generated
narrative text that adapts to the underlying data and metadata,
providing an interpretable overview of the camera-trap monitoring
dataset. Because the report is modular, users can select, omit, reorder,
or extend sections according to their data and reporting needs. The
function returns the path to the generated HTML report; set
view = TRUE to open it in a browser.
report_file <- report(
cm,
view = FALSE
)
Inspect report metadata and choose which sections to include:
info(
cm,
name = c("title", "authors")
)
section_names()
selected_sections <- section_names(
keep = c(
"introduction",
"methods",
"study_area",
"sampling",
"effort"
)
)
sections(
cm,
selected_sections
)
Reports can also be configured by taxonomic group, survey year, and observation-count threshold. See the Ecological Report and Module management guides for further examples.
Use gui(cm) to configure and generate reports through an interactive
interface.
A successful Data Status Check confirms that the implemented data checks were completed; it does not establish that the survey design or data are suitable for a particular ecological analysis. Results should be interpreted in relation to sampling effort, detectability, season, habitat, and method-specific assumptions.
For reproducibility, retain the input data, optional inputs, analytical settings, selected report sections, and relevant package versions. General guidance is available from the Reproducible Research CRAN Task View.
Reports may contain maps or derived results that reveal sensitive species locations. Review all content before sharing a report.
The bundled example dataset is derived from the GMU8_LEUVEN Camtrap DP dataset, published by the Research Institute for Nature and Forest (INBO) through GBIF. It contains 8 derived location identifiers, 87 deployments, 15,492 retained media records, and 11,092 observation records. The relationship-preserving subset is intended for demonstration and software testing, not ecological inference. Its preparation and media-reduction rules are documented in the example-data README.
Several R packages support related parts of camera-trap workflows:
camtrapdp reads, validates, and
transforms Camtrap DP datasets;camtraptor supports
exploration and visualisation; andcamtrapR and
ct provide broader
data-management and analysis workflows.camtrapReport complements these packages by integrating data-status
checks, selected ecological analyses, figures, maps, tables, metadata,
and explanatory text within a configurable reporting workflow. Its
extensible module framework allows users to incorporate additional
analyses and report components without modifying the core package. To my
knowledge, it is the first R package designed specifically to automate
the generation of both data-status and ecological reports from
camera-trap data.
Obtain the package citation with:
citation("camtrapReport")
camtrapReport is developed and maintained by Elham
Ebrahimi.
Bug reports, feature requests, documentation improvements, code contributions, and new report modules are welcome. Please read the contributing guidelines and Code of Conduct before contributing.