# Testing the cppBP function
library(pedbp)
################################################################################
# Verify error if more than one source
x <- tryCatch(pedbp:::cppBP(0.5, 0.5, 34, 0, NA, NA, 0.5, source = c("martin2022", "gemelli1990"), type = "distribution"), error = function(e) e)
stopifnot(inherits(x, "error"))
stopifnot(identical(x$message, "'source' should have length 1"))
x <- tryCatch(pedbp:::cppBP(0.5, 0.5, 34, 0, NA, NA, 0.5, source = c("martin2022", "not-a-source"), type = "distribution"), error = function(e) e)
stopifnot(inherits(x, "error"))
stopifnot(identical(x$message, "'source' should have length 1"))
################################################################################
# Verify error if more than one type
x <- tryCatch(pedbp:::cppBP(0.5, 0.5, 34, 0, NA, NA, 0.5, source = c("martin2022"), type = c("quantile", "distribution")), error = function(e) e)
stopifnot(inherits(x, "error"))
stopifnot(identical(x$message, "'type' should have length 1"))
################################################################################
# Verify error if source is not a known source
x <- tryCatch(pedbp:::cppBP(0.5, 0.5, 34, 0, NA, NA, 0.5, source = c("not-a-source"), type = "distribution"), error = function(e) e)
stopifnot(inherits(x, "error"))
stopifnot(identical(x$message, "Unknown source"))
################################################################################
# Verify error if type is not distribution, qualtile, nor zscore
x <- tryCatch(pedbp:::cppBP(0.5, 0.5, 34, 0, NA, NA, 0.5, source = c("martin2022"), type = "no"), error = function(e) e)
stopifnot(inherits(x, "error"))
stopifnot(identical(x$message, "type needs to be one of 'distribution', 'quantile', or 'zscore'"))
################################################################################
# verify error if male is not 0 or 1
x <- tryCatch(pedbp:::cppBP(0.5, 0.5, 34, 2, NA, NA, 0.5, source = c("martin2022"), type = "no"), error = function(e) e)
stopifnot(inherits(x, "error"))
stopifnot(identical(x$message, "male needs to be a 0 or 1"))
################################################################################
# verify error if length of qp_sbp and qp_dbp differ
x <- tryCatch(pedbp:::cppBP(0.5, c(0.5, 0.5), 34, 0, NA, NA, 0.5, source = c("martin2022"), type = "no"), error = function(e) e)
stopifnot(inherits(x, "error"))
stopifnot(identical(x$message, "qp_sbp and qp_dbp lengths are not equal"))
x <- tryCatch(pedbp:::cppBP(c(0.5, 0.5), 0.5, 34, 0, NA, NA, 0.5, source = c("martin2022"), type = "no"), error = function(e) e)
stopifnot(inherits(x, "error"))
stopifnot(identical(x$message, "qp_sbp and qp_dbp lengths are not equal"))
################################################################################
# verify error if any of the inputs are zero length
x <- tryCatch(pedbp:::cppBP(
qp_sbp = numeric(0),
qp_dbp = numeric(0),
age = 56,
male = 0,
height = NA,
height_percentile = NA,
default_height_percentile = 0.5,
source = c("martin2022"),
type = "no"),
error = function(e) e)
stopifnot(inherits(x, "error"))
stopifnot(identical(x$message, "zero length vector"))
x <- tryCatch(pedbp:::cppBP(
qp_sbp = 0.5,
qp_dbp = 0.5,
age = numeric(0),
male = 0,
height = NA,
height_percentile = NA,
default_height_percentile = 0.5,
source = c("martin2022"),
type = "no"),
error = function(e) e)
stopifnot(inherits(x, "error"))
stopifnot(identical(x$message, "zero length vector"))
x <- tryCatch(pedbp:::cppBP(
qp_sbp = 0.5,
qp_dbp = 0.5,
age = 54,
male = numeric(0),
height = NA,
height_percentile = NA,
default_height_percentile = 0.5,
source = c("martin2022"),
type = "no"),
error = function(e) e)
stopifnot(inherits(x, "error"))
stopifnot(identical(x$message, "zero length vector"))
x <- tryCatch(pedbp:::cppBP(
qp_sbp = 0.5,
qp_dbp = 0.5,
age = 54,
male = 0,
height = numeric(0),
height_percentile = NA,
default_height_percentile = 0.5,
source = c("martin2022"),
type = "no"),
error = function(e) e)
stopifnot(inherits(x, "error"))
stopifnot(identical(x$message, "zero length vector"))
x <- tryCatch(pedbp:::cppBP(
qp_sbp = 0.5,
qp_dbp = 0.5,
age = 54,
male = 0,
height = 0,
height_percentile = numeric(0),
default_height_percentile = 0.5,
source = c("martin2022"),
type = "no"),
error = function(e) e)
stopifnot(inherits(x, "error"))
stopifnot(identical(x$message, "zero length vector"))
################################################################################
# test the expansion of vectors.
x <-pedbp:::cppBP(
qp_sbp = 0.5,
qp_dbp = 0.5,
age = 54,
male = 0:1,
height = NA,
height_percentile = NA,
default_height_percentile = 0.5,
source = c("martin2022"),
type = "quantile")
stopifnot(identical(class(x), "list"))
stopifnot(identical(length(x), 2L))
stopifnot(identical(length(x[[1]]), 2L))
stopifnot(identical(length(x[[2]]), 2L))
x <-pedbp:::cppBP(
qp_sbp = 0.5,
qp_dbp = 0.5,
age = 54,
male = 0,
height = c(NA, NA),
height_percentile = NA,
default_height_percentile = 0.5,
source = c("martin2022"),
type = "quantile")
stopifnot(identical(class(x), "list"))
stopifnot(identical(length(x), 2L))
stopifnot(identical(length(x[[1]]), 2L))
stopifnot(identical(length(x[[2]]), 2L))
################################################################################
# verify error if inputs are not lenght 1 or equal
x <- tryCatch(pedbp:::cppBP(
qp_sbp = numeric(2),
qp_dbp = numeric(2),
age = numeric(2),
male = numeric(2),
height = numeric(2),
height_percentile = numeric(5),
default_height_percentile = 0.5,
source = c("martin2022"),
type = "distribution"),
error = function(e) e)
stopifnot(inherits(x, "error"))
stopifnot(identical(x$message, "all input vectors need to be of equal length, or length 1."))
x <- tryCatch(pedbp:::cppBP(
qp_sbp = numeric(2),
qp_dbp = numeric(2),
age = numeric(2),
male = numeric(2),
height = numeric(5),
height_percentile = numeric(2),
default_height_percentile = 0.5,
source = c("martin2022"),
type = "distribution"),
error = function(e) e)
stopifnot(inherits(x, "error"))
stopifnot(identical(x$message, "all input vectors need to be of equal length, or length 1."))
x <- tryCatch(pedbp:::cppBP(
qp_sbp = numeric(2),
qp_dbp = numeric(2),
age = numeric(2),
male = numeric(5),
height = numeric(2),
height_percentile = numeric(2),
default_height_percentile = 0.5,
source = c("martin2022"),
type = "distribution"),
error = function(e) e)
stopifnot(inherits(x, "error"))
stopifnot(identical(x$message, "all input vectors need to be of equal length, or length 1."))
x <- tryCatch(pedbp:::cppBP(
qp_sbp = numeric(2),
qp_dbp = numeric(2),
age = numeric(5),
male = numeric(2),
height = numeric(2),
height_percentile = numeric(2),
default_height_percentile = 0.5,
source = c("martin2022"),
type = "distribution"),
error = function(e) e)
stopifnot(inherits(x, "error"))
stopifnot(identical(x$message, "all input vectors need to be of equal length, or length 1."))
################################################################################
# Verify expected output for gemelli1990
x <-
pedbp:::cppBP(
qp_sbp = gemelli1990$sbp_mean
, qp_dbp = gemelli1990$dbp_mean
, age = gemelli1990$age
, male = gemelli1990$male
, height = NA
, height_percentile = NA
, default_height_percentile = 0.5
, source = "gemelli1990"
, type = "distribution"
)
stopifnot(identical(class(x), "list"))
stopifnot(identical(length(x), 2L))
stopifnot(identical(length(x[[1]]), nrow(gemelli1990)))
stopifnot(identical(length(x[[2]]), nrow(gemelli1990)))
stopifnot(identical(class(attr(x, "bp_params")), "data.frame"))
stopifnot(isTRUE(all.equal(unname(x), list(rep(0.5, nrow(gemelli1990)), rep(0.5, nrow(gemelli1990))), check.attributes = FALSE)))
x <-
pedbp:::cppBP(
qp_sbp = 0.5
, qp_dbp = 0.5
, age = gemelli1990$age
, male = gemelli1990$male
, height = NA
, height_percentile = NA
, default_height_percentile = 0.5
, source = "gemelli1990"
, type = "quantile"
)
stopifnot(identical(class(x), "list"))
stopifnot(identical(length(x), 2L))
stopifnot(identical(length(x[[1]]), nrow(gemelli1990)))
stopifnot(identical(length(x[[2]]), nrow(gemelli1990)))
stopifnot(identical(class(attr(x, "bp_params")), "data.frame"))
stopifnot(isTRUE(all.equal(unname(x), as.list(gemelli1990[c("sbp_mean", "dbp_mean")]), check.attributes = FALSE)))
################################################################################
# Verify expected output for lo2013
x <-
pedbp:::cppBP(
qp_sbp = lo2013$sbp_mean
, qp_dbp = lo2013$dbp_mean
, age = lo2013$age
, male = lo2013$male
, height = NA
, height_percentile = NA
, default_height_percentile = 0.5
, source = "lo2013"
, type = "distribution"
)
stopifnot(identical(class(x), "list"))
stopifnot(identical(length(x), 2L))
stopifnot(identical(length(x[[1]]), nrow(lo2013)))
stopifnot(identical(length(x[[2]]), nrow(lo2013)))
stopifnot(identical(class(attr(x, "bp_params")), "data.frame"))
stopifnot(isTRUE(all.equal(unname(x), list(rep(0.5, nrow(lo2013)), rep(0.5, nrow(lo2013))), check.attributes = FALSE)))
x <-
pedbp:::cppBP(
qp_sbp = 0.5
, qp_dbp = 0.5
, age = lo2013$age
, male = lo2013$male
, height = NA
, height_percentile = NA
, default_height_percentile = 0.5
, source = "lo2013"
, type = "quantile"
)
stopifnot(identical(class(x), "list"))
stopifnot(identical(length(x), 2L))
stopifnot(identical(length(x[[1]]), nrow(lo2013)))
stopifnot(identical(length(x[[2]]), nrow(lo2013)))
stopifnot(identical(class(attr(x, "bp_params")), "data.frame"))
stopifnot(isTRUE(all.equal(unname(x), as.list(lo2013[c("sbp_mean", "dbp_mean")]), check.attributes = FALSE)))
################################################################################
# verify output for nhlbi
nq <-
pedbp:::cppBP(
qp_sbp = nhlbi_bp_norms$bp_percentile/100,
qp_dbp = nhlbi_bp_norms$bp_percentile/100,
male = nhlbi_bp_norms$male,
age = nhlbi_bp_norms$age,
height = NA,
height_percentile = nhlbi_bp_norms$height_percentile,
default_height_percentile = 0.5,
source = "nhlbi",
type = "quantile"
)
np <-
pedbp:::cppBP(
qp_sbp = nhlbi_bp_norms$sbp,
qp_dbp = nhlbi_bp_norms$dbp,
male = nhlbi_bp_norms$male,
age = nhlbi_bp_norms$age,
height = NA,
height_percentile = nhlbi_bp_norms$height_percentile,
default_height_percentile = 0.5,
source = "nhlbi",
type = "distribution"
)
nhlbi_bp <-
cbind(nhlbi_bp_norms,
pedbp_sbp = nq$sbp,
pedbp_dbp = nq$dbp,
pedbp_sbp_p = np$sbp_p * 100,
pedbp_dbp_p = np$dbp_p * 100
)
# All the quantile estimates are within 2 mmHg:
stopifnot(max(abs(nhlbi_bp$pedbp_sbp - nhlbi_bp$sbp)) < 2)
stopifnot(max(abs(nhlbi_bp$pedbp_dbp - nhlbi_bp$dbp)) < 2)
# All the percentiles are within 2 percentile points:
stopifnot(max(abs(nhlbi_bp$pedbp_sbp_p - nhlbi_bp$bp_percentile)) < 2)
stopifnot(max(abs(nhlbi_bp$pedbp_dbp_p - nhlbi_bp$bp_percentile)) < 2)
################################################################################
# verify output for flynn2017
nq <-
pedbp:::cppBP(
qp_sbp = flynn2017$bp_percentile/100,
qp_dbp = flynn2017$bp_percentile/100,
male = flynn2017$male,
age = flynn2017$age,
height = NA,
height_percentile = flynn2017$height_percentile,
default_height_percentile = 0.5,
source = "flynn2017",
type = "quantile"
)
np <-
pedbp:::cppBP(
qp_sbp = flynn2017$sbp,
qp_dbp = flynn2017$dbp,
male = flynn2017$male,
age = flynn2017$age,
height = NA,
height_percentile = flynn2017$height_percentile,
default_height_percentile = 0.5,
source = "flynn2017",
type = "distribution"
)
flynn2017 <-
cbind(flynn2017,
pedbp_sbp = nq$sbp,
pedbp_dbp = nq$dbp,
pedbp_sbp_p = np$sbp_p * 100,
pedbp_dbp_p = np$dbp_p * 100
)
# All the quantile estimates are within 2 mmHg:
stopifnot(max(abs(flynn2017$pedbp_sbp - flynn2017$sbp)) < 2)
stopifnot(max(abs(flynn2017$pedbp_dbp - flynn2017$dbp)) < 2)
# All the percentiles are within 2 percentile points:
stopifnot(max(abs(flynn2017$pedbp_sbp_p - flynn2017$bp_percentile)) < 2)
stopifnot(max(abs(flynn2017$pedbp_dbp_p - flynn2017$bp_percentile)) < 2)
################################################################################
# test output for martin2022
test_martin2022 <-
expand.grid(age = seq(0, 217, by = 1),
male = 0:1,
height = c(NA, seq(75, 160, by = 10)),
height_percentile = c(NA, seq(0.01, 0.99, by = 0.1)),
source = NA_character_,
stringsAsFactors = FALSE
)
# build up the expected source
test_martin2022$source[test_martin2022$age < 12] <- "gemelli1990"
test_martin2022$source[(test_martin2022$age >= 12) &
(!is.na(test_martin2022$height) | !is.na(test_martin2022$height_percentile))
] <- "nhlbi"
test_martin2022$source[(test_martin2022$age >= 12) &
(is.na(test_martin2022$height) & is.na(test_martin2022$height_percentile)) &
(test_martin2022$age < 36)
] <- "nhlbi"
test_martin2022$source[(test_martin2022$age >= 12) &
(is.na(test_martin2022$height) & is.na(test_martin2022$height_percentile)) &
(test_martin2022$age >= 36)
] <- "lo2013"
# clean up expected source
test_martin2022$source[test_martin2022$age <= 0] <- NA_character_
test_martin2022$source[test_martin2022$age > 216] <- NA_character_
original_hash <- digest::digest(test_martin2022) # needed for testing against error seen in #18
x <-
pedbp:::cppBP(
qp_sbp = numeric(1),
qp_dbp = numeric(1),
age = test_martin2022$age,
male = test_martin2022$male,
height = test_martin2022$height,
height_percentile = test_martin2022$height_percentile,
default_height_percentile = 0.8,
source = "martin2022",
type = 'quantile')
new_hash <- digest::digest(test_martin2022)
stopifnot(identical(original_hash, new_hash))
x <- attr(x, 'bp_params')
stopifnot(identical(test_martin2022$source, x$source) )
x <-
pedbp:::cppBP(
qp_sbp = numeric(1),
qp_dbp = numeric(1),
age = test_martin2022$age,
male = test_martin2022$male,
height = test_martin2022$height,
height_percentile = test_martin2022$height_percentile,
default_height_percentile = 0.8,
source = "martin2022",
type = 'distribution')
new_hash <- digest::digest(test_martin2022)
stopifnot(identical(original_hash, new_hash))
x <- attr(x, 'bp_params')
stopifnot(identical(test_martin2022$source, x$source) )
################################################################################
## End of file ##
################################################################################
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.