R version 4.5.0 alpha (2025-03-15 r87978 ucrt) Copyright (C) 2025 The R Foundation for Statistical Computing Platform: x86_64-w64-mingw32/x64 R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > source("incl/start.R") Loading required package: foreach Loading required package: future R version 4.5.0 alpha (2025-03-15 r87978 ucrt) Platform: x86_64-w64-mingw32/x64 Running under: Windows Server 2022 x64 (build 20348) Matrix products: default LAPACK version 3.12.1 locale: [1] LC_COLLATE=C LC_CTYPE=German_Germany.utf8 [3] LC_MONETARY=C LC_NUMERIC=C [5] LC_TIME=C time zone: Europe/Berlin tzcode source: internal attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] doFuture_1.0.2 future_1.34.0 foreach_1.5.2 loaded via a namespace (and not attached): [1] compiler_4.5.0 parallelly_1.42.0 tools_4.5.0 [4] parallel_4.5.0 future.apply_1.11.3 listenv_0.9.1 [7] codetools_0.2-20 iterators_1.0.14 digest_0.6.37 [10] globals_0.16.3 > > strategies <- future:::supportedStrategies() > > if (require("doRNG")) { + truth <- NULL + + my_fcn_dopar <- function() { + y <- foreach(i = 1:10) %dopar% { + sample.int(n = 100L, size = 1L) + } + mean(unlist(y)) + } + + my_fcn_dorng <- function() { + y <- foreach(i = 1:10) %dorng% { + sample.int(n = 100L, size = 1L) + } + mean(unlist(y)) + } + + registerDoFuture() + + message("*** withDoRNG() ...") + print(sessionInfo()) + + for (strategy in strategies) { + message(sprintf("- plan('%s') ...", strategy)) + plan(strategy) + + if (is.null(truth)) { + set.seed(1234) + truth <- my_fcn_dorng() + } + + set.seed(1234) + res <- withDoRNG(my_fcn_dopar()) + print(res) + stopifnot(identical(res, truth)) + + # Shutdown current plan + plan(sequential) + + message(sprintf("- plan('%s') ... DONE", strategy)) + } ## for (strategy ...) + + message("*** withDoRNG() ... DONE") + + } ## if (require("doRNG")) Loading required package: doRNG Loading required package: rngtools *** withDoRNG() ... R version 4.5.0 alpha (2025-03-15 r87978 ucrt) Platform: x86_64-w64-mingw32/x64 Running under: Windows Server 2022 x64 (build 20348) Matrix products: default LAPACK version 3.12.1 locale: [1] LC_COLLATE=C LC_CTYPE=German_Germany.utf8 [3] LC_MONETARY=C LC_NUMERIC=C [5] LC_TIME=C time zone: Europe/Berlin tzcode source: internal attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] doRNG_1.8.6.1 rngtools_1.5.2 doFuture_1.0.2 future_1.34.0 foreach_1.5.2 loaded via a namespace (and not attached): [1] compiler_4.5.0 parallelly_1.42.0 tools_4.5.0 [4] parallel_4.5.0 future.apply_1.11.3 listenv_0.9.1 [7] codetools_0.2-20 iterators_1.0.14 digest_0.6.37 [10] globals_0.16.3 - plan('sequential') ... [06:33:05.851] doFuture() ... [06:33:05.853] - dummy globals (as locals): [2] 'i', '.doRNG.stream' [06:33:05.853] - R expression: [06:33:05.853] { [06:33:05.853] "# doFuture():::doFuture(): Make sure that foreach uses 'doFuture'" [06:33:05.853] "# also in nested calls " [06:33:05.853] doFuture::registerDoFuture() [06:33:05.853] "# doFuture():::doFuture(): process chunk of elements" [06:33:05.853] lapply(seq_along(...future.x_ii), FUN = function(jj) { [06:33:05.853] ...future.x_jj <- ...future.x_ii[[jj]] [06:33:05.853] { [06:33:05.853] { [06:33:05.853] NULL [06:33:05.853] i <- NULL [06:33:05.853] } [06:33:05.853] .doRNG.stream <- NULL [06:33:05.853] } [06:33:05.853] ...future.env <- environment() [06:33:05.853] local({ [06:33:05.853] for (name in names(...future.x_jj)) { [06:33:05.853] assign(name, ...future.x_jj[[name]], envir = ...future.env, [06:33:05.853] inherits = FALSE) [06:33:05.853] } [06:33:05.853] }) [06:33:05.853] tryCatch({ [06:33:05.853] { [06:33:05.853] rngtools::RNGseed(.doRNG.stream) [06:33:05.853] } [06:33:05.853] { [06:33:05.853] sample.int(n = 100L, size = 1L) [06:33:05.853] } [06:33:05.853] }, error = identity) [06:33:05.853] }) [06:33:05.853] } [06:33:05.854] - identifying globals and packages ... [06:33:05.874] List of 1 [06:33:05.874] $ ...future.x_ii: NULL [06:33:05.874] - attr(*, "where")=List of 1 [06:33:05.874] ..$ ...future.x_ii: [06:33:05.874] - attr(*, "class")= chr [1:3] "FutureGlobals" "Globals" "list" [06:33:05.874] - attr(*, "resolved")= logi FALSE [06:33:05.874] - attr(*, "total_size")= num 27 [06:33:05.884] - R expression: [06:33:05.884] { [06:33:05.884] "# doFuture():::doFuture(): Make sure that foreach uses 'doFuture'" [06:33:05.884] "# also in nested calls " [06:33:05.884] doFuture::registerDoFuture() [06:33:05.884] "# doFuture():::doFuture(): process chunk of elements" [06:33:05.884] lapply(seq_along(...future.x_ii), FUN = function(jj) { [06:33:05.884] ...future.x_jj <- ...future.x_ii[[jj]] [06:33:05.884] { [06:33:05.884] { [06:33:05.884] NULL [06:33:05.884] i <- NULL [06:33:05.884] } [06:33:05.884] .doRNG.stream <- NULL [06:33:05.884] } [06:33:05.884] ...future.env <- environment() [06:33:05.884] local({ [06:33:05.884] for (name in names(...future.x_jj)) { [06:33:05.884] assign(name, ...future.x_jj[[name]], envir = ...future.env, [06:33:05.884] inherits = FALSE) [06:33:05.884] } [06:33:05.884] }) [06:33:05.884] tryCatch({ [06:33:05.884] { [06:33:05.884] rngtools::RNGseed(.doRNG.stream) [06:33:05.884] } [06:33:05.884] { [06:33:05.884] sample.int(n = 100L, size = 1L) [06:33:05.884] } [06:33:05.884] }, error = identity) [06:33:05.884] }) [06:33:05.884] } [06:33:05.884] - globals: [1] '...future.x_ii' [06:33:05.885] List of 1 [06:33:05.885] $ ...future.x_ii: NULL [06:33:05.885] - attr(*, "where")=List of 1 [06:33:05.885] ..$ ...future.x_ii: [06:33:05.885] - attr(*, "class")= chr [1:3] "FutureGlobals" "Globals" "list" [06:33:05.885] - attr(*, "resolved")= logi FALSE [06:33:05.885] - attr(*, "total_size")= num 27 [06:33:05.887] - packages: [2] 'doFuture', 'doRNG' [06:33:05.887] - identifying globals and packages ... DONE [06:33:05.888] Number of chunks: 1 [06:33:05.888] Number of futures (= number of chunks): 1 [06:33:05.888] Launching 1 futures (chunks) ... [06:33:05.888] Chunk #1 of 1 ... [06:33:05.889] - Finding globals in 'args_list' chunk #1 ... [06:33:05.890] [06:33:05.890] [06:33:05.890] - Finding globals in 'args_list' for chunk #1 ... DONE [06:33:05.909] Chunk #1 of 1 ... DONE [06:33:05.909] Launching 1 futures (chunks) ... DONE [06:33:05.909] - resolving futures [06:33:05.910] - gathering results & relaying conditions (except errors) [06:33:05.912] - collecting values of futures [06:33:05.912] - accumulating results [06:33:05.914] - processing errors (handler = 'stop') [06:33:05.915] - extracting results [06:33:05.915] doFuture() ... DONE [06:33:05.921] doFuture() ... [06:33:05.924] - dummy globals (as locals): [2] 'i', '.doRNG.stream' [06:33:05.924] - R expression: [06:33:05.924] { [06:33:05.924] "# doFuture():::doFuture(): Make sure that foreach uses 'doFuture'" [06:33:05.924] "# also in nested calls " [06:33:05.924] doFuture::registerDoFuture() [06:33:05.924] "# doFuture():::doFuture(): process chunk of elements" [06:33:05.924] lapply(seq_along(...future.x_ii), FUN = function(jj) { [06:33:05.924] ...future.x_jj <- ...future.x_ii[[jj]] [06:33:05.924] { [06:33:05.924] { [06:33:05.924] NULL [06:33:05.924] i <- NULL [06:33:05.924] } [06:33:05.924] .doRNG.stream <- NULL [06:33:05.924] } [06:33:05.924] ...future.env <- environment() [06:33:05.924] local({ [06:33:05.924] for (name in names(...future.x_jj)) { [06:33:05.924] assign(name, ...future.x_jj[[name]], envir = ...future.env, [06:33:05.924] inherits = FALSE) [06:33:05.924] } [06:33:05.924] }) [06:33:05.924] tryCatch({ [06:33:05.924] { [06:33:05.924] rngtools::RNGseed(.doRNG.stream) [06:33:05.924] } [06:33:05.924] { [06:33:05.924] sample.int(n = 100L, size = 1L) [06:33:05.924] } [06:33:05.924] }, error = identity) [06:33:05.924] }) [06:33:05.924] } [06:33:05.925] - identifying globals and packages ... [06:33:05.940] List of 1 [06:33:05.940] $ ...future.x_ii: NULL [06:33:05.940] - attr(*, "where")=List of 1 [06:33:05.940] ..$ ...future.x_ii: [06:33:05.940] - attr(*, "class")= chr [1:3] "FutureGlobals" "Globals" "list" [06:33:05.940] - attr(*, "resolved")= logi FALSE [06:33:05.940] - attr(*, "total_size")= num 27 [06:33:05.945] - R expression: [06:33:05.945] { [06:33:05.945] "# doFuture():::doFuture(): Make sure that foreach uses 'doFuture'" [06:33:05.945] "# also in nested calls " [06:33:05.945] doFuture::registerDoFuture() [06:33:05.945] "# doFuture():::doFuture(): process chunk of elements" [06:33:05.945] lapply(seq_along(...future.x_ii), FUN = function(jj) { [06:33:05.945] ...future.x_jj <- ...future.x_ii[[jj]] [06:33:05.945] { [06:33:05.945] { [06:33:05.945] NULL [06:33:05.945] i <- NULL [06:33:05.945] } [06:33:05.945] .doRNG.stream <- NULL [06:33:05.945] } [06:33:05.945] ...future.env <- environment() [06:33:05.945] local({ [06:33:05.945] for (name in names(...future.x_jj)) { [06:33:05.945] assign(name, ...future.x_jj[[name]], envir = ...future.env, [06:33:05.945] inherits = FALSE) [06:33:05.945] } [06:33:05.945] }) [06:33:05.945] tryCatch({ [06:33:05.945] { [06:33:05.945] rngtools::RNGseed(.doRNG.stream) [06:33:05.945] } [06:33:05.945] { [06:33:05.945] sample.int(n = 100L, size = 1L) [06:33:05.945] } [06:33:05.945] }, error = identity) [06:33:05.945] }) [06:33:05.945] } [06:33:05.946] - globals: [1] '...future.x_ii' [06:33:05.946] List of 1 [06:33:05.946] $ ...future.x_ii: NULL [06:33:05.946] - attr(*, "where")=List of 1 [06:33:05.946] ..$ ...future.x_ii: [06:33:05.946] - attr(*, "class")= chr [1:3] "FutureGlobals" "Globals" "list" [06:33:05.946] - attr(*, "resolved")= logi FALSE [06:33:05.946] - attr(*, "total_size")= num 27 [06:33:05.951] - packages: [2] 'doFuture', 'doRNG' [06:33:05.951] - identifying globals and packages ... DONE [06:33:05.951] Number of chunks: 1 [06:33:05.952] Number of futures (= number of chunks): 1 [06:33:05.952] Launching 1 futures (chunks) ... [06:33:05.952] Chunk #1 of 1 ... [06:33:05.953] - Finding globals in 'args_list' chunk #1 ... [06:33:05.954] [06:33:05.955] [06:33:05.955] - Finding globals in 'args_list' for chunk #1 ... DONE [06:33:05.962] Chunk #1 of 1 ... DONE [06:33:05.962] Launching 1 futures (chunks) ... DONE [06:33:05.962] - resolving futures [06:33:05.962] - gathering results & relaying conditions (except errors) [06:33:05.963] - collecting values of futures [06:33:05.964] - accumulating results [06:33:05.965] - processing errors (handler = 'stop') [06:33:05.965] - extracting results [06:33:05.965] doFuture() ... DONE [1] 59.5 - plan('sequential') ... DONE - plan('multisession') ... [06:33:07.122] doFuture() ... [06:33:07.124] - dummy globals (as locals): [2] 'i', '.doRNG.stream' [06:33:07.124] - R expression: [06:33:07.124] { [06:33:07.124] "# doFuture():::doFuture(): Make sure that foreach uses 'doFuture'" [06:33:07.124] "# also in nested calls " [06:33:07.124] doFuture::registerDoFuture() [06:33:07.124] "# doFuture():::doFuture(): process chunk of elements" [06:33:07.124] lapply(seq_along(...future.x_ii), FUN = function(jj) { [06:33:07.124] ...future.x_jj <- ...future.x_ii[[jj]] [06:33:07.124] { [06:33:07.124] { [06:33:07.124] NULL [06:33:07.124] i <- NULL [06:33:07.124] } [06:33:07.124] .doRNG.stream <- NULL [06:33:07.124] } [06:33:07.124] ...future.env <- environment() [06:33:07.124] local({ [06:33:07.124] for (name in names(...future.x_jj)) { [06:33:07.124] assign(name, ...future.x_jj[[name]], envir = ...future.env, [06:33:07.124] inherits = FALSE) [06:33:07.124] } [06:33:07.124] }) [06:33:07.124] tryCatch({ [06:33:07.124] { [06:33:07.124] rngtools::RNGseed(.doRNG.stream) [06:33:07.124] } [06:33:07.124] { [06:33:07.124] sample.int(n = 100L, size = 1L) [06:33:07.124] } [06:33:07.124] }, error = identity) [06:33:07.124] }) [06:33:07.124] } [06:33:07.125] - identifying globals and packages ... [06:33:07.136] List of 1 [06:33:07.136] $ ...future.x_ii: NULL [06:33:07.136] - attr(*, "where")=List of 1 [06:33:07.136] ..$ ...future.x_ii: [06:33:07.136] - attr(*, "class")= chr [1:3] "FutureGlobals" "Globals" "list" [06:33:07.136] - attr(*, "resolved")= logi FALSE [06:33:07.136] - attr(*, "total_size")= num 27 [06:33:07.140] - R expression: [06:33:07.140] { [06:33:07.140] "# doFuture():::doFuture(): Make sure that foreach uses 'doFuture'" [06:33:07.140] "# also in nested calls " [06:33:07.140] doFuture::registerDoFuture() [06:33:07.140] "# doFuture():::doFuture(): process chunk of elements" [06:33:07.140] lapply(seq_along(...future.x_ii), FUN = function(jj) { [06:33:07.140] ...future.x_jj <- ...future.x_ii[[jj]] [06:33:07.140] { [06:33:07.140] { [06:33:07.140] NULL [06:33:07.140] i <- NULL [06:33:07.140] } [06:33:07.140] .doRNG.stream <- NULL [06:33:07.140] } [06:33:07.140] ...future.env <- environment() [06:33:07.140] local({ [06:33:07.140] for (name in names(...future.x_jj)) { [06:33:07.140] assign(name, ...future.x_jj[[name]], envir = ...future.env, [06:33:07.140] inherits = FALSE) [06:33:07.140] } [06:33:07.140] }) [06:33:07.140] tryCatch({ [06:33:07.140] { [06:33:07.140] rngtools::RNGseed(.doRNG.stream) [06:33:07.140] } [06:33:07.140] { [06:33:07.140] sample.int(n = 100L, size = 1L) [06:33:07.140] } [06:33:07.140] }, error = identity) [06:33:07.140] }) [06:33:07.140] } [06:33:07.141] - globals: [1] '...future.x_ii' [06:33:07.141] List of 1 [06:33:07.141] $ ...future.x_ii: NULL [06:33:07.141] - attr(*, "where")=List of 1 [06:33:07.141] ..$ ...future.x_ii: [06:33:07.141] - attr(*, "class")= chr [1:3] "FutureGlobals" "Globals" "list" [06:33:07.141] - attr(*, "resolved")= logi FALSE [06:33:07.141] - attr(*, "total_size")= num 27 [06:33:07.144] - packages: [2] 'doFuture', 'doRNG' [06:33:07.144] - identifying globals and packages ... DONE [06:33:07.150] Number of chunks: 2 [06:33:07.150] Number of futures (= number of chunks): 2 [06:33:07.150] Launching 2 futures (chunks) ... [06:33:07.151] Chunk #1 of 2 ... [06:33:07.151] - Finding globals in 'args_list' chunk #1 ... [06:33:07.152] [06:33:07.152] [06:33:07.152] - Finding globals in 'args_list' for chunk #1 ... DONE [06:33:07.180] Chunk #1 of 2 ... DONE [06:33:07.180] Chunk #2 of 2 ... [06:33:07.181] - Finding globals in 'args_list' chunk #2 ... [06:33:07.182] [06:33:07.182] [06:33:07.183] - Finding globals in 'args_list' for chunk #2 ... DONE [06:33:07.322] Chunk #2 of 2 ... DONE [06:33:07.323] Launching 2 futures (chunks) ... DONE [06:33:07.323] - resolving futures [06:33:07.323] - gathering results & relaying conditions (except errors) [06:33:07.549] - collecting values of futures [06:33:07.549] - accumulating results [06:33:07.551] - processing errors (handler = 'stop') [06:33:07.551] - extracting results [06:33:07.552] doFuture() ... DONE [1] 59.5 - plan('multisession') ... DONE - plan('cluster') ... [06:33:08.068] doFuture() ... [06:33:08.069] - dummy globals (as locals): [2] 'i', '.doRNG.stream' [06:33:08.069] - R expression: [06:33:08.070] { [06:33:08.070] "# doFuture():::doFuture(): Make sure that foreach uses 'doFuture'" [06:33:08.070] "# also in nested calls " [06:33:08.070] doFuture::registerDoFuture() [06:33:08.070] "# doFuture():::doFuture(): process chunk of elements" [06:33:08.070] lapply(seq_along(...future.x_ii), FUN = function(jj) { [06:33:08.070] ...future.x_jj <- ...future.x_ii[[jj]] [06:33:08.070] { [06:33:08.070] { [06:33:08.070] NULL [06:33:08.070] i <- NULL [06:33:08.070] } [06:33:08.070] .doRNG.stream <- NULL [06:33:08.070] } [06:33:08.070] ...future.env <- environment() [06:33:08.070] local({ [06:33:08.070] for (name in names(...future.x_jj)) { [06:33:08.070] assign(name, ...future.x_jj[[name]], envir = ...future.env, [06:33:08.070] inherits = FALSE) [06:33:08.070] } [06:33:08.070] }) [06:33:08.070] tryCatch({ [06:33:08.070] { [06:33:08.070] rngtools::RNGseed(.doRNG.stream) [06:33:08.070] } [06:33:08.070] { [06:33:08.070] sample.int(n = 100L, size = 1L) [06:33:08.070] } [06:33:08.070] }, error = identity) [06:33:08.070] }) [06:33:08.070] } [06:33:08.070] - identifying globals and packages ... [06:33:08.085] List of 1 [06:33:08.085] $ ...future.x_ii: NULL [06:33:08.085] - attr(*, "where")=List of 1 [06:33:08.085] ..$ ...future.x_ii: [06:33:08.085] - attr(*, "class")= chr [1:3] "FutureGlobals" "Globals" "list" [06:33:08.085] - attr(*, "resolved")= logi FALSE [06:33:08.085] - attr(*, "total_size")= num 27 [06:33:08.090] - R expression: [06:33:08.090] { [06:33:08.090] "# doFuture():::doFuture(): Make sure that foreach uses 'doFuture'" [06:33:08.090] "# also in nested calls " [06:33:08.090] doFuture::registerDoFuture() [06:33:08.090] "# doFuture():::doFuture(): process chunk of elements" [06:33:08.090] lapply(seq_along(...future.x_ii), FUN = function(jj) { [06:33:08.090] ...future.x_jj <- ...future.x_ii[[jj]] [06:33:08.090] { [06:33:08.090] { [06:33:08.090] NULL [06:33:08.090] i <- NULL [06:33:08.090] } [06:33:08.090] .doRNG.stream <- NULL [06:33:08.090] } [06:33:08.090] ...future.env <- environment() [06:33:08.090] local({ [06:33:08.090] for (name in names(...future.x_jj)) { [06:33:08.090] assign(name, ...future.x_jj[[name]], envir = ...future.env, [06:33:08.090] inherits = FALSE) [06:33:08.090] } [06:33:08.090] }) [06:33:08.090] tryCatch({ [06:33:08.090] { [06:33:08.090] rngtools::RNGseed(.doRNG.stream) [06:33:08.090] } [06:33:08.090] { [06:33:08.090] sample.int(n = 100L, size = 1L) [06:33:08.090] } [06:33:08.090] }, error = identity) [06:33:08.090] }) [06:33:08.090] } [06:33:08.091] - globals: [1] '...future.x_ii' [06:33:08.092] List of 1 [06:33:08.092] $ ...future.x_ii: NULL [06:33:08.092] - attr(*, "where")=List of 1 [06:33:08.092] ..$ ...future.x_ii: [06:33:08.092] - attr(*, "class")= chr [1:3] "FutureGlobals" "Globals" "list" [06:33:08.092] - attr(*, "resolved")= logi FALSE [06:33:08.092] - attr(*, "total_size")= num 27 [06:33:08.096] - packages: [2] 'doFuture', 'doRNG' [06:33:08.096] - identifying globals and packages ... DONE [06:33:08.103] Number of chunks: 2 [06:33:08.103] Number of futures (= number of chunks): 2 [06:33:08.104] Launching 2 futures (chunks) ... [06:33:08.104] Chunk #1 of 2 ... [06:33:08.104] - Finding globals in 'args_list' chunk #1 ... [06:33:08.105] [06:33:08.105] [06:33:08.106] - Finding globals in 'args_list' for chunk #1 ... DONE [06:33:08.133] Chunk #1 of 2 ... DONE [06:33:08.133] Chunk #2 of 2 ... [06:33:08.134] - Finding globals in 'args_list' chunk #2 ... [06:33:08.135] [06:33:08.135] [06:33:08.135] - Finding globals in 'args_list' for chunk #2 ... DONE [06:33:08.290] Chunk #2 of 2 ... DONE [06:33:08.290] Launching 2 futures (chunks) ... DONE [06:33:08.291] - resolving futures [06:33:08.291] - gathering results & relaying conditions (except errors) [06:33:08.502] - collecting values of futures [06:33:08.502] - accumulating results [06:33:08.505] - processing errors (handler = 'stop') [06:33:08.506] - extracting results [06:33:08.506] doFuture() ... DONE [1] 59.5 - plan('cluster') ... DONE *** withDoRNG() ... DONE > > source("incl/end.R") R version 4.5.0 alpha (2025-03-15 r87978 ucrt) Platform: x86_64-w64-mingw32/x64 Running under: Windows Server 2022 x64 (build 20348) Matrix products: default LAPACK version 3.12.1 locale: [1] LC_COLLATE=C LC_CTYPE=German_Germany.utf8 [3] LC_MONETARY=C LC_NUMERIC=C [5] LC_TIME=C time zone: Europe/Berlin tzcode source: internal attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] doRNG_1.8.6.1 rngtools_1.5.2 doFuture_1.0.2 future_1.34.0 foreach_1.5.2 loaded via a namespace (and not attached): [1] compiler_4.5.0 parallelly_1.42.0 tools_4.5.0 [4] parallel_4.5.0 future.apply_1.11.3 listenv_0.9.1 [7] codetools_0.2-20 iterators_1.0.14 digest_0.6.37 [10] globals_0.16.3 > > proc.time() user system elapsed 1.00 0.23 3.36