The disposable packages are installed in R's temporary directory, so they are cleaned up at the end of the R session.
disposables
cleans up after itself, if an error happens during the
installation or loading of the disposable packages. If make_packages()
fails because of an error, it leaves to temporary garbage behind. In
particular,
it cleans up the library path and restores .libPaths()
,
removes the temporary source package directories,
removes the installes packages from lib_dir
, and
unloads the packages that it loaded before the error.
You can install this R package from Github:
devtools::install_github("gaborcsardi/disposables")
make_packages()
creates, installs and loads R packages, it takes named
expressions, the names will be used as package names.
library(disposables)
#> Loading required package: methods
pkgs <- make_packages(
foo1 = { f <- function() print("hello!") ; d <- 1:10 },
foo2 = { f <- function() print("hello again!") ; d <- 11:20 }
)
The foo1
and foo2
packages are now loaded.
"package:foo1" %in% search()
#> [1] TRUE
"package:foo2" %in% search()
#> [1] TRUE
You can dispose them with dispose_packages()
. This unloads the packages
and deletes them from the library directory.
dispose_packages(pkgs)
"package:foo1" %in% search()
#> [1] FALSE
"package:foo2" %in% search()
#> [1] FALSE
file.exists(pkgs$lib_dir)
#> [1] FALSE
Here is a real example that tests cross-package inheritence of R6 classes.
library(disposables)
library(testthat)
test_that("inheritance works across packages", {
pkgs <- make_packages(
imports = "R6",
## Code to put in package 'R6testA'
R6testA = {
AC <- R6Class(
public = list(
x = 1
)
)
},
## Code to put in package 'R6testB'
R6testB = {
BC <- R6Class(
inherit = R6testA::AC,
public = list(
y = 2
)
)
}
)
## In case of an error below
on.exit(try(dispose_packages(pkgs), silent = TRUE), add = TRUE)
## Now ready for the tests
B <- BC$new()
expect_equal(B$x, 1)
expect_equal(B$y, 2)
})
MIT @ Gábor Csárdi
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.