tests/testthat/test-model.R

nmTest({
  test_that("model piping", {

    KA1Lode <- function() {
      ini({
        ltlag <- log(0.2)
        lka  <- log(1.15)
        lcl  <- log(0.135)
        lv   <- log(8)
        prop.err <- 0.15
        add.err  <- 0.6
        eta.tlag ~ 0.5
        eta.ka ~ 0.5
        eta.cl ~ 0.1
        eta.v  ~ 0.1
      })
      model({
        tlag <- exp(ltlag + eta.tlag)
        ka <- exp(lka + eta.ka)
        cl <- exp(lcl + eta.cl)
        v  <- exp(lv + eta.v)
        d/dt(gut) <- -ka*gut
        d/dt(central) <- ka*gut - (cl/v)*central
        lag(gut) <- tlag
        cp <- central/v
        cp ~ prop(prop.err) + add(add.err)
      })
    }

    d <- nlmixr2data::warfarin %>%
      dplyr::filter(dvid=="cp")

    suppressMessages(
      f <- nlmixr(KA1Lode, data = d, est = "saem", control = saemControl(nBurn = 1, nEm = 1))
    )

    # General piping model updates work
    suppressMessages(expect_error(
      fUpV <-
        f %>%
        model(v <- exp(lv)),
      NA
    ))
    expect_equal(
      methods::functionBody(as.function(fUpV))[[3]][[2]][[5]],
      str2lang("v <- exp(lv)")
    )

    # piping model updates work with append
    suppressMessages(expect_error(
      fUpFoo <-
        f %>%
        model(foo <- exp(lv), append = TRUE),
      NA
    ))
    expect_equal(
      methods::functionBody(as.function(fUpFoo))[[3]][[2]][[11]],
      str2lang("foo <- exp(lv)")
    )
  })
})

Try the nlmixr2est package in your browser

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

nlmixr2est documentation built on Oct. 8, 2023, 9:06 a.m.