Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
a689b80
test: add coverage for l_pkcl01 requireNamespace error path
h5hoang Jun 5, 2026
78ae054
test: extend tlg_module tests for edit widget dispatch and pagination
h5hoang Jun 5, 2026
de90034
test: add tests for tlg_option numeric, text, and select modules
h5hoang Jun 5, 2026
3c0343e
test: add tests for tlg_option_table module
h5hoang Jun 5, 2026
90ad858
test: add tests for g_pkcg internal helper functions
h5hoang Jun 5, 2026
4b1022e
test: add tests for g_lineplot internal helper functions
h5hoang Jun 5, 2026
f7f64d0
test: replace empty it() blocks with expect_no_error in tlg_option_mo…
h5hoang Jun 5, 2026
19a25f2
docs: bump version to 0.1.0.9176 and add NEWS entry for #1351
h5hoang Jun 5, 2026
da24469
style: remove commented code flagged by lintr in test-g_pkcg_helpers
h5hoang Jun 5, 2026
0eb2cb9
fix: remove no-op filter from adpc_pkcg03 fixture in test-g_pkcg_helpers
h5hoang Jun 5, 2026
2936346
test: replace expect_true(TRUE) with meaningful assertion in tlg_modu…
h5hoang Jun 5, 2026
2528d05
docs: fix misleading comment in BLQ-filter test for pkcg03
h5hoang Jun 5, 2026
fb71018
test: tighten BLQ all-group assertion to expect_equal(length(plots), 0)
h5hoang Jun 5, 2026
7b5e389
test: address reviewer feedback (storing variable name and unused ren…
h5hoang Jun 8, 2026
308d138
feat: add SBS wrapper functions for pkcg01, pkcg02, pkcg03
h5hoang Jun 8, 2026
7959011
feat: add dose-grouped mean plot wrappers for pkcg03
h5hoang Jun 8, 2026
5e16614
feat: add TAD concentration listing wrapper l_pkcl01_tad
h5hoang Jun 8, 2026
0d1fbf7
feat: add l_pkcl01_tad wrapper with apply_labels for TAD time variables
h5hoang Jun 8, 2026
9e3980b
feat: add new TLG functions (pkcl02, pkpg01/02/03/04/06, pkct01, pkpt…
h5hoang Jun 18, 2026
aadbc52
fix: include DOSEA and DOSEU in ADPP export for dose-proportionality …
h5hoang Jun 18, 2026
d9c28d9
fix: convert ggplot S7 objects to plotly in TLG module render branch
h5hoang Jun 18, 2026
93c318b
docs: update NAMESPACE and roxygen man pages for new TLG exports
h5hoang Jun 18, 2026
60c8b81
test: add and update test coverage for all new TLG functions
h5hoang Jun 18, 2026
f44bb3f
fix: address code review issues for TLG catalog expansion
h5hoang Jun 18, 2026
3332dcd
test: add coverage for TLG catalog expansion
h5hoang Jun 18, 2026
8f3d675
fix: address code review issues in TLG catalog expansion
h5hoang Jun 18, 2026
3b645a3
fix: convert to character before NA replacement in t_pkct01 make_table
h5hoang Jun 19, 2026
608b341
fix: preserve rows with NA exclusion flags in filter_tlg_excluded
h5hoang Jun 19, 2026
bc98a7a
fix: correct fun entry for g_pkcg02_sbs in tlg.yaml
h5hoang Jun 19, 2026
d007295
fix: add missing exports to NAMESPACE
h5hoang Jun 19, 2026
f8bf6a3
fix: dedup ADPP rows in urine/doseprop plots and fix outlier detection
h5hoang Jun 19, 2026
d7110f3
fix: deterministic table module IDs and remove unused adnca param
h5hoang Jun 19, 2026
4a2d371
fix: stats:: style violation in t_pkpt08_uri and phantom @param
h5hoang Jun 19, 2026
b2de559
fix: include AVISIT in ADPP dedup key, fix pkpg04 outlier labels, tig…
h5hoang Jun 20, 2026
7413d35
fix: regenerate Rd files after roxygen source corrections
h5hoang Jun 20, 2026
d5ffd08
fix: deterministic module IDs, ADPP validate message, remove debug pr…
h5hoang Jun 20, 2026
ebe88bf
refactor: consolidate summary fns, extract .get_var_label, simplify l…
h5hoang Jun 20, 2026
c8223c0
refactor: move .summarise_adpp to utils-tlg.R
h5hoang Jun 20, 2026
0b8fad2
fix: warn when PPSPEC column absent in urine TLG functions
h5hoang Jun 20, 2026
29a4ed9
fix: warn and guard listgroup_vars when PCSPEC absent in l_pkcl02_uri
h5hoang Jun 20, 2026
b761299
fix: p_pkpg02_doseprop annotation dropped by log10(-Inf) on log scale
h5hoang Jun 20, 2026
65b1f8a
fix: t_pkpt11_gmr NaN CI bounds and PPSPEC warning text
h5hoang Jun 20, 2026
1fc37dd
fix: prevent duplicate pagination observers on TLG re-submit
h5hoang Jun 20, 2026
3ff2ac4
fix: lint, R CMD CHECK warnings, and Rd documentation
h5hoang Jun 20, 2026
05e0e68
fix: R CMD check NOTEs — add globalVariables, importFrom quantile, WO…
h5hoang Jun 21, 2026
ae51175
fix: add missing spellcheck WORDLIST entries (metab, pkpt, pkpg, etc.)
h5hoang Jun 21, 2026
906aef6
merge: resolve DESCRIPTION version conflict (bump to 0.1.0.9178)
h5hoang Jun 22, 2026
3e29585
fix: match urine specimen filters case-insensitively (PCSPEC/PPSPEC)
h5hoang Jun 29, 2026
a0b8e7f
feat: improve TLG summary table readability (group headers, arm/time …
h5hoang Jun 29, 2026
9a31de2
docs: update NEWS and bump version to 0.1.0.9179
h5hoang Jun 29, 2026
83e2814
test: add coverage for TLG table presentation and case-insensitive ur…
h5hoang Jun 29, 2026
646ecf2
feat: order summary tables by natural (numeric-aware) sort
h5hoang Jun 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Package: aNCA
Title: (Pre-)Clinical NCA in a Dynamic Shiny App
Version: 0.1.0.9177
Version: 0.1.0.9179
Authors@R: c(
person("Ercan", "Suekuer", email = "ercan.suekuer@roche.com", role = "aut",
comment = c(ORCID = "0009-0001-1626-1526")),
Expand Down
39 changes: 39 additions & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,13 @@ export(format_pkncadose_data)
export(g_lineplot)
export(g_pkcg01_lin)
export(g_pkcg01_log)
export(g_pkcg01_sbs)
export(g_pkcg02_lin)
export(g_pkcg02_log)
export(g_pkcg02_sbs)
export(g_pkcg03_lin)
export(g_pkcg03_log)
export(g_pkcg03_sbs)
export(generate_pre_specs)
export(generate_tooltip_text)
export(get_conversion_factor)
Expand All @@ -55,7 +58,21 @@ export(get_settings_code)
export(interval_add_impute)
export(interval_remove_impute)
export(l_pkcl01)
export(l_pkcl01_tad)
export(l_pkcl02_uri)
export(l_pkpl01)
export(l_pkpl01_mp)
export(l_pkpl04_mp)
export(multiple_matrix_ratios)
export(p_pkcg03_lin_dose)
export(p_pkcg03_log_dose)
export(p_pkcg03_sbs_dose)
export(p_pkpg01_cum)
export(p_pkpg01_per)
export(p_pkpg02_doseprop)
export(p_pkpg03_boxp)
export(p_pkpg04_boxp)
export(p_pkpg06_mp)
export(parse_annotation)
export(pivot_wider_pknca_results)
export(pk.calc.ermax)
Expand All @@ -73,6 +90,15 @@ export(remove_pp_not_requested)
export(run_app)
export(settings_version_summary)
export(simplify_unit)
export(t_pkct01)
export(t_pkct01_dose)
export(t_pkct01_dose_tad)
export(t_pkct01_tad)
export(t_pkpt03_MP_col)
export(t_pkpt03_col)
export(t_pkpt07_norm)
export(t_pkpt08_uri)
export(t_pkpt11_gmr)
export(translate_terms)
export(update_main_intervals)
export(write_versioned_settings)
Expand Down Expand Up @@ -124,10 +150,15 @@ importFrom(dplyr,where)
importFrom(formatters,`var_labels<-`)
importFrom(formatters,var_labels)
importFrom(ggplot2,aes)
importFrom(ggplot2,element_blank)
importFrom(ggplot2,element_text)
importFrom(ggplot2,facet_wrap)
importFrom(ggplot2,geom_boxplot)
importFrom(ggplot2,geom_errorbar)
importFrom(ggplot2,geom_jitter)
importFrom(ggplot2,geom_line)
importFrom(ggplot2,geom_point)
importFrom(ggplot2,geom_text)
importFrom(ggplot2,ggplot)
importFrom(ggplot2,ggplot_build)
importFrom(ggplot2,ggplot_gtable)
Expand All @@ -137,6 +168,10 @@ importFrom(ggplot2,scale_color_viridis_d)
importFrom(ggplot2,scale_colour_manual)
importFrom(ggplot2,scale_shape_manual)
importFrom(ggplot2,scale_x_continuous)
importFrom(ggplot2,scale_x_log10)
importFrom(ggplot2,scale_y_log10)
importFrom(ggplot2,stat_summary)
importFrom(ggplot2,theme)
importFrom(ggplot2,theme_bw)
importFrom(glue,glue)
importFrom(grid,convertUnit)
Expand All @@ -160,6 +195,7 @@ importFrom(purrr,pmap_chr)
importFrom(purrr,reduce)
importFrom(reactable,reactable)
importFrom(reactable.extras,reactable_extras_dependency)
importFrom(rlang,.data)
importFrom(rlang,expr)
importFrom(rlang,sym)
importFrom(rlang,syms)
Expand All @@ -169,11 +205,14 @@ importFrom(shinycssloaders,withSpinner)
importFrom(shinyjqui,orderInput)
importFrom(shinyjs,useShinyjs)
importFrom(stats,as.formula)
importFrom(stats,coef)
importFrom(stats,confint)
importFrom(stats,lm)
importFrom(stats,median)
importFrom(stats,na.omit)
importFrom(stats,predict)
importFrom(stats,qt)
importFrom(stats,quantile)
importFrom(stats,sd)
importFrom(stats,setNames)
importFrom(tidyr,crossing)
Expand Down
17 changes: 17 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,23 @@

## Features

### TLG Catalog
* Implement new TLG functions to complete the pkct01, pkpt03/07/08/11, pkpg01/02/03/04/06, pkpl01/04, and pkcl02 catalog entries (#1343):
- `t_pkct01` / `t_pkct01_dose` / `t_pkct01_tad` / `t_pkct01_dose_tad` — summary concentration tables (by TRT or dose, from first dose or TAD)
- `t_pkpt03_col` / `t_pkpt03_MP_col` — PK parameter summary tables with stats in columns (full dataset and metabolite/parent filtered)
- `t_pkpt07_norm` — dose-normalized PK parameter summary table
- `t_pkpt08_uri` — urine cumulative amount and % dose recovered summary table (n, Mean, SD, CV%, Median, Min, Max)
- `t_pkpt11_gmr` — geometric mean ratio table with 90% CIs
- `p_pkpg03_boxp` / `p_pkpg04_boxp` — boxplots of primary PK parameters (with and without individual data points)
- `p_pkpg06_mp` — boxplot of metabolite/parent PK parameter ratios
- `p_pkpg01_cum` / `p_pkpg01_per` — mean cumulative urine amount and % dose recovered line plots
- `p_pkpg02_doseprop` — dose-proportionality scatter plot with power-model regression on log-log scale
- `l_pkpl01` / `l_pkpl01_mp` — individual PK parameter listings (all parameters and metabolite-filtered)
- `l_pkpl04_mp` — individual PK parameter listing organised for treatment comparison
- `l_pkcl02_uri` — urine concentration and volume listing
* ADPP-based TLG outputs now correctly exclude rows flagged via `PPSUMFL = "Y"`, consistent with ADNCA exclusion via `PKSUM1F` (#1343)
* Summary tables are easier to read: split tables (e.g. by analyte/specimen) now show the group as a header, `t_pkct01` rows are grouped by treatment arm with timepoints in numeric order, statistic columns use readable headers (e.g. "Geometric Mean", "CV%"), and urine specimen filtering matches `PCSPEC`/`PPSPEC` case-insensitively (#1343)

### Settings & Configuration
* Settings upload auto-restores the full session: mapping, filters, data processing, tab navigation, and auto-runs NCA if previously run. Incompatible settings degrade gracefully with notifications (#1225)
* Settings version control: YAML file stores multiple versions with metadata. Save button in header, version selection on upload, version delete support (#1103)
Expand Down
5 changes: 4 additions & 1 deletion R/export_cdisc.R
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ export_cdisc <- function(res_nca, grouping_vars = character(0), flag_rules = NUL
to_match_res_cols, dose_time_col, route_col, duration_col, conc_timeu_col,
# Raw variables that can be directly used in PP or ADPP if present
CDISC_COLS$PP$Variable, CDISC_COLS$ADPP$Variable,
# Dose amount/unit — not in ADPP CDISC metadata but needed for dose-proportionality TLGs
"DOSEA", "DOSEU",
# Variables that can be used to guess other missing variables
"PCRFTDTM", "PCRFTDTC", "PCTPTREF", "VISIT", "ATPTREF", "EXFAST",
"PCFAST", "FEDSTATE", "EPOCH"
Expand Down Expand Up @@ -228,7 +230,8 @@ export_cdisc <- function(res_nca, grouping_vars = character(0), flag_rules = NUL
adpp <- cdisc_info %>%
select(any_of(c(
CDISC_COLS$ADPP$Variable, "exclude", grouping_vars,
".pp_excl", ".pp_excl_reason"
".pp_excl", ".pp_excl_reason",
"DOSEA", "DOSEU"
))) %>%
# Deselect permitted columns with only NAs
select(
Expand Down
54 changes: 54 additions & 0 deletions R/g_pkcg.R
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,15 @@ g_pkcg01_log <- function(data, ...) {
pkcg01(adnca = data, scale = "LOG", ...)
}

#' Wrapper around aNCA::pkcg01() function. Calls the function with `SBS` scale argument.
#' @param data Data to be passed into the plotting function.
#' @param ... Any other parameters to be passed into the plotting function.
#' @returns ggplot2 object for pkcg01.
#' @export
g_pkcg01_sbs <- function(data, ...) {
pkcg01(adnca = data, scale = "SBS", ...)
}

#' Generate PK Concentration-Time Profile Plots
#'
#' This function generates a list of ggplots for PK concentration-time profiles.
Expand Down Expand Up @@ -359,6 +368,15 @@ g_pkcg02_log <- function(data, ...) {
pkcg02(adnca = data, scale = "LOG", ...)
}

#' Wrapper around aNCA::pkcg02() function. Calls the function with `SBS` scale argument.
#' @param data Data to be passed into the plotting function.
#' @param ... Any other parameters to be passed into the plotting function.
#' @returns ggplot2 object for pkcg02.
#' @export
g_pkcg02_sbs <- function(data, ...) {
pkcg02(adnca = data, scale = "SBS", ...)
}

#' Generate Combined PK Concentration-Time Profile Plot by Cohort
#'
#' This function generates a list of plotly objects PK concentration-time profiles by group
Expand Down Expand Up @@ -669,6 +687,42 @@ g_pkcg03_log <- function(data, ...) {
pkcg03(adnca = data, scale = "LOG", ...)
}

#' Wrapper around aNCA::pkcg03() function. Calls the function with `SBS` scale argument.
#' @param data Data to be passed into the plotting function.
#' @param ... Any other parameters to be passed into the plotting function.
#' @returns ggplot2 object for pkcg03.
#' @export
g_pkcg03_sbs <- function(data, ...) {
pkcg03(adnca = data, scale = "SBS", ...)
}

#' Wrapper around aNCA::pkcg03() function. Mean linear plot grouped by dose.
#' @param data Data to be passed into the plotting function.
#' @param ... Any other parameters to be passed into the plotting function.
#' @returns ggplot2 object for pkcg03.
#' @export
p_pkcg03_lin_dose <- function(data, ...) {
pkcg03(adnca = data, scale = "LIN", mean_group_var = "DOSEA", ...)
}

#' Wrapper around aNCA::pkcg03() function. Mean log plot grouped by dose.
#' @param data Data to be passed into the plotting function.
#' @param ... Any other parameters to be passed into the plotting function.
#' @returns ggplot2 object for pkcg03.
#' @export
p_pkcg03_log_dose <- function(data, ...) {
pkcg03(adnca = data, scale = "LOG", mean_group_var = "DOSEA", ...)
}

#' Wrapper around aNCA::pkcg03() function. Mean side-by-side plot grouped by dose.
#' @param data Data to be passed into the plotting function.
#' @param ... Any other parameters to be passed into the plotting function.
#' @returns ggplot2 object for pkcg03.
#' @export
p_pkcg03_sbs_dose <- function(data, ...) {
pkcg03(adnca = data, scale = "SBS", mean_group_var = "DOSEA", ...)
}

#' Generate PK Concentration-Time Profile Plots
#'
#' This function generates a list of ggplots for Mean PK concentration-time profiles.
Expand Down
Loading
Loading