
pavdata is an R
package for storing, validating, and exploring transportation
infrastructure data with a lightweight, human-readable
.pavdata format based on JSON.
It is designed for pavement and materials workflows where researchers need to:
print(), summary(), and
plot()Install from a local source tree:
install.packages("path/to/pavdata", repos = NULL, type = "source")After its first release on CRAN, install it with:
install.packages("pavdata")Laboratory and field datasets in pavement engineering are often
fragmented across spreadsheets, scripts, and reports.
pavdata provides a small relational layer in R so those
records can be created, checked, saved, and reused more
consistently.
The package focuses on four practical ideas aligned with the FAIR Principles:
.pavdata
filesCreate a few linked objects:
library(pavdata)
binder <- pav_new(
"binder",
id = "binder-cap-50-70",
name = "CAP 50/70",
binder_type = "CAP 50/70",
penetration_mm = 52,
softening_point_c = 49
)
aggregate <- pav_new(
"aggregate",
id = "aggregate-basalt",
name = "Basalt aggregate",
bulk_specific_gravity = 2.71,
water_absorption_pct = 1.2
)
mixture <- pav_new(
"mixture",
id = "mixture-dense-graded",
name = "Dense graded mix",
binder_id = binder$id,
aggregate_id = aggregate$id,
binder_content_pct = 5.3
)
volumetrics <- pav_new(
"mixture_test",
id = "test-volumetrics-dense-graded",
name = "Dense graded mix volumetrics",
mixture_id = mixture$id,
test_type = "volumetrics",
volumetrics = list(
air_voids_pct = 4.1,
voids_mineral_aggregate_pct = 15.4,
voids_filled_asphalt_pct = 73.4,
filler_binder_ratio = 1.1
)
)Validate the objects:
pav_check(binder)
pav_check(mixture)
pav_check(volumetrics)Save them to disk and read them back:
path <- tempfile(fileext = ".pavdata")
pav_write(list(binder, aggregate, mixture, volumetrics), path)
objects <- pav_read(path)
names(objects)Load them into a library for indexed access:
lib <- pav_library()
pav_library_load(lib, path)
print(lib)
pav_list(lib, type = "mixture")
pav_view(lib, mixture$id)PavData objects support standard S3 methods.
print()Use print() for a compact object overview:
print(binder)<pavdata_binder> CAP 50/70
id: binder-cap-50-70 | v1 | 13 fields
summary()Use summary() to display the populated metadata and data
fields:
summary(volumetrics)MIXTURE_TEST: Dense graded mix volumetrics
ID: test-volumetrics-dense-graded | v1 | Created: <timestamp>
Source:
mixture_id mixture-dense-graded
test_type volumetrics
volumetrics
air_voids_pct 4.1
voids_mineral_aggregate_pct 15.4
voids_filled_asphalt_pct 73.4
filler_binder_ratio 1.1
plot()Use plot() to compare numeric fields. Short labels can
be passed to the underlying base-R bar plot with
names.arg:
plot(
volumetrics,
names.arg = c("Air voids (%)", "VMA (%)", "VFA (%)", "Filler/binder"),
ylim = c(0, 80)
)
| Function | Purpose |
|---|---|
pav_new() |
Create a new PavData object |
pav_check() |
Validate one object |
pav_check_integrity() |
Validate a collection and its foreign keys |
pav_write() |
Write objects to a .pavdata file |
pav_read() |
Read objects from a .pavdata file |
pav_load() |
Read a file and validate all objects |
pav_library() |
Create an in-memory indexed library |
pav_library_load() |
Load a file into a library |
pav_list() |
List objects in a library |
pav_view() |
Display one object from a library |
pavdata currently supports these object families:
samplebinderaggregatemixturebinder_testaggregate_testmixture_testreferenceEach object shares common metadata such as id,
name, type, version,
created_at, source, and
notes.
The UML diagram below summarizes the S3 classes and their relationships.
The package ships with an example .pavdata file:
path <- pavdata_sample_path()
pathYou can use it to test import, browsing, and validation workflows.
PavData is developed by:
Creator
Authors
Contributors
Affiliation