CRAN Package Check Results for Package forestsearch

Last updated on 2026-10-24 01:51:34 CEST.

Flavor Version Tinstall Tcheck Ttotal Status Flags
r-devel-linux-x86_64-debian-clang 0.4.0 46.03 571.34 617.37 OK
r-devel-linux-x86_64-debian-gcc 0.4.0 33.98 312.63 346.61 ERROR
r-devel-linux-x86_64-fedora-clang 0.4.0 39.00 378.72 417.72 OK
r-devel-linux-x86_64-fedora-gcc 0.4.0 36.00 377.41 413.41 OK
r-devel-windows-x86_64 0.4.0 64.00 630.00 694.00 OK
r-patched-linux-x86_64 0.4.0 59.10 562.18 621.28 OK
r-release-linux-x86_64 0.4.0 48.45 570.67 619.12 OK
r-release-macos-arm64 0.4.0 12.00 102.00 114.00 OK
r-release-macos-x86_64 0.4.0 38.00 742.00 780.00 OK
r-release-windows-x86_64 0.4.0 54.00 656.00 710.00 OK
r-oldrel-macos-arm64 0.4.0 13.00 144.00 157.00 OK
r-oldrel-macos-x86_64 0.4.0 37.00 774.00 811.00 OK
r-oldrel-windows-x86_64 0.4.0 84.00 834.00 918.00 OK

Check Details

Version: 0.4.0
Check: examples
Result: ERROR Running examples in ‘forestsearch-Ex.R’ failed The error most likely occurred in: > base::assign(".ptime", proc.time(), pos = "CheckExEnv") > ### Name: fs_assert_membership > ### Title: Assert the exported selected-subgroup membership matches > ### forestsearch's own > ### Aliases: fs_assert_membership > > ### ** Examples > > set.seed(11) > n <- 200 > df <- data.frame(id = seq_len(n), treat = rbinom(n, 1, 0.5), + age = round(rnorm(n, 55, 12)), + bm = factor(rbinom(n, 1, 0.5))) > harm <- df$age <= 50 & df$bm == "1" > tt <- rexp(n, 0.05 * exp(log(2.5) * df$treat * harm)) > df$time <- pmin(tt, 60) > df$event <- as.integer(tt <= 60) > fit <- forestsearch( + df.analysis = df, + outcome.name = "time", event.name = "event", + treat.name = "treat", id.name = "id", + confounders.name = c("age", "bm"), + sg_focus = "maxeff", use_grf = FALSE, use_lasso = FALSE, + fs.splits = 50, n.min = 30, d0.min = 5, d1.min = 5, + hr.threshold = 1.1, hr.consistency = 1.0, + pconsistency.threshold = 0.5, maxk = 2, + details = FALSE, plot.sg = FALSE, + parallel_args = list(plan = "sequential", workers = 1L, + show_message = FALSE) + ) Warning: sg_focus = 'maxeff' selects the effect maximiser with no auxiliary conditions; overriding: pconsistency.threshold -> 0, stop_threshold -> NULL, use_twostage -> FALSE, minp -> 0. The subgroup-search effect floor (hr.threshold) is disabled, redundancy pruning is relaxed to exact-duplicate removal (rmin -> 0), and consistency-stage duplicate removal collapses identical-membership candidates to their fewest-cut representative -- so the argmax ranges over the full estimable family with no arbitrary tie-break. [forestsearch] Subgroup Identification Configuration Outcome type: survival (Cox PH) Effect measure: HR (hazard ratio) Scale: log (ratio) Screening: HR >= 1.10 (log: 0.0953) Consistency: HR >= 1.00 (log: 0.0000) Consistency rate threshold: 0% Interpretation: Candidates: subgroup hazard ratio >= 1.10 Splits: each split HR >= 1.00 Warning in value[[3L]](cond) : Error in subgroup.consistency: subscript out of bounds > exp_fam <- fs_export_maxeff_family(fit) Error in fs_export_maxeff_family(fit) : No maxeff candidate family (grp.consistency$out_sg$result is NULL). Execution halted Flavor: r-devel-linux-x86_64-debian-gcc

