CRAN Package Check Results for Package doFuture

Last updated on 2025-04-12 20:51:43 CEST.

Flavor Version Tinstall Tcheck Ttotal Status Flags
r-devel-linux-x86_64-debian-clang 1.0.2 3.36 107.31 110.67 OK
r-devel-linux-x86_64-debian-gcc 1.0.2 2.52 106.21 108.73 OK
r-devel-linux-x86_64-fedora-gcc 1.0.2 182.81 OK
r-devel-macos-arm64 1.0.2 116.00 OK
r-devel-macos-x86_64 1.0.2 176.00 OK
r-devel-windows-x86_64 1.0.2 4.00 175.00 179.00 OK
r-patched-linux-x86_64 1.0.2 3.13 130.82 133.95 OK
r-release-linux-x86_64 1.0.2 OK
r-release-macos-arm64 1.0.2 110.00 OK
r-release-macos-x86_64 1.0.2 281.00 OK
r-release-windows-x86_64 1.0.2 6.00 354.00 360.00 ERROR
r-oldrel-macos-arm64 1.0.2 117.00 OK
r-oldrel-macos-x86_64 1.0.2 266.00 OK
r-oldrel-windows-x86_64 1.0.2 5.00 208.00 213.00 OK

Check Details

Version: 1.0.2
Check: tests
Result: ERROR Running 'foreach_dofuture,cluster-missing-doFuture-pkg.R' [63s] Running 'foreach_dofuture,errors.R' [13s] Running 'foreach_dofuture,globals.R' [9s] Running 'foreach_dofuture,nested_colon.R' [18s] Running 'foreach_dofuture,nested_dofuture.R' [20s] Running 'foreach_dofuture,rng.R' [5s] Running 'foreach_dofuture.R' [4s] Running 'foreach_dopar,cluster-missing-doFuture-pkg.R' [62s] Running 'foreach_dopar,doRNG,dopar.R' [3s] Running 'foreach_dopar,doRNG,dorng.R' [7s] Running 'foreach_dopar,errors.R' [9s] Running 'foreach_dopar,globals.R' [9s] Running 'foreach_dopar,nested_colon.R' [16s] Running 'foreach_dopar,nested_dopar.R' [20s] Running 'foreach_dopar,options-for-export.R' [6s] Running 'foreach_dopar.R' [4s] Running 'makeChunks.R' [5s] Running 'options,nested.R' [5s] Running 'registerDoFuture.R' [2s] Running 'times.R' [2s] Running 'utils.R' [1s] Running 'withDoRNG.R' [5s] Running the tests in 'tests/foreach_dofuture,cluster-missing-doFuture-pkg.R' failed. Complete output: > source("incl/start.R") Loading required package: foreach Loading required package: future R version 4.4.3 (2025-02-28 ucrt) Platform: x86_64-w64-mingw32/x64 Running under: Windows Server 2022 x64 (build 20348) Matrix products: default 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.40.0 foreach_1.5.2 loaded via a namespace (and not attached): [1] compiler_4.4.3 parallelly_1.43.0 tools_4.4.3 [4] parallel_4.4.3 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 > options(future.debug = FALSE) > > message("*** cluster() ...") *** cluster() ... > > message("Library paths: ", paste(sQuote(.libPaths()), collapse = ", ")) Library paths: 'D:/temp/2025_04_10_15_59_44_1950/RtmpU5NCQ7/RLIBS_7db8757752aa', 'D:/RCompile/recent/R-4.4.3/library' > message("Package path: ", sQuote(system.file(package = "future"))) Package path: 'D:/RCompile/CRANpkg/lib/4.4/future' > > types <- "PSOCK" > #if (supportsMulticore()) types <- c(types, "FORK") > > setupClusterWithoutPkgs <- function(type = "PSOCK", + withs = c("digest", "globals", + "listenv", "future"), + withouts = c("doFuture")) { + cl <- parallel::makeCluster(1L, type = type, timeout = 60) + + ## Emulate a worker that does not have 'future' installed. + ## by setting a different user library path on the worker. + libs <- parallel::clusterEvalQ(cl, .libPaths(tempdir()))[[1]] + attr(cl, "libs") <- libs + + ## 'withouts' tops 'withs' for conveniency + withs <- setdiff(withs, withouts) + + ## "Install" any 'withs' packages? + if (length(withs) > 0L) { + paths <- find.package(withs) + res <- parallel::clusterCall(cl, fun = sapply, X = paths, + FUN = file.copy, to = libs[1], + recursive = TRUE)[[1]] + res <- parallel::clusterCall(cl, fun = sapply, X = withs, + FUN = requireNamespace)[[1]] + } + attr(cl, "withs") <- res + + ## Check whether 'future' is still available on the worker or not. + ## It could be that it is installed in the system library path, which + ## in case we cannot "hide" the future package from the worker. + res <- parallel::clusterCall(cl, fun = sapply, X = withouts, + FUN = requireNamespace)[[1]] + attr(cl, "withouts") <- res + + cl + } > > cl <- NULL > for (type in types) { + message(sprintf("Test set #1 with cluster type %s ...", sQuote(type))) + + cl <- setupClusterWithoutPkgs(type, withouts = c("future", "doFuture")) + if (all(attr(cl, "withs")) && !all(attr(cl, "withouts"))) { + plan(cluster, workers = cl, .init = FALSE) + + ## Here we will get: + ## <UnexpectedFutureResultError: Unexpected result (of class + ## 'snow-try-error' != 'FutureResult') retrieved for ClusterFuture + ## future (label = '<none>', expression = '{ ... }'): + ## Package 'future' is not installed on worker (r_version: ...)> + ## Note: This error is produced by the future backend when it recieves + ## the unexpected results. + res <- tryCatch({ + y <- foreach(ii = 1:3) %dofuture% ii + }, error = identity) + print(res) + stopifnot(inherits(res, "FutureError")) + } + parallel::stopCluster(cl) + cl <- NULL + + cl <- setupClusterWithoutPkgs(type) + if (all(attr(cl, "withs")) && !all(attr(cl, "withouts"))) { + plan(cluster, workers = cl, .init = FALSE) + + ## Here we will get: + ## <UnexpectedFutureResultError: Unexpected result (of class + ## 'snow-try-error' != 'FutureResult') retrieved for ClusterFuture + ## future (label = '<none>', expression = '{ ... }'): + ## there is no package called 'doFuture'> + ## Note: This error is produced by the future backend when it recieves + ## the unexpected results. + res <- tryCatch({ + y <- foreach(ii = 1:3) %dofuture% ii + }, error = identity) + print(res) + stopifnot(inherits(res, "FutureError")) + } + parallel::stopCluster(cl) + cl <- NULL + + plan(sequential) + + message(sprintf("Test set #1 with cluster type %s ... DONE", sQuote(type))) + } ## for (type ...) Test set #1 with cluster type 'PSOCK' ... [00:29:18.869] doFuture2() ... [00:29:18.959] Number of chunks: 1 [00:29:18.959] Number of futures (= number of chunks): 1 [00:29:18.959] seed = FALSE [00:29:18.960] NULL [00:29:18.965] seed = FALSE [00:29:18.965] seed = FALSE [00:29:18.966] - %dofuture% R expression: [00:29:18.966] ii [00:29:18.967] - foreach iterator arguments: [1] 'ii' [00:29:18.967] - dummy globals (as locals): [1] 'ii' [00:29:18.968] - R expression (map-reduce expression adjusted for RNG): [00:29:18.968] { [00:29:18.968] NULL [00:29:18.968] "# doFuture():::doFuture2(): process chunk of elements" [00:29:18.968] lapply(seq_along(...future.x_ii), FUN = function(jj) { [00:29:18.968] ...future.x_jj <- ...future.x_ii[[jj]] [00:29:18.968] { [00:29:18.968] NULL [00:29:18.968] ii <- NULL [00:29:18.968] } [00:29:18.968] ...future.env <- environment() [00:29:18.968] local({ [00:29:18.968] for (name in names(...future.x_jj)) { [00:29:18.968] assign(name, ...future.x_jj[[name]], envir = ...future.env, [00:29:18.968] inherits = FALSE) [00:29:18.968] } [00:29:18.968] }) [00:29:18.968] NULL [00:29:18.968] tryCatch(ii, error = identity) [00:29:18.968] }) [00:29:18.968] } [00:29:18.969] - identifying globals and packages ... [00:29:18.970] - Argument 'globals': [00:29:18.970] logi TRUE [00:29:18.970] - attr(*, "add")= chr "...future.x_ii" [00:29:18.970] - attr(*, "ignore")= chr "ii" [00:29:18.974] - R expression (map-reduce expression searched for globals): [00:29:18.975] { [00:29:18.975] NULL [00:29:18.975] "# doFuture():::doFuture2(): process chunk of elements" [00:29:18.975] lapply(seq_along(...future.x_ii), FUN = function(jj) { [00:29:18.975] ...future.x_jj <- ...future.x_ii[[jj]] [00:29:18.975] { [00:29:18.975] NULL [00:29:18.975] ii <- NULL [00:29:18.975] } [00:29:18.975] ...future.env <- environment() [00:29:18.975] local({ [00:29:18.975] for (name in names(...future.x_jj)) { [00:29:18.975] assign(name, ...future.x_jj[[name]], envir = ...future.env, [00:29:18.975] inherits = FALSE) [00:29:18.975] } [00:29:18.975] }) [00:29:18.975] NULL [00:29:18.975] tryCatch(ii, error = identity) [00:29:18.975] }) [00:29:18.975] } [00:29:19.006] - R expression (%dofuture% expression searched for globals): [00:29:19.006] ii [00:29:19.009] - Globals in %dofuture% R expression not in map-reduce expression: [00:29:19.010] - Appending 0 globals only found in the vanilla %dofuture% expression: [00:29:19.010] - globals: [1] '...future.x_ii' [00:29:19.010] List of 1 [00:29:19.010] $ ...future.x_ii: num 42 [00:29:19.010] - attr(*, "where")=List of 1 [00:29:19.010] ..$ ...future.x_ii:<environment: R_EmptyEnv> [00:29:19.010] - attr(*, "class")= chr [1:3] "FutureGlobals" "Globals" "list" [00:29:19.010] - attr(*, "resolved")= logi FALSE [00:29:19.010] - attr(*, "total_size")= num 39 [00:29:19.017] - packages: [1] 'doFuture' [00:29:19.017] - identifying globals and packages ... DONE [00:29:19.018] Launching 1 futures (chunks) ... [00:29:19.018] Chunk #1 of 1 ... [00:29:19.019] - Finding globals in 'args_list' for chunk #1 ... [00:29:19.020] [00:29:19.021] [00:29:19.021] - Finding globals in 'args_list' for chunk #1 ... DONE [00:29:19.021] - seeds: <none> [00:29:19.032] Chunk #1 of 1 ... DONE [00:29:19.032] Launching 1 futures (chunks) ... DONE [00:29:19.033] - resolving futures [00:29:19.033] - gathering results & relaying conditions (except errors) <FutureInterruptError: A future ('doFuture2-1') of class ClusterFuture was interrupted, while running on 'localhost'> Future UUID: 8e0585a760f78326f8fafd30ab5b11d0-2 DEBUG: BEGIN TROUBLESHOOTING HELP Future involved: ClusterFuture: Label: 'doFuture2-1' Expression: { NULL "# doFuture():::doFuture2(): process chunk of elements" lapply(seq_along(...future.x_ii), FUN = function(jj) { ...future.x_jj <- ...future.x_ii[[jj]] { NULL ii <- NULL } ...future.env <- environment() local({ for (name in names(...future.x_jj)) { assign(name, ...future.x_jj[[name]], envir = ...future.env, inherits = FALSE) } }) NULL tryCatch(ii, error = identity) }) } Lazy evaluation: FALSE Asynchronous evaluation: TRUE Local evaluation: TRUE Environment: R_GlobalEnv Capture standard output: TRUE Capture condition classes: 'condition' (excluding '<none>') Immediate condition classes: 'immediateCondition' Globals: 1 objects totaling 194 bytes (list '...future.x_ii' of 194 bytes) Packages: 1 packages ('doFuture') L'Ecuyer-CMRG RNG seed: <none> (seed = FALSE) Resolved: TRUE Value: <not collected> Conditions captured: <none> Early signaling: FALSE Owner process: 8e0585a760f78326f8fafd30ab5b11d0 Class: 'ClusterFuture', 'MultiprocessFuture', 'Future' DEBUG: END TROUBLESHOOTING HELP Error in serialize(data, node$con) : error writing to connection Calls: <Anonymous> ... postNode -> sendData -> sendData.SOCKnode -> serialize Execution halted Running the tests in 'tests/foreach_dopar,cluster-missing-doFuture-pkg.R' failed. Complete output: > source("incl/start.R") Loading required package: foreach Loading required package: future R version 4.4.3 (2025-02-28 ucrt) Platform: x86_64-w64-mingw32/x64 Running under: Windows Server 2022 x64 (build 20348) Matrix products: default 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.40.0 foreach_1.5.2 loaded via a namespace (and not attached): [1] compiler_4.4.3 parallelly_1.43.0 tools_4.4.3 [4] parallel_4.4.3 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 > options(future.debug = FALSE) > > message("*** cluster() ...") *** cluster() ... > > registerDoFuture() > > message("Library paths: ", paste(sQuote(.libPaths()), collapse = ", ")) Library paths: 'D:/temp/2025_04_10_15_59_44_1950/RtmpU5NCQ7/RLIBS_7db8757752aa', 'D:/RCompile/recent/R-4.4.3/library' > message("Package path: ", sQuote(system.file(package = "future"))) Package path: 'D:/RCompile/CRANpkg/lib/4.4/future' > > types <- "PSOCK" > #if (supportsMulticore()) types <- c(types, "FORK") > > setupClusterWithoutPkgs <- function(type = "PSOCK", + withs = c("digest", "globals", + "listenv", "future"), + withouts = c("doFuture")) { + cl <- parallel::makeCluster(1L, type = type, timeout = 60) + + ## Emulate a worker that does not have 'future' installed. + ## by setting a different user library path on the worker. + libs <- parallel::clusterEvalQ(cl, .libPaths(tempdir()))[[1]] + attr(cl, "libs") <- libs + + ## 'withouts' tops 'withs' for conveniency + withs <- setdiff(withs, withouts) + + ## "Install" any 'withs' packages? + if (length(withs) > 0L) { + paths <- find.package(withs) + res <- parallel::clusterCall(cl, fun = sapply, X = paths, + FUN = file.copy, to = libs[1], + recursive = TRUE)[[1]] + res <- parallel::clusterCall(cl, fun = sapply, X = withs, + FUN = requireNamespace)[[1]] + } + attr(cl, "withs") <- res + + ## Check whether 'future' is still available on the worker or not. + ## It could be that it is installed in the system library path, which + ## in case we cannot "hide" the future package from the worker. + res <- parallel::clusterCall(cl, fun = sapply, X = withouts, + FUN = requireNamespace)[[1]] + attr(cl, "withouts") <- res + + cl + } > > > cl <- NULL > for (type in types) { + message(sprintf("Test set #1 with cluster type %s ...", sQuote(type))) + + cl <- setupClusterWithoutPkgs(type, withouts = c("future", "doFuture")) + if (all(attr(cl, "withs")) && !all(attr(cl, "withouts"))) { + plan(cluster, workers = cl, .init = FALSE) + + ## Here we will get: + ## <UnexpectedFutureResultError: Unexpected result (of class + ## 'snow-try-error' != 'FutureResult') retrieved for ClusterFuture + ## future (label = '<none>', expression = '{ ... }'): + ## Package 'future' is not installed on worker (r_version: ...)> + ## Note: This error is produced by the future backend when it recieves + ## the unexpected results. + res <- tryCatch({ + y <- foreach(ii = 1:3) %dopar% ii + }, error = identity) + print(res) + stopifnot(inherits(res, "FutureError")) + } + parallel::stopCluster(cl) + cl <- NULL + + cl <- setupClusterWithoutPkgs(type) + if (all(attr(cl, "withs")) && !all(attr(cl, "withouts"))) { + plan(cluster, workers = cl, .init = FALSE) + + ## Here we will get: + ## <UnexpectedFutureResultError: Unexpected result (of class + ## 'snow-try-error' != 'FutureResult') retrieved for ClusterFuture + ## future (label = '<none>', expression = '{ ... }'): + ## there is no package called 'doFuture'> + ## Note: This error is produced by the future backend when it recieves + ## the unexpected results. + res <- tryCatch({ + y <- foreach(ii = 1:3) %dopar% ii + }, error = identity) + print(res) + stopifnot(inherits(res, "FutureError")) + } + parallel::stopCluster(cl) + cl <- NULL + + plan(sequential) + + message(sprintf("Test set #1 with cluster type %s ... DONE", sQuote(type))) + } ## for (type ...) Test set #1 with cluster type 'PSOCK' ... [00:31:30.064] doFuture() ... [00:31:30.067] - dummy globals (as locals): [1] 'ii' [00:31:30.067] - R expression: [00:31:30.068] { [00:31:30.068] "# doFuture():::doFuture(): Make sure that foreach uses 'doFuture'" [00:31:30.068] "# also in nested calls " [00:31:30.068] doFuture::registerDoFuture() [00:31:30.068] "# doFuture():::doFuture(): process chunk of elements" [00:31:30.068] lapply(seq_along(...future.x_ii), FUN = function(jj) { [00:31:30.068] ...future.x_jj <- ...future.x_ii[[jj]] [00:31:30.068] { [00:31:30.068] NULL [00:31:30.068] ii <- NULL [00:31:30.068] } [00:31:30.068] ...future.env <- environment() [00:31:30.068] local({ [00:31:30.068] for (name in names(...future.x_jj)) { [00:31:30.068] assign(name, ...future.x_jj[[name]], envir = ...future.env, [00:31:30.068] inherits = FALSE) [00:31:30.068] } [00:31:30.068] }) [00:31:30.068] tryCatch(ii, error = identity) [00:31:30.068] }) [00:31:30.068] } [00:31:30.069] - identifying globals and packages ... [00:31:30.102] List of 1 [00:31:30.102] $ ...future.x_ii: NULL [00:31:30.102] - attr(*, "where")=List of 1 [00:31:30.102] ..$ ...future.x_ii:<environment: R_EmptyEnv> [00:31:30.102] - attr(*, "class")= chr [1:3] "FutureGlobals" "Globals" "list" [00:31:30.102] - attr(*, "resolved")= logi FALSE [00:31:30.102] - attr(*, "total_size")= num 27 [00:31:30.114] - R expression: [00:31:30.114] { [00:31:30.114] "# doFuture():::doFuture(): Make sure that foreach uses 'doFuture'" [00:31:30.114] "# also in nested calls " [00:31:30.114] doFuture::registerDoFuture() [00:31:30.114] "# doFuture():::doFuture(): process chunk of elements" [00:31:30.114] lapply(seq_along(...future.x_ii), FUN = function(jj) { [00:31:30.114] ...future.x_jj <- ...future.x_ii[[jj]] [00:31:30.114] { [00:31:30.114] NULL [00:31:30.114] ii <- NULL [00:31:30.114] } [00:31:30.114] ...future.env <- environment() [00:31:30.114] local({ [00:31:30.114] for (name in names(...future.x_jj)) { [00:31:30.114] assign(name, ...future.x_jj[[name]], envir = ...future.env, [00:31:30.114] inherits = FALSE) [00:31:30.114] } [00:31:30.114] }) [00:31:30.114] tryCatch(ii, error = identity) [00:31:30.114] }) [00:31:30.114] } [00:31:30.115] - globals: [1] '...future.x_ii' [00:31:30.116] List of 1 [00:31:30.116] $ ...future.x_ii: NULL [00:31:30.116] - attr(*, "where")=List of 1 [00:31:30.116] ..$ ...future.x_ii:<environment: R_EmptyEnv> [00:31:30.116] - attr(*, "class")= chr [1:3] "FutureGlobals" "Globals" "list" [00:31:30.116] - attr(*, "resolved")= logi FALSE [00:31:30.116] - attr(*, "total_size")= num 27 [00:31:30.122] - packages: [1] 'doFuture' [00:31:30.123] - identifying globals and packages ... DONE [00:31:30.203] Number of chunks: 1 [00:31:30.203] Number of futures (= number of chunks): 1 [00:31:30.204] Launching 1 futures (chunks) ... [00:31:30.204] Chunk #1 of 1 ... [00:31:30.205] - Finding globals in 'args_list' chunk #1 ... [00:31:30.206] [00:31:30.206] [00:31:30.207] - Finding globals in 'args_list' for chunk #1 ... DONE [00:31:30.216] Chunk #1 of 1 ... DONE [00:31:30.217] Launching 1 futures (chunks) ... DONE [00:31:30.217] - resolving futures [00:31:30.217] - gathering results & relaying conditions (except errors) <FutureInterruptError: A future ('doFuture-1') of class ClusterFuture was interrupted, while running on 'localhost'> Future UUID: a298d68c91b0891a3c10c7f976f01075-2 DEBUG: BEGIN TROUBLESHOOTING HELP Future involved: ClusterFuture: Label: 'doFuture-1' Expression: { "# doFuture():::doFuture(): Make sure that foreach uses 'doFuture'" "# also in nested calls " doFuture::registerDoFuture() "# doFuture():::doFuture(): process chunk of elements" lapply(seq_along(...future.x_ii), FUN = function(jj) { ...future.x_jj <- ...future.x_ii[[jj]] { NULL ii <- NULL } ...future.env <- environment() local({ for (name in names(...future.x_jj)) { assign(name, ...future.x_jj[[name]], envir = ...future.env, inherits = FALSE) } }) tryCatch(ii, error = identity) }) } Lazy evaluation: FALSE Asynchronous evaluation: TRUE Local evaluation: TRUE Environment: R_GlobalEnv Capture standard output: TRUE Capture condition classes: 'condition' (excluding '<none>') Immediate condition classes: 'immediateCondition' Globals: 1 objects totaling 194 bytes (list '...future.x_ii' of 194 bytes) Packages: 1 packages ('doFuture') L'Ecuyer-CMRG RNG seed: <none> (seed = FALSE) Resolved: TRUE Value: <not collected> Conditions captured: <none> Early signaling: FALSE Owner process: a298d68c91b0891a3c10c7f976f01075 Class: 'ClusterFuture', 'MultiprocessFuture', 'Future' DEBUG: END TROUBLESHOOTING HELP Error in serialize(data, node$con) : error writing to connection Calls: <Anonymous> ... postNode -> sendData -> sendData.SOCKnode -> serialize Execution halted Flavor: r-release-windows-x86_64

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.