Following reprex illustrates the failure to use build_table using a zero row input dataframe and a layout that includes option top_level_section_div = " ".
library(rtables)
#> Loading required package: formatters
#>
#> Attaching package: 'formatters'
#> The following object is masked from 'package:base':
#>
#> %||%
#> Loading required package: magrittr
#>
#> Attaching package: 'rtables'
#> The following object is masked from 'package:utils':
#>
#> str
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
packageVersion("rtables")
#> [1] '0.6.13'
adsl <- ex_adsl
adae <- ex_adae |>
mutate(TRTEMFL = "Y") |>
mutate(TRTEMFL = factor(TRTEMFL))
adae2 <- adae[0, ]
my_layout <- function(top_level_section_div = TRUE){
if (top_level_section_div) {
lyt_part1 <- basic_table(
top_level_section_div = " ",
show_colcounts = TRUE,
colcount_format = "N=xx"
)
} else {
lyt_part1 <- basic_table(
show_colcounts = TRUE,
colcount_format = "N=xx"
)}
lyt_part2 <- lyt_part1 |>
split_cols_by("ARM") |>
analyze("TRTEMFL") %>%
split_rows_by("AEBODSYS",
split_label = "System Organ Class",
split_fun = trim_levels_in_group("AEDECOD"),
label_pos = "topleft",
section_div = c(" "),
nested = FALSE
) %>%
summarize_row_groups("AEBODSYS") %>%
analyze("AEDECOD") %>%
append_topleft(" Preferred Term, n (%)")
lyt_part2
}
lyt_1 <- my_layout(top_level_section_div = FALSE)
lyt_2 <- my_layout(top_level_section_div = TRUE)
# a non-zero rows dataset can be used in both layouts
build_table(lyt_1, adae, adsl)
#> System Organ Class A: Drug X B: Placebo C: Combination
#> Preferred Term, n (%) N=134 N=134 N=132
#> —————————————————————————————————————————————————————————————————————
#> Y 609 622 703
#> cl A.1 132 (98.5%) 130 (97.0%) 160 (121.2%)
#> dcd A.1.1.1.1 64 62 88
#> dcd A.1.1.1.2 68 68 72
#>
#> cl B.1 56 (41.8%) 60 (44.8%) 62 (47.0%)
#> dcd B.1.1.1.1 56 60 62
#>
#> cl B.2 129 (96.3%) 138 (103.0%) 143 (108.3%)
#> dcd B.2.1.2.1 65 62 66
#> dcd B.2.2.3.1 64 76 77
#>
#> cl C.1 55 (41.0%) 63 (47.0%) 64 (48.5%)
#> dcd C.1.1.1.3 55 63 64
#>
#> cl C.2 48 (35.8%) 53 (39.6%) 65 (49.2%)
#> dcd C.2.1.2.1 48 53 65
#>
#> cl D.1 127 (94.8%) 106 (79.1%) 135 (102.3%)
#> dcd D.1.1.1.1 61 51 71
#> dcd D.1.1.4.2 66 55 64
#>
#> cl D.2 62 (46.3%) 72 (53.7%) 74 (56.1%)
#> dcd D.2.1.5.3 62 72 74
build_table(lyt_2, adae, adsl)
#> System Organ Class A: Drug X B: Placebo C: Combination
#> Preferred Term, n (%) N=134 N=134 N=132
#> —————————————————————————————————————————————————————————————————————
#> Y 609 622 703
#>
#> cl A.1 132 (98.5%) 130 (97.0%) 160 (121.2%)
#> dcd A.1.1.1.1 64 62 88
#> dcd A.1.1.1.2 68 68 72
#>
#> cl B.1 56 (41.8%) 60 (44.8%) 62 (47.0%)
#> dcd B.1.1.1.1 56 60 62
#>
#> cl B.2 129 (96.3%) 138 (103.0%) 143 (108.3%)
#> dcd B.2.1.2.1 65 62 66
#> dcd B.2.2.3.1 64 76 77
#>
#> cl C.1 55 (41.0%) 63 (47.0%) 64 (48.5%)
#> dcd C.1.1.1.3 55 63 64
#>
#> cl C.2 48 (35.8%) 53 (39.6%) 65 (49.2%)
#> dcd C.2.1.2.1 48 53 65
#>
#> cl D.1 127 (94.8%) 106 (79.1%) 135 (102.3%)
#> dcd D.1.1.1.1 61 51 71
#> dcd D.1.1.4.2 66 55 64
#>
#> cl D.2 62 (46.3%) 72 (53.7%) 74 (56.1%)
#> dcd D.2.1.5.3 62 72 74
# no issue with a zero row input dataset for layout without top_level_section_div
build_table(lyt_1, adae2, adsl)
#> System Organ Class A: Drug X B: Placebo C: Combination
#> Preferred Term, n (%) N=134 N=134 N=132
#> —————————————————————————————————————————————————————————————————
#> Y 0 0 0
# issue with a zero row input dataset for layout with top_level_section_div
build_table(lyt_2, adae2, adsl)
#> Error in ret$sect_div_from_path[[nrow(ret)]] <- path: attempt to select less than one element in OneIndex
Created on 2026-03-17 with reprex v2.1.1
Following reprex illustrates the failure to use build_table using a zero row input dataframe and a layout that includes option top_level_section_div = " ".
Created on 2026-03-17 with reprex v2.1.1