From 1cb5abf3e73c1670a6887538efc1ae35d1019cfa Mon Sep 17 00:00:00 2001 From: Dominic Tong Date: Fri, 14 Nov 2025 13:48:47 -0800 Subject: [PATCH 1/6] initial commit, use cmt map for dosing --- DESCRIPTION | 2 +- R/nm_to_regimen.R | 33 ++++++++++++++++------------ man/nm_to_regimen.Rd | 9 +++++++- tests/testthat/test_nm_to_regimen.R | 34 ++++++++++++++++++++++++++++- 4 files changed, 61 insertions(+), 17 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 4ff62243..ebf0f49f 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -30,7 +30,7 @@ URL: https://github.com/InsightRX/PKPDsim, Language: en-US LazyData: TRUE Roxygen: list(markdown = TRUE) -RoxygenNote: 7.3.2 +RoxygenNote: 7.3.3 Config/testthat/edition: 3 Config/Needs/website: tidyverse, nlmixr2 Encoding: UTF-8 diff --git a/R/nm_to_regimen.R b/R/nm_to_regimen.R index 86d180c5..7e1a1510 100644 --- a/R/nm_to_regimen.R +++ b/R/nm_to_regimen.R @@ -2,13 +2,17 @@ #' #' Create a regimen based on a NONMEM, or NONMEM-like dataset #' @param data NONMEM-type dataset +#' @param dose_cmts map from compartment number to dose type, defaults to compartment 1 being an infusion dose #' @param reset_time start time for each simulated patient at 0, irrespective of design in dataset #' @param first_only use only design from first individual in dataset #' @export #' @return Regimen object -nm_to_regimen <- function(data, - reset_time = TRUE, - first_only = FALSE) { +nm_to_regimen <- function( + data, + dose_cmts = c("1" = "infusion"), + reset_time = TRUE, + first_only = FALSE +) { colnames(data) <- tolower(colnames(data)) if(!"evid" %in% colnames(data)) { stop("EVID column is required in source dataset!") @@ -19,30 +23,31 @@ nm_to_regimen <- function(data, if(! "time" %in% colnames(data)) { stop("TIME column is required in source dataset!") } - m <- match(c("id", "mdv", "evid", "amt", "time", "rate"), colnames(data), 0) + if(! "cmt" %in% colnames(data)) { + stop("CMT column is required in source dataset!") + } + m <- match(c("id", "mdv", "evid", "amt", "time", "rate", "cmt"), colnames(data), 0) m <- m[m>0] data <- data[,m] doses <- data[data$evid == 1,] - dum <- data[data$evid == 2,] ids <- unique(doses$id) if(first_only) { ids <- ids[1] } - type <- "bolus" - if("rate" %in% colnames(doses) &! 0 %in% doses$rate) { - type <- "infusion" - } reg <- list() for(i in 1:length(ids)) { tmp <- doses[doses$id == ids[i],] if(reset_time) { tmp$time <- tmp$time - min(tmp$time) } - if(type == "infusion") { - reg[[i]] <- new_regimen(amt = tmp$amt, times = tmp$time, type = "infusion", t_inf = tmp$amt / tmp$rate) - } else { - reg[[i]] <- new_regimen(amt = tmp$amt, times = tmp$time, type = "bolus") - } + # map cmt to dose type + reg[[i]] <- new_regimen( + amt = tmp$amt, + times = tmp$time, + cmt = tmp$cmt, + type = unname(unlist(dose_cmts[as.character(tmp$cmt)])), + t_inf = ifelse(is.na(tmp$rate), NA, tmp$amt / tmp$rate) + ) } if(length(ids) == 1) { return(reg[[1]]) diff --git a/man/nm_to_regimen.Rd b/man/nm_to_regimen.Rd index e7716516..98ad77cc 100644 --- a/man/nm_to_regimen.Rd +++ b/man/nm_to_regimen.Rd @@ -4,11 +4,18 @@ \alias{nm_to_regimen} \title{Create a regimen from NONMEM data} \usage{ -nm_to_regimen(data, reset_time = TRUE, first_only = FALSE) +nm_to_regimen( + data, + dose_cmts = c(`1` = "infusion"), + reset_time = TRUE, + first_only = FALSE +) } \arguments{ \item{data}{NONMEM-type dataset} +\item{dose_cmts}{map from compartment number to dose type, defaults to compartment 1 being an infusion dose} + \item{reset_time}{start time for each simulated patient at 0, irrespective of design in dataset} \item{first_only}{use only design from first individual in dataset} diff --git a/tests/testthat/test_nm_to_regimen.R b/tests/testthat/test_nm_to_regimen.R index 8b3a65d2..cd4847de 100644 --- a/tests/testthat/test_nm_to_regimen.R +++ b/tests/testthat/test_nm_to_regimen.R @@ -19,6 +19,13 @@ test_that("Required column checks occur", { ), "EVID column is required" ) + + expect_error( + nm_to_regimen( + data.frame(AMT = 100, TIME = 0, EVID = 0) + ), + "CMT column is required" + ) }) test_that("NM-style dataframe for 1 ID converted to regimen", { @@ -26,6 +33,7 @@ test_that("NM-style dataframe for 1 ID converted to regimen", { ID = 1, EVID = c(1, 1, 0, 1, 1, 0), AMT = c(100, 100, 0, 200, 200, 0), + CMT = 1, TIME = c(0, 12, 23, 25, 36, 47), RATE = c(100, 100, 0, 200, 400, 0), DV = c(0, 0, 5, 0, 0, 12) @@ -42,11 +50,12 @@ test_that("Bolus/oral doses handled", { pt2 <- data.frame( ID = 1, EVID = c(1, 1, 0, 1, 1, 0), + CMT = 1, AMT = c(100, 100, 0, 200, 200, 0), TIME = c(0, 12, 23, 25, 36, 47), DV = c(0, 0, 5, 0, 0, 12) ) - reg2 <- nm_to_regimen(pt2) + reg2 <- nm_to_regimen(pt2, dose_cmts = c("1" = "bolus")) expect_true(inherits(reg2, "regimen")) expect_equal(reg2$dose_amts, c(100, 100, 200, 200)) expect_equal(reg2$dose_times, c(0, 12, 25, 36)) @@ -58,6 +67,7 @@ test_that("Multiple regimens from NONMEM-style dataset", { nm <- data.frame( ID = c(1, 1, 1, 2, 2, 2), EVID = c(1, 1, 0, 1, 1, 0), + CMT = 1, AMT = c(100, 100, 0, 200, 200, 0), TIME = c(0, 12, 23, 0, 24, 47), DV = c(0, 0, 5, 0, 0, 12) @@ -71,3 +81,25 @@ test_that("Multiple regimens from NONMEM-style dataset", { expect_equal(multi_regs[[1]]$dose_amts, c(100, 100)) expect_equal(multi_regs[[2]]$dose_amts, c(200, 200)) }) + +test_that("Doses in different compartments handled", { + pt2 <- data.frame( + ID = 1, + EVID = c(1, 1, 0, 1, 1, 0, 1, 1, 0), + CMT = c(2, 2, 2, 2, 2, 2, 1, 1, 2), # last two doses are oral + AMT = c(100, 100, 0, 200, 200, 0, 150, 150, 0), + TIME = c(0, 12, 23, 25, 36, 47, 48, 60, 71), + RATE = c(100, 100, 0, 200, 400, 0, 0, 0, 0), + DV = c(0, 0, 5, 0, 0, 12, 0, 0, 14) + ) + cmt_mapping <- c( + "1" = "oral", + "2" = "infusion" + ) + reg2 <- nm_to_regimen(pt2, cmt_mapping) + expect_true(inherits(reg2, "regimen")) + expect_equal(reg2$dose_amts, c(100, 100, 200, 200, 150, 150)) + expect_equal(reg2$dose_times, c(0, 12, 25, 36, 48, 60)) + expect_equal(reg2$t_inf, c(1, 1, 1, 0.5, 0, 0)) + expect_equal(reg2$type, c(rep("infusion", 4), rep("oral", 2))) +}) From e414a40def8d6b1c2cec3bcf73382ce5b0508eee Mon Sep 17 00:00:00 2001 From: Dominic Tong Date: Thu, 20 Nov 2025 12:04:49 -0800 Subject: [PATCH 2/6] make nm_to_regimen backwards compatible --- R/nm_to_regimen.R | 42 +++++++++++++++++++---------- man/nm_to_regimen.Rd | 11 +++----- tests/testthat/test_nm_to_regimen.R | 27 ++++++++++++------- 3 files changed, 48 insertions(+), 32 deletions(-) diff --git a/R/nm_to_regimen.R b/R/nm_to_regimen.R index 7e1a1510..e7fef7a5 100644 --- a/R/nm_to_regimen.R +++ b/R/nm_to_regimen.R @@ -2,16 +2,16 @@ #' #' Create a regimen based on a NONMEM, or NONMEM-like dataset #' @param data NONMEM-type dataset -#' @param dose_cmts map from compartment number to dose type, defaults to compartment 1 being an infusion dose #' @param reset_time start time for each simulated patient at 0, irrespective of design in dataset #' @param first_only use only design from first individual in dataset +#' @param dose_cmts map from compartment number to dose type, defaults to compartment 1 being an infusion dose #' @export #' @return Regimen object nm_to_regimen <- function( data, - dose_cmts = c("1" = "infusion"), reset_time = TRUE, - first_only = FALSE + first_only = FALSE, + dose_cmts = NULL ) { colnames(data) <- tolower(colnames(data)) if(!"evid" %in% colnames(data)) { @@ -23,9 +23,6 @@ nm_to_regimen <- function( if(! "time" %in% colnames(data)) { stop("TIME column is required in source dataset!") } - if(! "cmt" %in% colnames(data)) { - stop("CMT column is required in source dataset!") - } m <- match(c("id", "mdv", "evid", "amt", "time", "rate", "cmt"), colnames(data), 0) m <- m[m>0] data <- data[,m] @@ -40,14 +37,31 @@ nm_to_regimen <- function( if(reset_time) { tmp$time <- tmp$time - min(tmp$time) } - # map cmt to dose type - reg[[i]] <- new_regimen( - amt = tmp$amt, - times = tmp$time, - cmt = tmp$cmt, - type = unname(unlist(dose_cmts[as.character(tmp$cmt)])), - t_inf = ifelse(is.na(tmp$rate), NA, tmp$amt / tmp$rate) - ) + if (!is.null(dose_cmts)){ + # map cmt to dose type + reg[[i]] <- new_regimen( + amt = tmp$amt, + times = tmp$time, + cmt = tmp$cmt, + type = unname(unlist(dose_cmts[as.character(tmp$cmt)])), + t_inf = ifelse(is.na(tmp$rate), NA, tmp$amt / tmp$rate) + ) + } else if ("rate" %in% colnames(doses) &! 0 %in% doses$rate){ + # if rate exists and is non-zero, assume infusion + reg[[i]] <- new_regimen( + amt = tmp$amt, + times = tmp$time, + type = "infusion", + t_inf = tmp$amt / tmp$rate + ) + } else { + # assume bolus + reg[[i]] <- new_regimen( + amt = tmp$amt, + times = tmp$time, + type = "bolus" + ) + } } if(length(ids) == 1) { return(reg[[1]]) diff --git a/man/nm_to_regimen.Rd b/man/nm_to_regimen.Rd index 98ad77cc..0853d290 100644 --- a/man/nm_to_regimen.Rd +++ b/man/nm_to_regimen.Rd @@ -4,21 +4,16 @@ \alias{nm_to_regimen} \title{Create a regimen from NONMEM data} \usage{ -nm_to_regimen( - data, - dose_cmts = c(`1` = "infusion"), - reset_time = TRUE, - first_only = FALSE -) +nm_to_regimen(data, reset_time = TRUE, first_only = FALSE, dose_cmts = NULL) } \arguments{ \item{data}{NONMEM-type dataset} -\item{dose_cmts}{map from compartment number to dose type, defaults to compartment 1 being an infusion dose} - \item{reset_time}{start time for each simulated patient at 0, irrespective of design in dataset} \item{first_only}{use only design from first individual in dataset} + +\item{dose_cmts}{map from compartment number to dose type, defaults to compartment 1 being an infusion dose} } \value{ Regimen object diff --git a/tests/testthat/test_nm_to_regimen.R b/tests/testthat/test_nm_to_regimen.R index cd4847de..61c016ac 100644 --- a/tests/testthat/test_nm_to_regimen.R +++ b/tests/testthat/test_nm_to_regimen.R @@ -19,21 +19,13 @@ test_that("Required column checks occur", { ), "EVID column is required" ) - - expect_error( - nm_to_regimen( - data.frame(AMT = 100, TIME = 0, EVID = 0) - ), - "CMT column is required" - ) }) -test_that("NM-style dataframe for 1 ID converted to regimen", { +test_that("Assume infusion if no compartment but RATE given", { pt1 <- data.frame( ID = 1, EVID = c(1, 1, 0, 1, 1, 0), AMT = c(100, 100, 0, 200, 200, 0), - CMT = 1, TIME = c(0, 12, 23, 25, 36, 47), RATE = c(100, 100, 0, 200, 400, 0), DV = c(0, 0, 5, 0, 0, 12) @@ -46,6 +38,21 @@ test_that("NM-style dataframe for 1 ID converted to regimen", { expect_equal(reg1$type, rep("infusion", 4)) }) +test_that("Assume bolus if no compartment and no RATE given", { + pt1 <- data.frame( + ID = 1, + EVID = c(1, 1, 0, 1, 1, 0), + AMT = c(100, 100, 0, 200, 200, 0), + TIME = c(0, 12, 23, 25, 36, 47), + DV = c(0, 0, 5, 0, 0, 12) + ) + reg1 <- nm_to_regimen(pt1) + expect_true(inherits(reg1, "regimen")) + expect_equal(reg1$dose_amts, c(100, 100, 200, 200)) + expect_equal(reg1$dose_times, c(0, 12, 25, 36)) + expect_equal(reg1$type, rep("bolus", 4)) +}) + test_that("Bolus/oral doses handled", { pt2 <- data.frame( ID = 1, @@ -96,7 +103,7 @@ test_that("Doses in different compartments handled", { "1" = "oral", "2" = "infusion" ) - reg2 <- nm_to_regimen(pt2, cmt_mapping) + reg2 <- nm_to_regimen(pt2, dose_cmts = cmt_mapping) expect_true(inherits(reg2, "regimen")) expect_equal(reg2$dose_amts, c(100, 100, 200, 200, 150, 150)) expect_equal(reg2$dose_times, c(0, 12, 25, 36, 48, 60)) From a917277481c744eecc1f6ac3dd5b2195e01d2755 Mon Sep 17 00:00:00 2001 From: Dominic Tong Date: Thu, 20 Nov 2025 13:30:49 -0800 Subject: [PATCH 3/6] add check for cmt --- R/nm_to_regimen.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/nm_to_regimen.R b/R/nm_to_regimen.R index e7fef7a5..b0083e6c 100644 --- a/R/nm_to_regimen.R +++ b/R/nm_to_regimen.R @@ -37,7 +37,7 @@ nm_to_regimen <- function( if(reset_time) { tmp$time <- tmp$time - min(tmp$time) } - if (!is.null(dose_cmts)){ + if (!is.null(dose_cmts) & !is.null(tmp$cmt)){ # map cmt to dose type reg[[i]] <- new_regimen( amt = tmp$amt, From bdf78e0debe70edfa70500048ad51a0cfee9fa3c Mon Sep 17 00:00:00 2001 From: Dominic Tong Date: Tue, 2 Dec 2025 23:26:44 +0000 Subject: [PATCH 4/6] rm dose_cmt and rely on cmt translating inside models --- R/nm_to_regimen.R | 41 ++++++++++++++++++----------- man/nm_to_regimen.Rd | 4 +-- tests/testthat/test_nm_to_regimen.R | 29 ++++++++------------ 3 files changed, 38 insertions(+), 36 deletions(-) diff --git a/R/nm_to_regimen.R b/R/nm_to_regimen.R index b0083e6c..41d08468 100644 --- a/R/nm_to_regimen.R +++ b/R/nm_to_regimen.R @@ -4,14 +4,12 @@ #' @param data NONMEM-type dataset #' @param reset_time start time for each simulated patient at 0, irrespective of design in dataset #' @param first_only use only design from first individual in dataset -#' @param dose_cmts map from compartment number to dose type, defaults to compartment 1 being an infusion dose #' @export #' @return Regimen object nm_to_regimen <- function( data, reset_time = TRUE, - first_only = FALSE, - dose_cmts = NULL + first_only = FALSE ) { colnames(data) <- tolower(colnames(data)) if(!"evid" %in% colnames(data)) { @@ -37,19 +35,32 @@ nm_to_regimen <- function( if(reset_time) { tmp$time <- tmp$time - min(tmp$time) } - if (!is.null(dose_cmts) & !is.null(tmp$cmt)){ - # map cmt to dose type - reg[[i]] <- new_regimen( - amt = tmp$amt, - times = tmp$time, - cmt = tmp$cmt, - type = unname(unlist(dose_cmts[as.character(tmp$cmt)])), - t_inf = ifelse(is.na(tmp$rate), NA, tmp$amt / tmp$rate) - ) + # use CMT if it exists in input data + if (!is.null(tmp$cmt)){ + # if RATE is given, use to calculate infusion time t_inf + if (!is.null(tmp$rate)){ + suppressWarnings({ + reg[[i]] <- new_regimen( + amt = tmp$amt, + times = tmp$time, + cmt = tmp$cmt, + t_inf = ifelse(tmp$rate == 0, 0, tmp$amt/tmp$rate) + ) + }) + } else { + # if no RATE is given, then assume bolus + suppressWarnings({ + reg[[i]] <- new_regimen( + amt = tmp$amt, + times = tmp$time, + cmt = tmp$cmt + ) + }) + } } else if ("rate" %in% colnames(doses) &! 0 %in% doses$rate){ # if rate exists and is non-zero, assume infusion reg[[i]] <- new_regimen( - amt = tmp$amt, + amt = tmp$amt, times = tmp$time, type = "infusion", t_inf = tmp$amt / tmp$rate @@ -57,9 +68,9 @@ nm_to_regimen <- function( } else { # assume bolus reg[[i]] <- new_regimen( - amt = tmp$amt, + amt = tmp$amt, times = tmp$time, - type = "bolus" + type = "bolus" ) } } diff --git a/man/nm_to_regimen.Rd b/man/nm_to_regimen.Rd index 0853d290..e7716516 100644 --- a/man/nm_to_regimen.Rd +++ b/man/nm_to_regimen.Rd @@ -4,7 +4,7 @@ \alias{nm_to_regimen} \title{Create a regimen from NONMEM data} \usage{ -nm_to_regimen(data, reset_time = TRUE, first_only = FALSE, dose_cmts = NULL) +nm_to_regimen(data, reset_time = TRUE, first_only = FALSE) } \arguments{ \item{data}{NONMEM-type dataset} @@ -12,8 +12,6 @@ nm_to_regimen(data, reset_time = TRUE, first_only = FALSE, dose_cmts = NULL) \item{reset_time}{start time for each simulated patient at 0, irrespective of design in dataset} \item{first_only}{use only design from first individual in dataset} - -\item{dose_cmts}{map from compartment number to dose type, defaults to compartment 1 being an infusion dose} } \value{ Regimen object diff --git a/tests/testthat/test_nm_to_regimen.R b/tests/testthat/test_nm_to_regimen.R index 61c016ac..00e1dd3f 100644 --- a/tests/testthat/test_nm_to_regimen.R +++ b/tests/testthat/test_nm_to_regimen.R @@ -1,22 +1,16 @@ test_that("Required column checks occur", { expect_error( - nm_to_regimen( - data.frame(EVID = 0, AMT = 100) - ), + nm_to_regimen(data.frame(EVID = 0, AMT = 100)), "TIME column is required" ) expect_error( - nm_to_regimen( - data.frame(EVID = 0, TIME = 0) - ), + nm_to_regimen(data.frame(EVID = 0, TIME = 0)), "AMT column is required" ) expect_error( - nm_to_regimen( - data.frame(AMT = 100, TIME = 0) - ), + nm_to_regimen(data.frame(AMT = 100, TIME = 0)), "EVID column is required" ) }) @@ -53,7 +47,7 @@ test_that("Assume bolus if no compartment and no RATE given", { expect_equal(reg1$type, rep("bolus", 4)) }) -test_that("Bolus/oral doses handled", { +test_that("Assume bolus and no t_inf if RATE not given", { pt2 <- data.frame( ID = 1, EVID = c(1, 1, 0, 1, 1, 0), @@ -62,19 +56,20 @@ test_that("Bolus/oral doses handled", { TIME = c(0, 12, 23, 25, 36, 47), DV = c(0, 0, 5, 0, 0, 12) ) - reg2 <- nm_to_regimen(pt2, dose_cmts = c("1" = "bolus")) + reg2 <- nm_to_regimen(pt2) expect_true(inherits(reg2, "regimen")) expect_equal(reg2$dose_amts, c(100, 100, 200, 200)) expect_equal(reg2$dose_times, c(0, 12, 25, 36)) expect_equal(reg2$t_inf, rep(0, 4)) expect_equal(reg2$type, rep("bolus", 4)) + expect_equal(reg2$cmt, rep(1, 4)) }) test_that("Multiple regimens from NONMEM-style dataset", { nm <- data.frame( ID = c(1, 1, 1, 2, 2, 2), EVID = c(1, 1, 0, 1, 1, 0), - CMT = 1, + CMT = c(1, 1, 1, 1, 2, 1), AMT = c(100, 100, 0, 200, 200, 0), TIME = c(0, 12, 23, 0, 24, 47), DV = c(0, 0, 5, 0, 0, 12) @@ -87,6 +82,8 @@ test_that("Multiple regimens from NONMEM-style dataset", { expect_equal(multi_regs[[2]]$dose_times, c(0, 24)) expect_equal(multi_regs[[1]]$dose_amts, c(100, 100)) expect_equal(multi_regs[[2]]$dose_amts, c(200, 200)) + expect_equal(multi_regs[[1]]$cmt, c(1, 1)) + expect_equal(multi_regs[[2]]$cmt, c(1, 2)) }) test_that("Doses in different compartments handled", { @@ -99,14 +96,10 @@ test_that("Doses in different compartments handled", { RATE = c(100, 100, 0, 200, 400, 0, 0, 0, 0), DV = c(0, 0, 5, 0, 0, 12, 0, 0, 14) ) - cmt_mapping <- c( - "1" = "oral", - "2" = "infusion" - ) - reg2 <- nm_to_regimen(pt2, dose_cmts = cmt_mapping) + reg2 <- nm_to_regimen(pt2) expect_true(inherits(reg2, "regimen")) expect_equal(reg2$dose_amts, c(100, 100, 200, 200, 150, 150)) expect_equal(reg2$dose_times, c(0, 12, 25, 36, 48, 60)) expect_equal(reg2$t_inf, c(1, 1, 1, 0.5, 0, 0)) - expect_equal(reg2$type, c(rep("infusion", 4), rep("oral", 2))) + expect_equal(reg2$cmt, c(2, 2, 2, 2, 1, 1)) }) From 9d1b8cb88aba256291227b1fc470e9bda9e82e74 Mon Sep 17 00:00:00 2001 From: Dominic Tong Date: Mon, 2 Feb 2026 10:46:55 -0800 Subject: [PATCH 5/6] add warning if CMT missing --- R/nm_to_regimen.R | 3 +++ 1 file changed, 3 insertions(+) diff --git a/R/nm_to_regimen.R b/R/nm_to_regimen.R index 41d08468..a90742fe 100644 --- a/R/nm_to_regimen.R +++ b/R/nm_to_regimen.R @@ -21,6 +21,9 @@ nm_to_regimen <- function( if(! "time" %in% colnames(data)) { stop("TIME column is required in source dataset!") } + if (!"cmt" %in% colnames(data)) { + warning("CMT column is missing from source dataset!") + } m <- match(c("id", "mdv", "evid", "amt", "time", "rate", "cmt"), colnames(data), 0) m <- m[m>0] data <- data[,m] From 37f154fc15188c3e9e40550bd110d8475d41f07d Mon Sep 17 00:00:00 2001 From: Dominic Tong Date: Mon, 2 Feb 2026 10:47:03 -0800 Subject: [PATCH 6/6] add edge case of bolus then infusion --- tests/testthat/test_nm_to_regimen.R | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/testthat/test_nm_to_regimen.R b/tests/testthat/test_nm_to_regimen.R index 00e1dd3f..95356729 100644 --- a/tests/testthat/test_nm_to_regimen.R +++ b/tests/testthat/test_nm_to_regimen.R @@ -103,3 +103,21 @@ test_that("Doses in different compartments handled", { expect_equal(reg2$t_inf, c(1, 1, 1, 0.5, 0, 0)) expect_equal(reg2$cmt, c(2, 2, 2, 2, 1, 1)) }) + +test_that("Different rates handled correctly", { + pt2 <- data.frame( + ID = 1, + EVID = c(1, 1, 0), + CMT = 2, + AMT = c(100, 200, 0), + TIME = c(0, 6, 23), + RATE = c(0, 100, 0), + DV = c(0, 0, 5) + ) + reg2 <- nm_to_regimen(pt2) + expect_true(inherits(reg2, "regimen")) + expect_equal(reg2$dose_amts, c(100, 200)) + expect_equal(reg2$dose_times, c(0, 6)) + expect_equal(reg2$t_inf, c(0, 2)) + expect_equal(reg2$cmt, c(2, 2)) +})