Attach a preset_spec to a tabular_spec, carrying page-geometry
knobs (paper, orientation, margins, body font_size + family, h-rule
policy, decimal metric, typography defaults). The engine consults
the per-spec preset first when computing the per-page row budget,
decimal-aligned column widths, and the chrome that the backend
renders around the body grid.
Arguments
- .spec
The
tabular_specto attach the preset to.<tabular_spec>: required. Dot-prefixed so R's partial argument matching cannot accidentally bind a knob name in...to the spec slot.- ...
Named preset knobs. Any subset of the preset knobs the
preset_specclass carries. Knob values are validated against the class's enum / length / type rules; bad values raisetabular_error_input. Unknown knob names raisetabular_error_inputwith the recognised set listed.Recognised knobs:
font_size— body point size.<numeric(1)>.font_family— body font family.<character | character(1)>. Default"mono". Three accepted shapes:Generic family —
"mono"(default),"serif","sans"(CSS aliases"monospace"/"sans-serif"also recognised). The resolver expands to a per-backend chain that leads with the Linux-installed Liberation face (Posit Workbench / Domino / Citrix / RStudio Server), then the Microsoft Office face (Courier New / Times New Roman / Arial) for desktop Win / Mac consumers, then TeX Gyre for LaTeX compile, then the CSS generic for HTML. Liberation Mono / Serif / Sans are metric-compatible with Courier New / TNR / Arial, so layout, line breaks, and decimal alignment hold across every render context. The mono default matches the dominant submission-TFL convention where deterministic glyph widths driven (%)cell alignment.Named alias —
"Times","Times New Roman","Arial","Helvetica","Courier","Courier New". These PostScript-era names alias to the appropriate generic family (Times -> serif, Arial / Helvetica -> sans, Courier -> mono) and emit the same expanded chain. Honours the user's intent ("I want Times-like rendering") on every OS instead of hard-erroring on a Linux server with no TNR installed.Named font —
"Inter","JetBrains Mono","Source Serif Pro", sponsor-specific face, etc. Emitted verbatim with no fallback fabricated. The consuming app (browser, xelatex, Word, LibreOffice) resolves the name against its own font matcher. RTF and DOCX fall back to the consuming app's substitution table when the name is missing; xelatex hard-errors at compile time; HTML browsers fall through to the browser's default font (not necessarily class-matched).Explicit stack —
c("Inter", "Helvetica", "sans"). User owns the chain. Returned verbatim — alias lookup is bypassed, soc("Times", "Times")honours the exact name with no chain expansion (escape hatch for users who genuinely want exact-name semantics).
Note: Adobe Source Pro is no longer the default lead. Source Pro is not pre-installed on production Linux servers, so leading with it walks through 2-3 missing names before resolving. Users who installed Source Pro can opt in via the explicit-stack form (
c("Source Serif Pro", "serif")).What you see in Word's font dropdown vs. what renders. When you open a tabular-generated
.rtfin Word on macOS or Windows, the font dropdown displays the file's requested face —"Liberation Mono"by default (the Linux-server-installed face). The rendered text on screen is whatever Word's\\*\\faltsubstitution resolved to — typically Courier New on macOS / Windows. This is correct: Liberation Mono and Courier New are metric-compatible by design, so the rendered layout (line breaks, decimal alignment, page breaks) is identical regardless of which face Word actually used to render. The same\\*\\faltsubstitution model applies to serif (Liberation Serif -> Times New Roman) and sans (Liberation Sans -> Arial).How to force Office names as the primary. If reviewers will be confused by seeing
"Liberation Mono"in the Word font dropdown (cosmetic concern; doesn't affect rendering), pass an explicit length>1 stack with the Office name first. The resolver returns the vector verbatim — no alias lookup, no chain expansion — so the RTF file then names the Office face as primary and your chosen alternate as\\*\\falt:This is the canonical escape hatch for authors who know their consumer audience is Mac / Windows Word users and want the dropdown to show the Office face directly.
orientation— page orientation.<character(1)>. One of"landscape"(default),"portrait".paper_size— paper key.<character(1)>. One of"letter"(default),"a4".margins— page margins in inches.<numeric(1) | numeric(4)>. Length 1 = all four sides; length 4 = top, right, bottom, left.pagehead,pagefoot— per-page header / footer band content.<list>. Each band is a named list with slots fromleft/center/right; every other slot name is rejected. Each slot acceptsNULL(omit), a character scalar, a character vector (multi-row content), or aninline_ast. Emptylist()(the default) -> no band emitted.Single-row form (scalar slots):
pagehead = list( left = "Protocol: ABC-123", center = "Draft", right = "Page {page} of {npages}" )Multi-row form (vector slots, index-aligned):
pagehead = list( left = c("Protocol: ABC-123", "Analysis Set: Safety"), right = "Page {page} of {npages}" # scalar -> body-edge row )Growth direction. Vector index 1 = body edge; index N = far from body.
pageheadrows stack upward away from the table (the row closest to the table is index 1).pagefootrows stack downward away from the table (the row closest to the table is index 1). Shorter slots pad with""at the FAR end (high index), so a scalar slot naturally lands on the body-edge row.Token vocabulary — substituted into slot text:
Token Phase Expansion {page}backend current page number (field code) {npages}backend total page count (field code) {program}engine calling script's base name {program_path}engine calling script's full path {datetime}engine DDMMMYYYY HH:MM:SSUTC (render time){program},{program_path}, and{datetime}resolve once per render (atas_grid()/emit());{page}and{npages}resolve per page (filled in by Word / xelatex / the browser's print engine at view time). The program tokens walk a 5-mode detection chain — RStudio API,source()frame, Rscript / R CMD BATCH commandArgs (covers Domino + Linux batch + CI), knitr current_input, fallback"<interactive>".rules— the single border vocabulary (replaces the oldbordersknob). String sugar"booktabs"(default, the clinical baseline),"grid","frame","none"; a singlebrdr()broadcast to every active rule; or a named list keyed by the nine rule names (toprule,midrule,bottomrule,spanrule,rowrule,footnoterule,leftrule,rightrule,colrule) — unlisted rules keep their default, and the bare string"none"drops one.rules = list(rowrule = brdr())reproduces the oldhlines = "all".bottomrulevsfootnoterule. These are mutually exclusive: exactly one rule sits at the data -> footnote boundary. The default isbottomrule(the table's bottom edge);footnoterule(a table-width rule opening the footnote section) is OFF by default. As a distinct footnote-section rule,footnoteruleis drawn only by the paginated backends — RTF, LaTeX / PDF, and DOCX. The HTML backend is continuous (non-paginated) and has no separate footnote section, so it folds both into one rule: whichever ofbottomrule/footnoteruleis active becomes the table's bottom edge (bottomrulewins when both are set). Settingfootnoteruletherefore still draws a closing rule on HTML — rendered as thebottomrule.spacing— region-keyed blank-line control. A named list keyed bytitle/body/subgroup/footnote, each a named numericc(above = , below = )(footnote:aboveonly). Default is the one blank line above and below the title block. Two adjoining region-sides that target the same physical gap resolve to the MAX (never the sum), so a gap is never accidentally doubled.stripe— zebra body-row fills. A single colour (applied to even rows) or a namedc(odd = , even = );NULL(default) is off.indent_size— row-label indent width, in monospace- space units.<integer(1)>. Default2L. Each indent level adds this many space-widths of left padding to the cell.0Ldisables the indent prefix entirely. Backends with native padding-left semantics (HTML / LaTeX / RTF / DOCX / PDF) emit this as cell padding so wrapped continuation lines align with the indented baseline; Markdown carries the literal space-prefix. Block alignment for the title / footnote / header / subgroup / body surfaces is set via thealignmentnamed-list knob (alignment = list(title_halign = "left", ...)), not a scalar knob; blank-line spacing is set viaspacing(above).na_text— global NA fallback.<character(1)>.decimal_metrics— decimal-padding metric.<character(1)>."afm"(default) measures glyphs with the bundled Core font metrics, so decimal columns align width-exact in proportional fonts (to within one padding space of rounding; exact in Courier)."chars"pads by character count — exact in monospaced faces only. Markdown output always pads by character count, the correct geometry for a text medium.decimal_markers— missing-value tokens recognised bycol_spec(align = "decimal").<character>. Defaultc("NR", "NE", "NC", "ND", "BLQ"). A cell whose trimmed value is one of these is treated as a non-numeric marker: it is shown and right-aligned in the column rather than parsed as a number, and a marker appearing inside a compound (e.g. the upper bound of14.3 (11.2, NR)) is preserved and slot-aligned. Excludes"-","NA", and"INF"/"-INF"by default:"-"collides with range separators,"NA"is handled byna_text, and infinities are real values. Set tocharacter(0)to disable marker handling.width_mode— table-level column-sizing policy. Mirrors Word's Table Layout menu.<character(1)>. One of:"content"(default) — Each column auto-sized tomax(body, header). The table doesn't fill the page. Word's "Auto-fit Contents"."window"— Auto-sized columns expand to share the residual page width equally. Pinned and percent columns keep their pins. Word's "Auto-fit Window"."fixed"— Only explicit per-column widths drive the layout. Auto-sized columns collapse to a minimum sliver. Word's "Fixed Column Width".
Interaction: Pair with
col_spec(width = ...)pins to drive the layout under"window"/"fixed". Under"content", pins still take priority over auto columns.HTML backend.
width_modedrives paper backends (LaTeX / RTF / PDF / DOCX) only. HTML is unconditionally responsive — the table always fills its parent and columns wrap when the viewport narrows, regardless ofwidth_mode. Per-column widths (col_spec(width)) emit verbatim into the HTML colgroup per the gt convention.whitespace— how significant ASCII spaces in labels and cells render.<character(1)>. One of:"preserve"(default) — leading, trailing, and interior runs of 2+ spaces become the backend non-breaking token ( /~/\~; DOCX preserves viaxml:space), so a hand-built indent likecol_spec(label = " Placebo")renders verbatim across every backend. A single interior space stays breakable, so cells still wrap."collapse"— leave the backend's native run-folding in place (HTML / md / LaTeX collapse runs to one space).
Note: never affects
col_spec(align = "decimal")padding, which uses U+00A0 and is preserved unconditionally.footnote_markers— the glyph scheme forfootnote()markers, which the engine allocates once in reading order.<character(1)>. One of:"letters"(default) —a,b, …,z,aa,ab, … (bijective base-26)."numbers"—1,2,3, …"symbols"— Lamport's sequence*,†,‡,§,¶,‖, then doubled (**,††, …) once it spills past the sixth.
Interaction: a note's anchor is fixed by
footnote(); its scheme (this knob) and label (footnote_label) are resolved from the active preset at render, so flipping either re-letters every marker at once.footnote_label— block-line template for afootnote()marker.<character(1)>. Default"{m}"; the{m}token is replaced by the allocated marker, so"[{m}]"prints[a]ahead of the note text on the footnote line.cell_padding— cell padding in points, CSS shorthand of length 1 / 2 / 4 (all|vertical horizontal|top right bottom left), parsed by the same length rule asmargins.<numeric>: default c(0, 5.4)(vertical 0, horizontal 5.4pt). The single source of truth for both auto column-width measurement (left + right) and every backend's cell margin, so measured and rendered widths agree.Interaction: A body per-side padding override (
preset(padding = list(body = ...))orstyle(.at = cells_body(), padding = ...)) takes precedence at both measurement and render.Note: DOCX and LaTeX render left / right exactly; RTF (
\\trgaphis one symmetric gap) renders the average, so the total width still matches but the two sides look equal.
- .template
A
preset_specto bulk-apply before....<preset_spec | NULL>: default NULL. When supplied, every knob the template has set away from its factory default feeds in as the base layer; user-supplied...knobs then merge on top. List-valued knobs (rules,fonts,colors,padding,alignment) shallow-merge per key; scalars replace. Use this to layer a house-stylepreset_speconto a chain without restating its knobs.- .style
A
style_template()to layer onto the cascade.<style_template | NULL>: default NULL. When supplied, every layer the template has accumulated viastyle()is replayed in order at engine time, after the per-specstyle()layers on.spec. Use this to attach a sponsor's reusable house style to a chain without restating every per-region rule.- .reset
Discard the spec's existing preset before applying
....<logical(1)>: default FALSE. WhenTRUE, the spec's priorpreset_spec(if any) is dropped and...knobs are merged onto freshpreset_spec()defaults. With no knobs, the per-spec preset is cleared back to NULL (the spec falls through toset_preset()orpreset_spec()defaults).
Value
The updated tabular_spec. Continue chaining with
paginate(), style(), then render via emit() (or
resolve without I/O via as_grid()).
Details
Per-spec, chained. preset() is the per-spec override — a
verb that returns a modified spec, composable on the pipe alongside
cols() / headers() / paginate(). Use it when a single
table needs a one-off geometry (e.g. landscape A4 for one wide
efficacy summary inside a portfolio of portrait letter tables).
Merge, not replace. A second preset() call merges its scalar
knobs onto the spec's existing preset; unspecified knobs keep
their prior value. The five named-list knobs (alignment /
rules / fonts / colors / padding) lower to style_layer
records on preset@style via .preset_args_to_layers()
(internal) and append in call order; layer order is precedence
within the engine cascade, so a later preset() call's lowered
attribute wins over an earlier one at the cell. Pass .reset = TRUE
to discard the existing knobs and start from preset_spec()
defaults. preset(.spec, .reset = TRUE) with no knobs clears the
per-spec override entirely (the spec then falls through to
set_preset() or preset_spec() defaults at render time).
Direct preset_spec() calls bypass lowering. The five
named-list knobs are no longer slots on the preset_spec S7
class — they exist only as preset() / set_preset() arguments
that lower into @style. preset_spec(rules = list(...))
(and analogous direct calls) raise "unused argument". Wrap such
calls in tabular(...) |> preset(...) so the lowering helper
fires and the layers land on @style.
Cascade with set_preset(). The engine resolves the active
preset in this order: (1) the spec's per-call preset (this verb),
(2) the session default attached via set_preset(),
(3) preset_spec() factory defaults. The first non-NULL layer
wins; layers are not field-merged across the cascade.
See also
Session-scope partners: set_preset(), get_preset().
Render-geometry consumer: paginate() derives the per-page
row budget from the active preset's paper, orientation, margins,
and font size.
Sibling build verbs: cols() / col_spec(),
headers(), sort_rows(), style().
Examples
# ---- Example 1: Landscape A4 for a wide efficacy table ----
#
# BOR table where the four-arm column block fits portrait letter
# with a smaller body font, but the sponsor wants A4 landscape at
# 8pt for visual breathing room. `preset()` attaches the geometry;
# `paginate()` reads it later to size the per-page row budget.
bor_levels <- c(
"CR", "PR", "SD", "NON-CR/NON-PD", "PD", "NE", "MISSING",
"ORR (CR + PR)", "CBR (CR + PR + SD)",
"DCR (CR + PR + SD + NON-CR/NON-PD)", "95% CI (Clopper-Pearson)"
)
eff <- cdisc_eff_resp
eff$stat_label <- factor(eff$stat_label, levels = bor_levels)
ne <- stats::setNames(cdisc_eff_n$n, cdisc_eff_n$arm_short)
tabular(
eff,
titles = c(
"Table 14.2.1",
"Best Overall Response and Response Rates",
"Efficacy Evaluable Population"
),
footnotes = "Response per RECIST 1.1, investigator assessment."
) |>
cols(
stat_label = col_spec(label = "Response"),
row_type = col_spec(visible = FALSE),
groupid = col_spec(visible = FALSE),
group_label = col_spec(visible = FALSE),
placebo = col_spec(label = "Placebo\nN={ne['placebo']}"),
drug_50 = col_spec(label = "Drug 50\nN={ne['drug_50']}"),
drug_100 = col_spec(label = "Drug 100\nN={ne['drug_100']}")
) |>
sort_rows(by = c("groupid", "stat_label")) |>
preset(
orientation = "landscape",
paper_size = "a4",
font_size = 8
) |>
paginate()
Table 14.2.1
Best Overall Response and Response Rates
Efficacy Evaluable Population
Response Placebo
N=86 Drug 50
N=84 Drug 100
N=84 CR 1 (1.2) 1 (1.2) 1 (1.2) PR 1 (1.2) 0 0 SD 1 (1.2) 0 0 NON-CR/NON-PD 0 0 1 (1.2) PD 0 0 1 (1.2) NE 0 1 (1.2) 0 MISSING 83 (96.5) 82 (97.6) 81 (96.4) ORR (CR + PR) 2 (2.3) 1 (1.2) 1 (1.2) 95% CI (Clopper-Pearson) (0.3, 8.1) (0.0, 6.5) (0.0, 6.5) CBR (CR + PR + SD) 3 (3.5) 1 (1.2) 1 (1.2) 95% CI (Clopper-Pearson) (0.7, 9.9) (0.0, 6.5) (0.0, 6.5) DCR (CR + PR + SD + NON-CR/NON-PD) 3 (3.5) 1 (1.2) 2 (2.4) 95% CI (Clopper-Pearson) (0.7, 9.9) (0.0, 6.5) (0.3, 8.3)
Response per RECIST 1.1, investigator assessment.
# ---- Example 2: Per-spec override with per-page chrome ----
#
# The submission session sets a portrait letter 9pt default (typical
# safety-table geometry). One particular AE table needs landscape
# for a long PT label band; the per-spec `preset()` overrides only
# orientation. The same per-spec call wires the canonical
# per-page header band (protocol on the left, page X of Y on the
# right) and a footer band that auto-resolves the calling
# script's name and the current render timestamp via the
# `{program}` and `{datetime}` tokens.
set_preset(font_size = 9, paper_size = "letter")
n <- stats::setNames(cdisc_saf_n$n, cdisc_saf_n$arm_short)
tabular(
cdisc_saf_aesocpt,
titles = c(
"Table 14.3.1",
"Adverse Events by System Organ Class and Preferred Term",
"Safety Population"
),
footnotes = "Subjects are counted once per SOC and once per PT."
) |>
cols(
label = col_spec(label = "SOC / PT", indent = "indent_level"),
soc = col_spec(usage = "group", visible = FALSE,
group_display = "column_repeat"),
row_type = col_spec(visible = FALSE),
soc_n = col_spec(visible = FALSE),
n_total = col_spec(visible = FALSE),
placebo = col_spec(label = "Placebo\nN={n['placebo']}"),
drug_50 = col_spec(label = "Drug 50\nN={n['drug_50']}"),
drug_100 = col_spec(label = "Drug 100\nN={n['drug_100']}"),
Total = col_spec(label = "Total\nN={n['Total']}")
) |>
headers("Treatment Group" = c("placebo", "drug_50", "drug_100", "Total")) |>
sort_rows(by = c("soc_n", "n_total"), descending = c(TRUE, TRUE)) |>
preset(
orientation = "landscape",
pagehead = list(
left = "Protocol: ABC-123",
right = "Page {page} of {npages}"
),
pagefoot = list(
left = "{program}",
right = "{datetime}"
)
) |>
paginate(keep_together = "soc")
Protocol: ABC-123
Page 1 of 3
Table 14.3.1
Adverse Events by System Organ Class and Preferred Term
Safety Population
Treatment Group SOC / PT Placebo
N=86 Drug 50
N=96 Drug 100
N=72 Total
N=254 TOTAL SUBJECTS WITH AN EVENT 52 (60.5) 81 (84.4) 66 (91.7) 199 (78.3) SKIN AND SUBCUTANEOUS TISSUE DISORDERS 19 (22.1) 36 (37.5) 35 (48.6) 90 (35.4) PRURITUS 8 (9.3) 21 (21.9) 25 (34.7) 54 (21.3) ERYTHEMA 8 (9.3) 14 (14.6) 14 (19.4) 36 (14.2) RASH 5 (5.8) 13 (13.5) 8 (11.1) 26 (10.2) HYPERHIDROSIS 2 (2.3) 4 (4.2) 8 (11.1) 14 (5.5) SKIN IRRITATION 3 (3.5) 6 (6.2) 5 (6.9) 14 (5.5) GENERAL DISORDERS AND ADMINISTRATION SITE CONDITIONS 15 (17.4) 36 (37.5) 30 (41.7) 81 (31.9) APPLICATION SITE PRURITUS 6 (7.0) 23 (24.0) 21 (29.2) 50 (19.7) APPLICATION SITE ERYTHEMA 3 (3.5) 13 (13.5) 14 (19.4) 30 (11.8) APPLICATION SITE DERMATITIS 5 (5.8) 9 (9.4) 7 (9.7) 21 (8.3) APPLICATION SITE IRRITATION 3 (3.5) 9 (9.4) 9 (12.5) 21 (8.3) APPLICATION SITE VESICLES 1 (1.2) 5 (5.2) 5 (6.9) 11 (4.3) GASTROINTESTINAL DISORDERS 13 (15.1) 12 (12.5) 17 (23.6) 42 (16.5) DIARRHOEA 9 (10.5) 5 (5.2) 3 (4.2) 17 (6.7) VOMITING 3 (3.5) 4 (4.2) 6 (8.3) 13 (5.1) NAUSEA 3 (3.5) 3 (3.1) 6 (8.3) 12 (4.7) ABDOMINAL PAIN 1 (1.2) 3 (3.1) 1 (1.4) 5 (2.0) SALIVARY HYPERSECRETION 0 (0.0) 0 (0.0) 4 (5.6) 4 (1.6) NERVOUS SYSTEM DISORDERS 6 (7.0) 18 (18.8) 17 (23.6) 41 (16.1) DIZZINESS 2 (2.3) 9 (9.4) 10 (13.9) 21 (8.3) HEADACHE 3 (3.5) 3 (3.1) 5 (6.9) 11 (4.3) SYNCOPE 0 (0.0) 5 (5.2) 2 (2.8) 7 (2.8) SOMNOLENCE 2 (2.3) 3 (3.1) 1 (1.4) 6 (2.4) TRANSIENT ISCHAEMIC ATTACK 0 (0.0) 2 (2.1) 1 (1.4) 3 (1.2) CARDIAC DISORDERS 7 (8.1) 12 (12.5) 14 (19.4) 33 (13.0) SINUS BRADYCARDIA 2 (2.3) 7 (7.3) 8 (11.1) 17 (6.7) MYOCARDIAL INFARCTION 4 (4.7) 2 (2.1) 4 (5.6) 10 (3.9) ATRIAL FIBRILLATION 1 (1.2) 2 (2.1) 2 (2.8) 5 (2.0) SUPRAVENTRICULAR EXTRASYSTOLES 1 (1.2) 1 (1.0) 1 (1.4) 3 (1.2) VENTRICULAR EXTRASYSTOLES 0 (0.0) 2 (2.1) 1 (1.4) 3 (1.2) INFECTIONS AND INFESTATIONS 12 (14.0) 6 (6.2) 11 (15.3) 29 (11.4) NASOPHARYNGITIS 2 (2.3) 4 (4.2) 6 (8.3) 12 (4.7) UPPER RESPIRATORY TRACT INFECTION 6 (7.0) 1 (1.0) 3 (4.2) 10 (3.9) INFLUENZA 1 (1.2) 1 (1.0) 1 (1.4) 3 (1.2) URINARY TRACT INFECTION 2 (2.3) 0 (0.0) 1 (1.4) 3 (1.2) CYSTITIS 1 (1.2) 0 (0.0) 1 (1.4) 2 (0.8) RESPIRATORY, THORACIC AND MEDIASTINAL DISORDERS 5 (5.8) 8 (8.3) 9 (12.5) 22 (8.7) COUGH 1 (1.2) 5 (5.2) 5 (6.9) 11 (4.3) NASAL CONGESTION 3 (3.5) 1 (1.0) 3 (4.2) 7 (2.8) DYSPNOEA 1 (1.2) 1 (1.0) 1 (1.4) 3 (1.2) EPISTAXIS 0 (0.0) 1 (1.0) 2 (2.8) 3 (1.2) PHARYNGOLARYNGEAL PAIN 0 (0.0) 1 (1.0) 1 (1.4) 2 (0.8) PSYCHIATRIC DISORDERS 7 (8.1) 9 (9.4) 3 (4.2) 19 (7.5) CONFUSIONAL STATE 2 (2.3) 3 (3.1) 1 (1.4) 6 (2.4) AGITATION 2 (2.3) 3 (3.1) 0 (0.0) 5 (2.0) INSOMNIA 2 (2.3) 0 (0.0) 2 (2.8) 4 (1.6) ANXIETY 0 (0.0) 3 (3.1) 0 (0.0) 3 (1.2) DELUSION 1 (1.2) 0 (0.0) 1 (1.4) 2 (0.8) MUSCULOSKELETAL AND CONNECTIVE TISSUE DISORDERS 3 (3.5) 6 (6.2) 5 (6.9) 14 (5.5) BACK PAIN 1 (1.2) 1 (1.0) 3 (4.2) 5 (2.0) ARTHRALGIA 1 (1.2) 2 (2.1) 1 (1.4) 4 (1.6) SHOULDER PAIN 1 (1.2) 2 (2.1) 0 (0.0) 3 (1.2) MUSCLE SPASMS 0 (0.0) 1 (1.0) 1 (1.4) 2 (0.8) ARTHRITIS 0 (0.0) 0 (0.0) 1 (1.4) 1 (0.4) INVESTIGATIONS 5 (5.8) 4 (4.2) 3 (4.2) 12 (4.7) ELECTROCARDIOGRAM ST SEGMENT DEPRESSION 4 (4.7) 1 (1.0) 0 (0.0) 5 (2.0) ELECTROCARDIOGRAM T WAVE INVERSION 2 (2.3) 1 (1.0) 1 (1.4) 4 (1.6) BLOOD GLUCOSE INCREASED 0 (0.0) 1 (1.0) 1 (1.4) 2 (0.8) ELECTROCARDIOGRAM T WAVE AMPLITUDE DECREASED 1 (1.2) 1 (1.0) 0 (0.0) 2 (0.8) BIOPSY 0 (0.0) 0 (0.0) 1 (1.4) 1 (0.4)
Subjects are counted once per SOC and once per PT.
# Reset the session default so subsequent examples / R sessions
# are not affected.
set_preset(.reset = TRUE)