Version: 0.4.0
Check: tests
Result: ERROR Running ‘testthat.R’ [70s/75s] Running the tests in ‘tests/testthat.R’ failed. Complete output: > # This file is part of the standard setup for testthat. > # It is recommended that you do not modify it. > # > # Where should you do additional test configuration? > # Learn more about the roles of various files in: > # * https://r-pkgs.org/testing-design.html#sec-tests-files-overview > # * https://testthat.r-lib.org/articles/special-files.html > > library(testthat) > library(forestsearch) > > test_check("forestsearch") [forestsearch] Subgroup Identification Configuration Outcome type: binary Effect measure: OR (Odds Ratio) Scale: log (ratio) Screening: OR >= 1.10 (log: 0.0953) Consistency: OR >= 1.00 (log: 0.0000) Consistency rate threshold: 30% Interpretation: Candidates: subgroup OR >= 1.10 Splits: each split OR >= 1.00 [forestsearch] Subgroup Identification Configuration Outcome type: continuous Effect measure: MD (Mean Difference) Scale: identity Screening: MD >= 0.0000 Consistency: MD >= 0.0000 Consistency rate threshold: 30% Interpretation: Candidates: MD >= 0.0000 Splits: MD >= 0.0000 per split [forestsearch] Subgroup Identification Configuration Outcome type: count Effect measure: IRR (Incidence Rate Ratio) Scale: log (ratio) Screening: IRR >= 1.10 (log: 0.0953) Consistency: IRR >= 1.00 (log: 0.0000) Consistency rate threshold: 30% Interpretation: Candidates: subgroup IRR >= 1.10 Splits: each split IRR >= 1.00 # of continuous/categorical characteristics 1 1 Continuous characteristics: age Categorical characteristics: bm1 Default cuts included (1st 20) age <= mean(age) age <= median(age) age <= qlow(age) age <= qhigh(age) Categorical: bm1 Factors per GRF: age <= 57 age <= 55 age <= 66 Initial GRF cuts included age <= 57 age <= 55 age <= 66 Cut coarsening: 7 -> 6 candidates (c=1, safety_tol=0.05, digits=0) age <= {55.1} -> age <= 55 (0 subj moved) ===== CONSOLIDATED CUT EVALUATION (IMPROVED) ===== Evaluating 6 cut expressions once and caching... Cut evaluation summary: Total cuts: 6 Valid cuts: 6 Errors: 0 ✓ All 6 factors validated as 0/1 ===== END CONSOLIDATED CUT EVALUATION ===== # of candidate subgroup factors= 6 [1] "age <= 57" "age <= 55" "age <= 66" "age <= 48" "age <= 62" "bm1" Saving _problems/test-mr-field-complement-74.R Saving _problems/test-mr-field-complement-80.R Saving _problems/test-mr-field-complement-81.R Saving _problems/test-mr-field-complement-82.R Saving _problems/test-mr-field-complement-115.R Saving _problems/test-mr-ij-residual-joint-60.R Saving _problems/test-mr-ij-residual-joint-67.R Saving _problems/test-mr-ij-residual-joint-93.R Saving _problems/test-mr-ij-residual-joint-109.R Saving _problems/test-mr-ij-residual-joint-110.R Saving _problems/test-mr-ij-residual-joint-111.R [ FAIL 11 | WARN 25 | SKIP 81 | PASS 1972 ] ══ Skipped tests (81) ══════════════════════════════════════════════════════════ • On CRAN (65): 'test-binary-default-or.R:15:1', 'test-cross-outcome-parity.R:98:3', 'test-cross-outcome-parity.R:149:3', 'test-cross-outcome-parity.R:187:3', 'test-cross-outcome-parity.R:225:3', 'test-cross-outcome-parity.R:255:3', 'test-cross-outcome-parity.R:295:3', 'test-cross-outcome-parity.R:351:3', 'test-cv-mixed-and-fatal.R:157:3', 'test-cv-mixed-and-fatal.R:271:3', 'test-cv-mixed-and-fatal.R:302:3', 'test-cv-no-subgroup-dina-grf.R:58:7', 'test-cv-no-subgroup-dina-grf.R:58:7', 'test-cv-no-subgroup-dina-grf.R:58:7', 'test-cv-no-subgroup-dina-grf.R:58:7', 'test-cv-no-subgroup-edges.R:63:3', 'test-cv-no-subgroup-edges.R:98:3', 'test-cv-no-subgroup-edges.R:115:3', 'test-cv-no-subgroup-edges.R:156:3', 'test-cv-no-subgroup-edges.R:181:3', 'test-cv-no-subgroup-edges.R:215:3', 'test-declaration-c0.R:9:1', 'test-declaration-calibration.R:10:1', 'test-dina-bootstrap-sg-focus-whitelist.R:43:3', 'test-dina-bootstrap-sg-focus-whitelist.R:60:3', 'test-directive-c.R:15:1', 'test-downstream-consumers.R:209:3', 'test-downstream-consumers.R:237:3', 'test-downstream-consumers.R:284:3', 'test-downstream-consumers.R:327:3', 'test-grf-inclusion-band.R:16:1', 'test-mr-inference.R:20:1', 'test-no-subgroup-bootstrap.R:51:5', 'test-no-subgroup-bootstrap.R:51:5', 'test-no-subgroup-bootstrap.R:77:3', 'test-no-subgroup-cv.R:59:5', 'test-no-subgroup-cv.R:74:5', 'test-no-subgroup-cv.R:92:5', 'test-no-subgroup-cv.R:59:5', 'test-no-subgroup-cv.R:74:5', 'test-no-subgroup-cv.R:92:5', 'test-no-subgroup-cv.R:59:5', 'test-no-subgroup-cv.R:74:5', 'test-no-subgroup-cv.R:92:5', 'test-no-subgroup-cv.R:59:5', 'test-no-subgroup-cv.R:74:5', 'test-no-subgroup-cv.R:92:5', 'test-no-subgroup-dina-grf-plot.R:60:5', 'test-no-subgroup-dina-grf-plot.R:60:5', 'test-no-subgroup-dina-grf-plot.R:85:5', 'test-no-subgroup-dina-grf-plot.R:85:5', 'test-no-subgroup-dina-grf-summary.R:59:7', 'test-no-subgroup-dina-grf-summary.R:59:7', 'test-no-subgroup-dina-grf-summary.R:59:7', 'test-no-subgroup-dina-grf-summary.R:59:7', 'test-no-subgroup-dina-grf-summary.R:76:3', 'test-no-subgroup-unified-contract.R:41:5', 'test-no-subgroup-unified-contract.R:41:5', 'test-no-subgroup-unified-contract.R:41:5', 'test-no-subgroup-unified-contract.R:57:3', 'test-return-shape-contract.R:22:1', 'test-search-reproducibility.R:66:3', 'test-sg-focus-transparency.R:122:3', 'test-sg-focus-transparency.R:148:3', 'test-sg-focus-transparency.R:170:3' • baseline CSV not in this tree (1): 'test-threshold-pair-directive-a.R:148:3' • package source not available (1): 'test-estimability-boundary.R:158:3' • pre-refactor reference not present (dev/ not shipped) (2): 'test-fs-oc-grid.R:41:3', 'test-fs-oc-null.R:102:3' • simulation modules not present (3): 'test-betaHhat-contract.R:429:3', 'test-betaHhat-contract.R:462:3', 'test-betaHhat-contract.R:502:3' • threshold probe unavailable on this surface -- it lifts statements out of body(forestsearch) by deparsed text and cannot match them against the installed, byte-compiled package. These tests are gated on devtools::load_all() per CLAUDE.md. Cause: resolver evaluated to an error: could not find function ".probe_record" (9): 'test-threshold-pair-directive-a.R:45:3', 'test-threshold-pair-directive-a.R:66:3', 'test-threshold-pair-directive-a.R:87:3', 'test-threshold-pair-directive-a.R:127:3', 'test-threshold-sync.R:106:3', 'test-threshold-sync.R:123:3', 'test-threshold-sync.R:141:3', 'test-threshold-sync.R:152:3', 'test-threshold-sync.R:165:3' ══ Failed tests ════════════════════════════════════════════════════════════════ ── Failure ('test-mr-field-complement.R:74:3'): field_complement is add-only: everything else is byte-identical ── Expected `is.list(fc)` to be TRUE. Differences: `actual`: FALSE `expected`: TRUE ── Failure ('test-mr-field-complement.R:75:3'): field_complement is add-only: everything else is byte-identical ── Expected `all(...)` to be TRUE. Differences: `actual`: FALSE `expected`: TRUE ── Failure ('test-mr-field-complement.R:81:3'): field_complement is add-only: everything else is byte-identical ── Expected `is.finite(fc$upper_1s) && fc$upper_1s > 0` to be TRUE. Differences: `actual`: <NA> `expected`: TRUE ── Error ('test-mr-field-complement.R:82:3'): field_complement is add-only: everything else is byte-identical ── Error in `expect_gte(fc$upper_2s, fc$lower_2s)`: Result of comparison must be `TRUE`, `FALSE`, or `NA` Backtrace: ▆ 1. └─testthat::expect_gte(fc$upper_2s, fc$lower_2s) at test-mr-field-complement.R:82:3 2. └─testthat:::expect_compare_(">=", act, exp) 3. └─cli::cli_abort(...) 4. └─rlang::abort(...) ── Error ('test-mr-field-complement.R:115:3'): K = 1: the complement field is the naive one-sided upper bound ── Error in `abs(fc$lambda_mean)`: non-numeric argument to mathematical function Backtrace: ▆ 1. └─testthat::expect_lt(...) at test-mr-field-complement.R:115:3 2. └─testthat::quasi_label(enquo(object), label) 3. └─rlang::eval_bare(expr, quo_get_env(quo)) ── Failure ('test-mr-ij-residual-joint.R:60:3'): ij_residual variants are add-only and leave point estimates alone ── Expected `d0$ij_residual` to be identical to "two_term". Differences: `actual` is NULL `expected` is a character vector ('two_term') ── Error ('test-mr-ij-residual-joint.R:67:3'): ij_residual variants are add-only and leave point estimates alone ── Error in `expect_gte(wf$debiased$se_ij, d0$debiased$se_wald - 1e-12)`: Result of comparison must be `TRUE`, `FALSE`, or `NA` Backtrace: ▆ 1. └─testthat::expect_gte(wf$debiased$se_ij, d0$debiased$se_wald - 1e-12) at test-mr-ij-residual-joint.R:67:3 2. └─testthat:::expect_compare_(">=", act, exp) 3. └─cli::cli_abort(...) 4. └─rlang::abort(...) ── Error ('test-mr-ij-residual-joint.R:93:5'): K = 1: winner-only SE is the naive SE; two-term is ~2x; floor equals naive ── Error in `expect_lt(abs(blk$se_ij_winner/blk$se_wald - 1), 0.1)`: Result of comparison must be `TRUE`, `FALSE`, or `NA` Backtrace: ▆ 1. └─testthat::expect_lt(abs(blk$se_ij_winner/blk$se_wald - 1), 0.1) at test-mr-ij-residual-joint.R:93:5 2. └─testthat:::expect_compare_("<", act, exp) 3. └─cli::cli_abort(...) 4. └─rlang::abort(...) ── Failure ('test-mr-ij-residual-joint.R:109:3'): field$joint: gamma in range, achieved probability >= 1 - alpha, pairs consistent ── Expected `is.list(j)` to be TRUE. Differences: `actual`: FALSE `expected`: TRUE ── Failure ('test-mr-ij-residual-joint.R:110:3'): field$joint: gamma in range, achieved probability >= 1 - alpha, pairs consistent ── Expected `j$gamma >= 0.025 - 1e-12 && j$gamma <= 0.05 + 1e-12` to be TRUE. Differences: `actual`: <NA> `expected`: TRUE ── Error ('test-mr-ij-residual-joint.R:111:3'): field$joint: gamma in range, achieved probability >= 1 - alpha, pairs consistent ── Error in `expect_gte(j$joint_prob, 0.95 - 1e-12)`: Result of comparison must be `TRUE`, `FALSE`, or `NA` Backtrace: ▆ 1. └─testthat::expect_gte(j$joint_prob, 0.95 - 1e-12) at test-mr-ij-residual-joint.R:111:3 2. └─testthat:::expect_compare_(">=", act, exp) 3. └─cli::cli_abort(...) 4. └─rlang::abort(...) [ FAIL 11 | WARN 25 | SKIP 81 | PASS 1972 ] Error: ! Test failures. Execution halted Flavor: r-devel-linux-x86_64-debian-gcc

