tests/testthat/test-convertLogLin.R

test_that("convertLogLin", {

   r1 <- readModelDb("PK_2cmt_no_depot") |>
     addDirectLin() |>
     convertLogLin()

   expect_equal(rxode2::modelExtract(r1, effect),
                "effect <- Ek * log(Cc)")

   r1 <- readModelDb("PK_2cmt_no_depot") |>
     addIndirectLin(stim="out") |>
     convertLogLin()

   expect_equal(rxode2::modelExtract(r1, d/dt(R)),
                "d/dt(R) <- kin - kout * R * (1 + Ek * log(Cc))")


   r1 <- readModelDb("PK_2cmt_no_depot") |>
     addIndirectLin(inhib="out") |>
     convertLogLin()

   expect_equal(rxode2::modelExtract(r1, d/dt(R)),
                "d/dt(R) <- kin - kout * R * (1 - Ik * log(Cc))")


   r1 <- readModelDb("PK_2cmt_no_depot") |>
     addEffectCmtLin() |>
     convertLogLin()

   expect_equal(rxode2::modelExtract(r1, effect),
                "effect <- Ek * log(Ce)")

   f <- function() {
     description <- "desc"
     model({
       ke0 <- exp(lke0)
       Ek <- uEk
       cl <- exp(lcl)
       vc <- exp(lvc)
       vp <- exp(lvp)
       q <- exp(lq)
       kel <- cl/vc
       k12 <- q/vc
       k21 <- q/vp
       d/dt(central) <- kel * central - k12 * central + k21 *
         peripheral1
       d/dt(peripheral1) <- k12 * central - k21 * peripheral1
       Cc <- central/vc
       d/dt(Ce) <- ke0 * (Cc - Ce)
       effect <- Ek * Ce
     })
   }

   r1 <- rxode2::rxode2(f) |>
     convertLogLin()
   # Ek is not added here because Ek is already in the model.
   expect_equal(rxode2::modelExtract(r1, effect),
                "effect <- Ek * log(Ce)")
})

Try the nlmixr2lib package in your browser

Any scripts or data that you put into this service are public.

nlmixr2lib documentation built on Oct. 7, 2024, 5:08 p.m.