sims is an R package to generate datasets from JAGS or R code for use in simulation studies.
nlists ObjectsBy default, sims_simulate() returns the simulated datasets in the form of an nlists object.
library(sims)
set.seed(10)
sims_simulate("a <- runif(1)", nsims = 2L)
#> $a
#> [1] 0.2213763
#>
#> an nlists object of 2 nlist objects each with 1 numeric element.rds FilesIf, however, save = TRUE then each nlist object is saved as an .rds file in path.
set.seed(10)
sims_simulate("a <- runif(1)", nsims = 2L, save = TRUE, path = tempdir(), exists = NA)
#> [1] TRUE
sims_data_files(tempdir())
#> [1] "data0000001.rds" "data0000002.rds".rds FilesThe datasets in the .rds files can be imported as an nlists object using sims_data().
sims_data(tempdir())
#> $a
#> [1] 0.2213763
#>
#> an nlists object of 2 nlist objects each with 1 numeric element.rds FilesThe values including the .Random.seed (not printed) that were used to generate the datasets are saved in .sims_args.rds which can be imported using sims_info().
sims_info(tempdir())[1:5]
#> $code
#> [1] "a <- runif(1)"
#>
#> $constants
#> an nlist object with 0 numeric elements
#>
#> $parameters
#> an nlist object with 0 numeric elements
#>
#> $monitor
#> [1] "a"
#>
#> $nsims
#> [1] 2The fact that the arguments to sims_simulate() are saved to file allows additional .rds datasets to be generated using sims_add().
sims_add(tempdir(), nsims = 3L)
#> [1] "data0000003.rds" "data0000004.rds" "data0000005.rds"
sims_data_files(tempdir())
#> [1] "data0000001.rds" "data0000002.rds" "data0000003.rds" "data0000004.rds"
#> [5] "data0000005.rds".rds FilesIf the user wishes to duplicate the datasets then they can either regenerate them by specifying a different path but the same seed (using set.seed()). Alternatively, they can copy the existing .sims.rds and datasets files to a new directory using sims_copy()
sims_copy(path_from = tempdir(), path_to = paste0(tempdir(), "_copy"))
#> [1] "data0000001.rds" "data0000002.rds" "data0000003.rds" "data0000004.rds"
#> [5] "data0000005.rds".rds FilesA user can check that all the datasets specified in .sims.rds are present using sims_check().
sims_check(path = paste0(tempdir(), "_copy"))file.remove(file.path(paste0(tempdir(), "_copy"), "data0000005.rds"))
#> [1] TRUE
sims_check(path = paste0(tempdir(), "_copy"))
#> Error: Number of data files (4) does not match number of simulations (5).Parallelization is implemented using the future package.
To use all available cores on the local machine simply execute the following code before calling sims_simulate().
library(future)
plan(multisession)set.seed(10)
sims_simulate("a <- runif(1)", nsims = 2L)
#> $a
#> [1] 0.2213763
#>
#> an nlists object of 2 nlist objects each with 1 numeric elementProgress is reported using the progressr package as follows.
library(progressr)
with_progress(sims_simulate("a <- runif(1)", nsims = 1000L))
#> $a
#> [1] 0.5248719
#>
#> an nlists object of 1000 nlist objects each with 1 numeric element