Version: 0.4.0
Check: re-building of vignette outputs
Result: ERROR Error(s) in re-building vignettes: ... --- re-building ‘forestsearch.Rmd’ using rmarkdown Quitting from forestsearch.Rmd:462-487 [bootstrap] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <error/rlang_error> Error in `forestsearch_bootstrap_dofuture()`: ! fs.est$df.est must be a non-empty data frame --- Backtrace: ▆ 1. └─forestsearch::forestsearch_bootstrap_dofuture(...) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Error: processing vignette 'forestsearch.Rmd' failed with diagnostics: fs.est$df.est must be a non-empty data frame --- failed re-building ‘forestsearch.Rmd’ --- re-building ‘survival-post-selection.qmd’ using html <1b>[31m processing file: survival-post-selection.qmd <1b>[39m<1b>[31mError in `round()`: ! non-numeric argument to mathematical function Backtrace: ▆ 1. └─base::print(round(sort(ph, decr<1b>[39m<1b>[31measing = TRUE)[1:5], 3)) <1b>[39m<1b>[31m Quitting from survival-post-selection.qmd:164-170 [phat] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <error/rlang_error> Error in `round()`: ! non-numeric argument to mathematical function --- Backtrace: ▆ 1. └─base::print(round(sort(ph, decreasing = TRUE)[1:5], 3)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Execution halted <1b>[39m<1b>[33mWARN: Error encountered when rendering files<1b>[39m Error: processing vignette 'survival-post-selection.qmd' failed with diagnostics: ! Error running quarto CLI from R. Caused by error in `quarto_render()`: ✖ Error returned by quarto CLI. ----------------------------- processing file: survival-post-selection.qmd <1b>[31mError in `round()`:<1b>[39m ! non-numeric argument to mathematical function Backtrace: ▆ 1. └─base::print(round(sort(ph, decr<1b>[31measing = TRUE)[1:5], 3))<1b>[39m Quitting from survival-post-selection.qmd:164-170 [phat] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <error/rlang_error> Error in `round()`: ! non-numeric argument to mathematical function --- Backtrace: ▆ 1. └─base::print(round(sort(ph, decreasing = TRUE)[1:5], 3)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Execution halted <1b>[33mWARN: Error encountered when rendering files<1b>[39m Caused by error in `processx::run()`: ! System command 'quarto' failed --- failed re-building ‘survival-post-selection.qmd’ SUMMARY: processing the following files failed: ‘forestsearch.Rmd’ ‘survival-post-selection.qmd’ Error: Vignette re-building failed. Execution halted Flavor: r-devel-linux-x86_64-debian-gcc