Nothing
context("Create a subject profile summary plot")
library(ggplot2)
test_that("An error is generated if the default variable for the plot is not available in the data", {
expect_error(
subjectProfileSummaryPlot(data = data.frame()),
"Variable.* not in data"
)
})
test_that("The plot is correctly facetted based on a variable", {
summaryTable <- data.frame(
PARAM = factor(
c("AAA", "AAA", "ZZZ", "ZZZ"),
levels = c("ZZZ", "AAA")
),
visit = c(1, 2, 1, 2),
statMean = rnorm(4)
)
expect_silent(
gg <- subjectProfileSummaryPlot(
data = summaryTable,
xVar = "visit",
facetVar = "PARAM"
)
)
# check that the plots is facetted
# and that facetted are ordered according to levels of factor
ggData <- lapply(ggplot_build(gg)$data, `[`, c("x", "y", "PANEL"))
ggData <- unique(do.call(rbind, ggData))
facets <- levels(summaryTable$PARAM)
for(i in seq_along(facets)){
expect_equal(
object = subset(ggData, PANEL == !!i)[, c("x", "y")],
expected = setNames(
subset(summaryTable, PARAM == facets[[!!i]])[, c("visit", "statMean")],
c("x", "y")
),
check.attributes = FALSE
)
}
})
test_that("The scale of the facet is correctly set", {
summaryTable <- data.frame(
PARAM = c("AAA", "AAA", "ZZZ", "ZZZ"),
visit = c(1, 2, 1, 2),
statMean = rnorm(4)
)
expect_true({
gg <- subjectProfileSummaryPlot(
data = summaryTable,
xVar = "visit",
facetVar = "PARAM",
facetScale = "free_y"
)
expect_true(
with(ggplot_build(gg)$layout$facet$params,
free$y & !free$x
)
)
})
})
test_that("Horizontal lines are correctly set", {
hLine <- c(1, 3)
hLineColor <- c("blue", "red")
hLineLty <- c("dotted", "dashed")
gg <- subjectProfileSummaryPlot(
data = data.frame(
visit = c(1, 2),
statMean = rnorm(2)
),
xVar = "visit",
hLine = hLine,
hLineColor = hLineColor,
hLineLty = hLineLty
)
# extract data behind the lines
isGeomLine <- sapply(gg$layers, function(l) inherits(l$geom, "GeomHline"))
ggDataLine <- do.call(rbind, ggplot_build(gg)$data[isGeomLine])
expect_equal(ggDataLine$yintercept, hLine)
expect_equal(ggDataLine$colour, hLineColor)
expect_equal(ggDataLine$linetype, hLineLty)
})
test_that("Horizontal lines are correctly set by facet", {
summaryTable <- data.frame(
PARAM = factor(
c("AAA", "AAA", "ZZZ", "ZZZ"),
levels = c("ZZZ", "AAA")
),
visit = c(1, 2, 1, 2),
statMean = rnorm(4)
)
expect_equal({
gg <- subjectProfileSummaryPlot(
data = summaryTable,
xVar = "visit",
facetVar = "PARAM",
hLine = c(AAA = 3, ZZZ = 1)
)
# extract data behind the lines
isGeomLine <- sapply(gg$layers, function(l) inherits(l$geom, "GeomHline"))
ggDataLine <- do.call(rbind, ggplot_build(gg)$data[isGeomLine])
ggDataLine[match(c(1, 2), ggDataLine$PANEL), "yintercept"]
},
expected = c(1, 3)
)
})
test_that("Vertical lines are correctly set", {
vLine <- c(1, 2)
vLineColor <- c("green", "yellow")
vLineLty <- c("dashed", "solid")
gg <- subjectProfileSummaryPlot(
data = data.frame(
visit = c(1, 2),
statMean = rnorm(2)
),
xVar = "visit",
vLine = vLine,
vLineColor = vLineColor,
vLineLty = vLineLty
)
# extract data behind the lines
isGeomLine <- sapply(gg$layers, function(l) inherits(l$geom, "GeomVline"))
ggDataLine <- do.call(rbind, ggplot_build(gg)$data[isGeomLine])
expect_equal(ggDataLine$xintercept, vLine)
expect_equal(ggDataLine$colour, vLineColor)
expect_equal(ggDataLine$linetype, vLineLty)
})
test_that("A table is successfully included in a plot", {
summaryTable <- data.frame(
visit = c(1, 2),
statMean = rnorm(2),
n = c(10, 20),
TRT = c("A", "B")
)
# ggplot2: a (expected) warning is created
# because geom_point is used with size = NA to
# avoid the 'a' in the legend
withCallingHandlers(
expr = {
gg <- subjectProfileSummaryPlot(
data = summaryTable,
xVar = "visit",
tableText = "n"
)
},
warning = function(w){
if(grepl("missing values \\(geom_point\\)", conditionMessage(w)))
invokeRestart("muffleWarning")
}
)
expect_s3_class(gg, "ggplot")
ggData <- ggplot_build(gg)$data
expect_length(ggData, 2) # plot + table
})
test_that("A table with specific height is correctly included in a plot", {
summaryTable <- data.frame(
visit = c(1, 2),
statMean = rnorm(2),
n = c(10, 20)
)
tableHeight <- 0.45
# ggplot2: a (expected) warning is created
# because geom_point is used with size = NA to
# avoid the 'a' in the legend
withCallingHandlers(
expr = {
gg <- subjectProfileSummaryPlot(
data = summaryTable,
xVar = "visit",
tableText = "n",
tableHeight = tableHeight
)
},
warning = function(w){
if(grepl("missing values \\(geom_point\\)", conditionMessage(w)))
invokeRestart("muffleWarning")
}
)
ggData <- ggplot_build(gg)$data
ggData <- do.call(rbind.fill, ggData)
# 2 panels are created
expect_equal(nrow(ggData), 2)
# check that created panels have correct height:
gDataYCoord <- as.list(as.data.frame(t(ggData[, c("ymin", "ymax")])))
gDataYCoord <- gDataYCoord[order(sapply(gDataYCoord, min))]
expect_setequal(
object = gDataYCoord,
expected = list(c(0, 0.45), c(0.45, 1))
)
})
test_that("An error is generated if the height for the table is not correctly specified", {
summaryTable <- data.frame(
visit = c(1, 2),
statMean = rnorm(2),
n = c(10, 20)
)
expect_error(
subjectProfileSummaryPlot(
data = summaryTable,
xVar = "visit",
tableText = "n",
tableHeight = 1.5
),
"Table height should be between 0 and 1."
)
})
test_that("A warning is generated if the facet and text variables are specified", {
summaryTable <- data.frame(
visit = c(1, 2),
PARAM = c("AAA", "ZZZ"),
statMean = rnorm(2),
n = c(1, 2)
)
expect_warning(
subjectProfileSummaryPlot(
data = summaryTable,
xVar = "visit",
tableText = "n",
facetVar = "PARAM"
),
"Table cannot be used in combination with 'facetVar', no table is included."
)
})
test_that("Extra ggplot with a data point outside the plot range is correctly included", {
summaryTable <- data.frame(
visit = c(1, 2),
statMean = c(2, 3),
statSE = c(0.1, 0.2)
)
dataExtra <- data.frame(visit = 4, y = 2)
ggExtra <- ggplot2::geom_point(ggplot2::aes(x = visit, y = y), data = dataExtra)
gg <- subjectProfileSummaryPlot(
data = summaryTable,
xVar = "visit",
ggExtra = ggExtra
)
xScales <- ggplot_build(gg)$layout$panel_scales_x[[1]]
# test that the data point from ggExtra is included inside plot limits
expect_gte(object = max(xScales$limits), expected = 4)
})
test_that("Extra ggplot specified as a function is correctly included", {
summaryTable <- data.frame(
visit = c(1, 2),
statMean = c(2, 3),
statSE = c(0.1, 0.2)
)
ggExtra <- function(gg){
gg <- gg +
ggplot2::geom_vline(xintercept = 1) +
ggplot2::geom_hline(yintercept = 2)
return(gg)
}
gg <- subjectProfileSummaryPlot(
data = summaryTable,
xVar = "visit",
ggExtra = ggExtra
)
getDataGeom <- function(geom){
isGeom <- sapply(gg$layers, function(l) inherits(l$geom, geom))
data <- do.call(rbind, ggplot_build(gg)$data[isGeom])
return(data)
}
expect_equal(getDataGeom(geom = "GeomVline")$xintercept, 1)
expect_equal(getDataGeom(geom = "GeomHline")$yintercept, 2)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.