library(unitizer)
unitizer_check_demo_state()
# In this script we demonstrate the `unitizer` workflow by installing and
# testing three versions of `unitizer.fastlm`, a package that implements faster
# computations of slope, intercept and R^2 for a single variable regression.
#
# The package versions are:
#
# 1. v0.1.0: a slow version that is known to produce the correct results
# 2. v0.1.1: initial (flawed) attempt at optimizing our functions
# 3. v0.1.2: fixes to regressions introduced in v0.1.1
#
# See Also: `?unitizer::demo`, `?unitize`, `vignette("unitizer")`
`[Press ENTER to Continue]`()
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SETUP ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(.unitizer.fastlm <- copy_fastlm_to_tmpdir()) # package directory
list.files(.unitizer.fastlm) # contains our sources
dir.create((lib.dir <- tempfile()))
options(unitizer.tmp.lib.loc=lib.dir)
install.packages(
.unitizer.fastlm, repos=NULL, type="src", quiet=TRUE, lib=lib.dir
)
# And in our sources is the test file, which we will `unitize`:
.unitizer.test.file <- file.path(.unitizer.fastlm, "tests", "unitizer", "fastlm1.R")
show_file(.unitizer.test.file)
# Here we copied `untizer.fastlm` sources to a temporary "package directory"
# and installed it. The test file contained therein is shown for reference.
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ END SETUP ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# After you press ENTER at the prompt, `unitize` will launch. You should accept
# the tests since we know the first package version is correct, though slow.
`[Press ENTER to Continue]`()
unitize(.unitizer.test.file)
# If all went well you added four tests to `unitizer`.
#
# We will now update `unitizer.fastlm` package to use the fast computations. We
# do this with `update_fastlm`; in real life you would be updating your source
# code at this point. After the update/re-install, we re-run `unitize`:
`[Press ENTER to Continue]`()
update_fastlm(.unitizer.fastlm, version="0.1.1")
install.packages(
.unitizer.fastlm, repos=NULL, type="src", quiet=TRUE, lib=lib.dir
)
unitize(.unitizer.test.file)
# Let's fix the regressions we introduced and re-run `unitize`:
`[Press ENTER to Continue]`()
update_fastlm(.unitizer.fastlm, version="0.1.2")
install.packages(
.unitizer.fastlm, repos=NULL, type="src", quiet=TRUE, lib=lib.dir
)
unitize(.unitizer.test.file)
# If you followed instructions all tests should have passed, which tells us that
# `unitizer.fastlm` is now producing the same values as it originally was when
# it was just a wrapper around `base::lm`.
`[Press ENTER to Continue]`()
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DEMO OVER ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Show `unitizer.fastlm` is actually faster for this simple task:
local({
DF <- data.frame(x=1:1e5, y=(1:1e5) ^ 2)
rbind(
fastlm=system.time(with(DF, utzflm::fastlm(x, y))),
lm=system.time(c((lm.res <- lm(y ~ x, DF))$coefficients, summary(lm.res)$r.squared))
)[, 1:3]
})
unitizer_cleanup_demo()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.