diff --git a/main/404.html b/main/404.html index 73498fe..6f6dcee 100644 --- a/main/404.html +++ b/main/404.html @@ -1,5 +1,4 @@ - - + @@ -55,7 +54,13 @@
  • Non-CRAN unit test report
  • - +
    + + @@ -49,57 +81,69 @@
    -

    Our Pledge

    +

    Our Pledge +

    In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.

    -

    Our Standards

    +

    Our Standards +

    Examples of behavior that contributes to creating a positive environment include:

    -
    + +
    -

    Our Responsibilities

    +

    Our Responsibilities +

    Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.

    Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.

    -

    Scope

    +

    Scope +

    This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.

    -

    Enforcement

    +

    Enforcement +

    Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at support@github.com. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.

    Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project’s leadership.

    -

    Attribution

    +

    Attribution +

    This Code of Conduct is adapted from the Contributor Covenant, version 1.4, available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html

    For answers to common questions about this code of conduct, see https://www.contributor-covenant.org/faq

    + + - + + - + + diff --git a/main/CONTRIBUTING.html b/main/CONTRIBUTING.html index b48c6c5..5712532 100644 --- a/main/CONTRIBUTING.html +++ b/main/CONTRIBUTING.html @@ -1,5 +1,20 @@ - -Contributing to {rtables} • rtables.officer + + + + + + +Contributing to {rtables} • rtables.officer + + + + + + + + + + Skip to contents @@ -15,27 +30,44 @@ + + @@ -50,18 +82,24 @@

    We welcome contributions big and small to the ongoing development of the {rtables} package. For most, the best way to contribute to the package is by filing issues for feature requests or bugs that you have encountered. For those who are interested in contributing code to the package, contributions can be made by working on current issues and opening pull requests with code changes. Any help that you are able to provide is greatly appreciated!

    Contributions to this project are released to the public under the project’s open source license.

    -
    -

    Filing Issues

    +
    +
    +

    Filing Issues +

    Issues are used to establish a prioritized timeline and track development progress within the package. If there is a new feature that you feel would be enhance the experience of package users, please open a Feature Request issue. If you notice a bug in the existing code, please file a Bug Fix issue with a description of the bug and a reprex (reproducible example). Other types of issues (questions, typos you’ve noticed, improvements to documentation, etc.) can be filed as well. Click here to file a new issue, and here to see the list of current issues. Please utilize labels wherever possible when creating issues for organization purposes and to narrow down the scope of the work required.

    -
    +
    +
    -

    Creating Pull Requests

    +

    Creating Pull Requests +

    Development of the {rtables} package relies on an Issue → Branch → PR → Code Review → Merge pipeline facilitated through GitHub. If you are a more experienced programmer interested in contributing to the package code, please begin by filing an issue describing the changes you would like to make. It may be the case that your idea has already been implemented in some way, and the package maintainers can help to determine whether the feature is necessary before you begin development. Whether you are opening an issue or a pull request, the more detailed your description, the easier it will be for package maintainers to help you! To make code changes in the package, please follow the following process.

    -

    Pull Request Process

    +

    Pull Request Process +

    The {rtables} package is part of the NEST project and utilizes staged.dependencies to ensure to simplify the development process and track upstream and downstream package dependencies. We highly recommend installing and using this package when developing within {rtables}.

    -

    1. Create a branch

    +

    1. Create a branch +

    In order to work on a new pull request, please first create a branch off of main upon which you can work and commit changes. To comply with staged.dependencies standards, {rtables} uses the following branch naming convention:

    issue#_description_of_issue@target_merge_branch

    For example, 443_refactor_splits@main. In most cases, the target merge branch is the base (main) branch.

    @@ -69,58 +107,69 @@

    1. Create a branchclick here.

    -

    2. Code

    +

    2. Code +

    Work within the {rtables} package to apply your code changes. Avoid combining issues on a single branch - ideally, each branch should be associated with a single issue and be prefixed by the issue number.

    For information on the basics of the {rtables} package, please read the package vignettes, which are available here.

    For advanced development work within {rtables}, consider reading through the {rtables} Developer Guide. The Developer Guide can be accessed from the {rtables} site navigation bar, and is listed here for your convenience:

    - +
    +
    Code style +

    The {rtables} package follows the tidyverse style guide so please adhere to these guidelines in your submitted code. After making changes to a file within the package, you can apply the package styler automatically and check for lint by running the following two lines of code while within the file:

    styler:::style_active_file()
     lintr:::addin_lint()
    -
    Documentation
    +
    Documentation +

    Package documentation uses roxygen2. If your contribution requires updates to documentation, ensure that the roxygen comments are updated within the source code file. After updating roxygen documentation, run devtools::document() to update the accompanying .Rd files (do not update these files by hand!).

    -
    Tests
    +
    Tests +

    To ensure high code coverage, we create tests using the testthat package. In most cases, changes to package code necessitate the addition of one or more tests to ensure that any added features are working as expected and no existing features were broken.

    -
    NEWS
    +
    NEWS +

    After making updates to the package, please add a descriptive entry to the NEWS file that reflects your changes. See the tidyverse style guide for guidelines on creating a NEWS entry.

    -

    3. Make a Pull Request

    +

    3. Make a Pull Request +

    Once the previous two steps are complete, you can create a pull request. Indicate in the description which issue is addressed in the pull request, and again utilize labels to help reviewers identify the category of the changes contained within the pull request.

    Once your pull request has been created, a series of checks will be automatically triggered, including R CMD check, tests/code coverage, auto-documentation, and more. All checks must be passing in order to eventually merge your pull request, and further changes may be required in order to resolve the status of these checks. All pull requests must also be reviewed and approved by at least one of the package maintainers before they can be merged. A review will be automatically requested from several {rtables} maintainers upon creating your pull request. When a maintainer reviews your pull request, please try to address the comments in short order - the {rtables} package is updated on a regular basis and leaving a pull request open too long is likely to result in merge conflicts which create more work for the developer.

    -

    Code of Conduct

    +

    Code of Conduct +

    Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.

    + + - + + - + + diff --git a/main/ISSUE_TEMPLATE.html b/main/ISSUE_TEMPLATE.html index b46fb0c..77f8a2f 100644 --- a/main/ISSUE_TEMPLATE.html +++ b/main/ISSUE_TEMPLATE.html @@ -1,5 +1,20 @@ - -Reporting an Issue with rtables • rtables.officer + + + + + + +Reporting an Issue with rtables • rtables.officer + + + + + + + + + + Skip to contents @@ -15,27 +30,44 @@ + + @@ -52,24 +84,27 @@

    Please briefly describe your problem and, when relevant, the output you expect. Please also provide the output of utils::sessionInfo() or devtools::session_info() at the end of your post.

    If at all possible, please include a minimal, reproducible example. The rtables team will be much more likely to resolve your issue if they are able to reproduce it themselves locally.

    Please delete this preamble after you have read it.

    -

    your brief description of the problem

    +
    +

    your brief description of the problem

     library(rtables)
     
     # your reproducible example here
    - + + - + + - + + diff --git a/main/LICENSE-text.html b/main/LICENSE-text.html index 3eb7dac..c5627d2 100644 --- a/main/LICENSE-text.html +++ b/main/LICENSE-text.html @@ -1,5 +1,20 @@ - -License • rtables.officer + + + + + + +License • rtables.officer + + + + + + + + + + Skip to contents @@ -15,27 +30,44 @@ + + @@ -289,17 +321,19 @@ limitations under the License. - + + - + + - + + diff --git a/main/articles/index.html b/main/articles/index.html index f26a870..b9da763 100644 --- a/main/articles/index.html +++ b/main/articles/index.html @@ -1,5 +1,20 @@ - -Articles • rtables.officer + + + + + + +Articles • rtables.officer + + + + + + + + + + Skip to contents @@ -15,27 +30,44 @@ + + @@ -49,20 +81,25 @@

    Getting Started

    -
    Introduction to {rtables}
    +
    +
    Introduction to {rtables}
    -
    - + +
    + + + - + + - + + diff --git a/main/articles/rtables.officer.html b/main/articles/rtables.officer.html index 90d356d..c0b8006 100644 --- a/main/articles/rtables.officer.html +++ b/main/articles/rtables.officer.html @@ -1,5 +1,4 @@ - - + @@ -54,7 +53,13 @@
  • Non-CRAN unit test report
  • - +
    + + @@ -48,7 +80,8 @@

    Authors

    -
    + +

    Citation

    @@ -94,17 +128,19 @@

    Citation

    + + - + + - + + diff --git a/main/index.html b/main/index.html index 4f98a41..fb283a7 100644 --- a/main/index.html +++ b/main/index.html @@ -1,5 +1,4 @@ - - + @@ -57,7 +56,13 @@
  • Non-CRAN unit test report
  • - +
    + + @@ -47,24 +79,30 @@
    -

    rtables.officer 0.0.1.9008

    +

    rtables.officer 0.0.1.9008 +

    -

    New Features

    -
    +

    New Features +

    + +
    + + - + + - + + diff --git a/main/reference/export_as_docx.html b/main/reference/export_as_docx.html index 0b274cc..af9c9f6 100644 --- a/main/reference/export_as_docx.html +++ b/main/reference/export_as_docx.html @@ -1,9 +1,26 @@ - -Export as word document — export_as_docx • rtables.officer + + + + + +Export as word document — export_as_docx • rtables.officer + + + + + + + +the officer package."> + + + + + Skip to contents @@ -19,27 +36,44 @@ + + @@ -58,7 +92,8 @@
    -

    Usage

    +

    Usage +

    export_as_docx(
       tt,
       file,
    @@ -81,79 +116,98 @@ 

    Usage

    -

    Arguments

    +

    Arguments +

    -
    tt
    +
    +
    tt +

    (TableTree or related class)
    a TableTree object representing a populated table.

    -
    file
    +
    file +

    (string)
    string that indicates the final file output. Must have .docx extension.

    -
    doc_metadata
    +
    doc_metadata +

    (list of strings)
    any value that can be used as metadata by ?officer::set_doc_properties. Important text values are title, subject, creator, and description, while created is a date object.

    -
    titles_as_header
    +
    titles_as_header +

    (flag)
    defaults to TRUE for tt_to_flextable(), so the table is self-contained as it makes additional header rows for formatters::main_title() string and formatters::subtitles() character vector (one per element). FALSE is suggested for export_as_docx(). This adds titles and subtitles as a text paragraph above the table. The same style is applied.

    -
    footers_as_text
    +
    footers_as_text +

    (flag)
    defaults to FALSE for tt_to_flextable(), so the table is self-contained with the flextable definition of footnotes. TRUE is used for export_as_docx() to add the footers as a new paragraph after the table. The same style is applied, but with a smaller font.

    -
    template_file
    +
    template_file +

    (string)
    template file that officer will use as a starting point for the final document. Document attaches the table and uses the defaults defined in the template file.

    -
    section_properties
    +
    section_properties +

    (officer::prop_section)
    an officer::prop_section() object which sets margins and page size. Defaults to section_properties_default().

    -
    ...
    +
    ... +

    (any)
    additional arguments passed to tt_to_flextable().

    -
    page_size
    +
    page_size +

    (character(1)) page size. Can be "letter" or "A4". Defaults to "letter".

    -
    orientation
    +
    orientation +

    (character(1)) page orientation. Can be "portrait" or "landscape". Defaults to "portrait".

    -
    + +
    -

    Functions

    +

    Functions +

    -
    + +
    -

    Note

    +

    Note +

    export_as_docx() has few customization options available. If you require specific formats and details, we suggest that you use tt_to_flextable() prior to export_as_docx. Only the titles_as_header and footer_as_text parameters must be re-specified if the table is changed first using tt_to_flextable().

    -

    See also

    +

    See also +

    -

    Examples

    +

    Examples +

    lyt <- basic_table() %>%
       split_cols_by("ARM") %>%
       analyze(c("AGE", "BMRKR2", "COUNTRY"))
    @@ -170,17 +224,19 @@ 

    Examples

    + +
    - + + - + + diff --git a/main/reference/index.html b/main/reference/index.html index d817fe2..dc3c70c 100644 --- a/main/reference/index.html +++ b/main/reference/index.html @@ -1,5 +1,20 @@ - -Package index • rtables.officer + + + + + + +Package index • rtables.officer + + + + + + + + + + Skip to contents @@ -15,27 +30,44 @@ + + @@ -46,40 +78,48 @@
    -

    Output Functions

    +

    Output Functions +

    These functions create ascii or html representations of the table

    -
    +
    + - + + + +

    rtables.officer is a part of the NEST and pharmaverse.

    -
    - + + - + + diff --git a/main/reference/rtables.officer-package.html b/main/reference/rtables.officer-package.html index 4d08a98..540d795 100644 --- a/main/reference/rtables.officer-package.html +++ b/main/reference/rtables.officer-package.html @@ -1,7 +1,24 @@ - -rtables.officer: Reporting Tables — rtables.officer-package • rtables.officer + + + + + + +rtables.officer: Reporting Tables — rtables.officer-package • rtables.officer + + + + + + + + + + + + Skip to contents @@ -17,27 +34,44 @@ + + @@ -56,34 +90,48 @@
    -

    Author

    +

    Author +

    Maintainer: Joe Zhu joe.zhu@roche.com

    -

    Authors:

    + + + +

    rtables.officer is a part of the NEST and pharmaverse.

    -
    - + + - + + diff --git a/main/reference/tt_to_flextable.html b/main/reference/tt_to_flextable.html index 7da1920..37ee84f 100644 --- a/main/reference/tt_to_flextable.html +++ b/main/reference/tt_to_flextable.html @@ -1,9 +1,27 @@ - -Create a flextable from an rtables table — tt_to_flextable • rtables.officer + + + + + +Create a flextable from an rtables table — tt_to_flextable • rtables.officer + + + + + + + +theme_docx_default() will produce a .docx-friendly table."> + + + + + + Skip to contents @@ -19,27 +37,44 @@ + + @@ -58,7 +93,8 @@
    -

    Usage

    +

    Usage +

    tt_to_flextable(
       tt,
       theme = theme_docx_default(),
    @@ -102,154 +138,185 @@ 

    Usage

    -

    Arguments

    +

    Arguments +

    -
    tt
    +
    +
    tt +

    (TableTree or related class)
    a TableTree object representing a populated table.

    -
    theme
    +
    theme +

    (function or NULL)
    A theme function that is designed internally as a function of a flextable object to change its layout and style. If NULL, it will produce a table similar to rtables default. Defaults to theme_docx_default() that is a classic Word output. See details for more information.

    -
    border
    +
    border +

    (flextable::fp_border())
    border style. Defaults to flextable::fp_border_default(width = 0.5).

    -
    indent_size
    +
    indent_size +

    (numeric(1))
    if NULL, the default indent size of the table (see formatters::matrix_form() indent_size, default is 2) is used. To work with docx, any size is multiplied by 1 mm (2.83 pt) by default.

    -
    titles_as_header
    +
    titles_as_header +

    (flag)
    defaults to TRUE for tt_to_flextable(), so the table is self-contained as it makes additional header rows for formatters::main_title() string and formatters::subtitles() character vector (one per element). FALSE is suggested for export_as_docx(). This adds titles and subtitles as a text paragraph above the table. The same style is applied.

    -
    bold_titles
    +
    bold_titles +

    (flag or integer)
    defaults to TRUE for tt_to_flextable(), so the titles are bold. If it is one or more integers, those lines will be bold.

    -
    footers_as_text
    +
    footers_as_text +

    (flag)
    defaults to FALSE for tt_to_flextable(), so the table is self-contained with the flextable definition of footnotes. TRUE is used for export_as_docx() to add the footers as a new paragraph after the table. The same style is applied, but with a smaller font.

    -
    counts_in_newline
    +
    counts_in_newline +

    (flag)
    defaults to FALSE. In rtables text printing (formatters::toString()), the column counts, i.e. (N=xx), are always on a new line. For docx exports it could be necessary to print it on the same line.

    -
    paginate
    +
    paginate +

    (flag)
    when exporting .docx documents using export_as_docx, we suggest relying on the Microsoft Word pagination system. If TRUE, this option splits tt into different "pages" as multiple flextables. Cooperation between the two mechanisms is not guaranteed. Defaults to FALSE.

    -
    fontspec
    +
    fontspec +

    (font_spec)
    a font_spec object specifying the font information to use for calculating string widths and heights, as returned by font_spec().

    -
    lpp
    +
    lpp +

    (numeric(1))
    maximum lines per page including (re)printed header and context rows.

    -
    cpp
    +
    cpp +

    (numeric(1) or NULL)
    width (in characters) of the pages for horizontal pagination. NA (the default) indicates cpp should be inferred from the page size; NULL indicates no horizontal pagination should be done regardless of page size.

    -
    ...
    +
    ... +

    (any)
    additional parameters to be passed to the pagination function. See rtables::paginate_table() for further details.

    -
    colwidths
    +
    colwidths +

    (numeric)
    column widths for the resulting flextable(s). If NULL, the column widths estimated with formatters::propose_column_widths() will be used. When exporting into .docx these values are normalized to represent a fraction of the total_page_width. If these are specified, autofit_to_page is set to FALSE.

    -
    tf_wrap
    +
    tf_wrap +

    (flag)
    whether the text for title, subtitles, and footnotes should be wrapped.

    -
    max_width
    +
    max_width +

    (integer(1), string or NULL)
    width that title and footer (including footnotes) materials should be word-wrapped to. If NULL, it is set to the current print width of the session (getOption("width")). If set to "auto", the width of the table (plus any table inset) is used. Parameter is ignored if tf_wrap = FALSE.

    -
    total_page_height
    +
    total_page_height +

    (numeric(1))
    total page height (in inches) for the resulting flextable(s). Used only to estimate number of lines per page (lpp) when paginate = TRUE. Defaults to 10.

    -
    total_page_width
    +
    total_page_width +

    (numeric(1))
    total page width (in inches) for the resulting flextable(s). Any values added for column widths is normalized by the total page width. Defaults to 10. If autofit_to_page = TRUE, this value is automatically set to the allowed page width.

    -
    autofit_to_page
    +
    autofit_to_page +

    (flag)
    defaults to TRUE. If TRUE, the column widths are automatically adjusted to fit the total page width. If FALSE, the colwidths are used as an indicative proportion of total_page_width. See flextable::set_table_properties(layout) for more details.

    -
    font
    +
    font +

    (string)
    defaults to "Arial". If the font is not available, flextable default is used. Please consider consulting the family column from systemfonts::system_fonts().

    -
    font_size
    +
    font_size +

    (integer(1))
    font size. Defaults to 9.

    -
    cell_margins
    +
    cell_margins +

    (numeric(1) or numeric(4))
    a numeric or a vector of four numbers indicating c("left", "right", "top", "bottom"). It defaults to 0 for top and bottom, and to 0.19 mm in word pt for left and right.

    -
    bold
    +
    bold +

    (character)
    parts of the table text that should be in bold. Can be any combination of c("header", "content_rows", "label_rows", "top_left"). The first one renders all column names bold (not topleft content). The second and third option use formatters::make_row_df() to render content or/and label rows as bold.

    -
    bold_manual
    +
    bold_manual +

    (named list or NULL)
    list of index lists. See example for needed structure. Accepted groupings/names are c("header", "body").

    -
    remove_internal_borders
    +
    remove_internal_borders +

    (character)
    defaults to "label_rows". Remove internal borders between rows. Currently there are no other options and can be turned off by providing any character value.

    -
    mm
    +
    mm +

    (numeric(1))
    the value in mm to transform to pt.

    -
    + +
    -

    Value

    +

    Value +

    A flextable object.

    -

    Details

    +

    Details +

    Themes can also be extended when you need only a minor change from a default style. You can either add your own theme to the theme call (e.g. c(theme_docx_default(), my_theme)) or create a new theme like shown in the examples. Please pay attention to the parameters' inputs as they are relevant @@ -260,26 +327,34 @@

    Detailstheme_docx_default for an example on own to retrieve these values and how to use them.

    -

    Functions

    +

    Functions +

    -
    • theme_docx_default(): Main theme function for export_as_docx().

    • +
        +
      • theme_docx_default(): Main theme function for export_as_docx().

      • theme_html_default(): Theme function for html outputs.

      • word_mm_to_pt(): Padding helper functions to transform mm to pt.

      • -
    + +
    -

    Note

    +

    Note +

    Currently cpp, tf_wrap, and max_width are only used in pagination and do not yet have a clear cooperation with colwidths and autofit_to_page. at the moment it is suggested to use the cpp parameter family cautiously. If issues arise, please communicate with the maintainers or raise an issue.

    -

    Examples

    +

    Examples +

    analysisfun <- function(x, ...) {
       in_rows(
         row1 = 5,
    @@ -300,9 +375,79 @@ 

    Examples # rtables style tt_to_flextable(tbl, theme = NULL) -

    Title says Whaaaat

    Oh, ok.

    A: Drug X

    B: Placebo

    C: Combination

    row1 {1}

    5

    5

    5

    row2

    1, 2 {2}

    1, 2 {2}

    1, 2 {2}

    {1} - row 1 - row footnote

    {2} - row 2 - cell footnote

    ha HA! Footer!

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Title says Whaaaat

    Oh, ok.

    A: Drug X

    B: Placebo

    C: Combination

    row1 {1}

    5

    5

    5

    row2

    1, 2 {2}

    1, 2 {2}

    1, 2 {2}

    {1} - row 1 - row footnote

    {2} - row 2 - cell footnote

    ha HA! Footer!

    +
    + tt_to_flextable(tbl, theme = theme_docx_default(font_size = 6)) -

    Title says Whaaaat

    Oh, ok.

    A: Drug X

    B: Placebo

    C: Combination

    row1 {1}

    5

    5

    5

    row2

    1, 2 {2}

    1, 2 {2}

    1, 2 {2}

    {1} - row 1 - row footnote

    {2} - row 2 - cell footnote

    ha HA! Footer!

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Title says Whaaaat

    Oh, ok.

    A: Drug X

    B: Placebo

    C: Combination

    row1 {1}

    5

    5

    5

    row2

    1, 2 {2}

    1, 2 {2}

    1, 2 {2}

    {1} - row 1 - row footnote

    {2} - row 2 - cell footnote

    ha HA! Footer!

    +
    + # Example with multiple themes (only extending the docx default!) my_theme <- function(x, ...) { flextable::
    border_inner(x, part = "body", border = flextable::fp_border_default(width = 0.5)) @@ -325,7 +470,42 @@

    Examples border = flextable::fp_border_default(color = "pink", width = 2), theme = custom_theme ) -

    Title says Whaaaat

    Oh, ok.

    A: Drug X

    B: Placebo

    C: Combination

    row1 {1}

    5

    5

    5

    row2

    1, 2 {2}

    1, 2 {2}

    1, 2 {2}

    {1} - row 1 - row footnote

    {2} - row 2 - cell footnote

    ha HA! Footer!

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Title says Whaaaat

    Oh, ok.

    A: Drug X

    B: Placebo

    C: Combination

    row1 {1}

    5

    5

    5

    row2

    1, 2 {2}

    1, 2 {2}

    1, 2 {2}

    {1} - row 1 - row footnote

    {2} - row 2 - cell footnote

    ha HA! Footer!

    +
    + # Extending themes my_theme <- function(font_size = 6) { # here can pass additional arguments for default theme function(flx, ...) { @@ -346,17 +526,19 @@

    Examples

    + +
    - + + - + + diff --git a/main/search.json b/main/search.json index 739b5a8..7d5e727 100644 --- a/main/search.json +++ b/main/search.json @@ -1 +1 @@ -[{"path":[]},{"path":"https://insightsengineering.github.io/rtables.officer/CODE_OF_CONDUCT.html","id":"our-pledge","dir":"","previous_headings":"","what":"Our Pledge","title":"Contributor Covenant Code of Conduct","text":"interest fostering open welcoming environment, contributors maintainers pledge making participation project community harassment-free experience everyone, regardless age, body size, disability, ethnicity, sex characteristics, gender identity expression, level experience, education, socio-economic status, nationality, personal appearance, race, religion, sexual identity orientation.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/CODE_OF_CONDUCT.html","id":"our-standards","dir":"","previous_headings":"","what":"Our Standards","title":"Contributor Covenant Code of Conduct","text":"Examples behavior contributes creating positive environment include: Using welcoming inclusive language respectful differing viewpoints experiences Gracefully accepting constructive criticism Focusing best community Showing empathy towards community members Examples unacceptable behavior participants include: use sexualized language imagery unwelcome sexual attention advances Trolling, insulting/derogatory comments, personal political attacks Public private harassment Publishing others’ private information, physical electronic address, without explicit permission conduct reasonably considered inappropriate professional setting","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/CODE_OF_CONDUCT.html","id":"our-responsibilities","dir":"","previous_headings":"","what":"Our Responsibilities","title":"Contributor Covenant Code of Conduct","text":"Project maintainers responsible clarifying standards acceptable behavior expected take appropriate fair corrective action response instances unacceptable behavior. Project maintainers right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct, ban temporarily permanently contributor behaviors deem inappropriate, threatening, offensive, harmful.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/CODE_OF_CONDUCT.html","id":"scope","dir":"","previous_headings":"","what":"Scope","title":"Contributor Covenant Code of Conduct","text":"Code Conduct applies within project spaces public spaces individual representing project community. Examples representing project community include using official project e-mail address, posting via official social media account, acting appointed representative online offline event. Representation project may defined clarified project maintainers.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/CODE_OF_CONDUCT.html","id":"enforcement","dir":"","previous_headings":"","what":"Enforcement","title":"Contributor Covenant Code of Conduct","text":"Instances abusive, harassing, otherwise unacceptable behavior may reported contacting project team support@github.com. complaints reviewed investigated result response deemed necessary appropriate circumstances. project team obligated maintain confidentiality regard reporter incident. details specific enforcement policies may posted separately. Project maintainers follow enforce Code Conduct good faith may face temporary permanent repercussions determined members project’s leadership.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/CODE_OF_CONDUCT.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributor Covenant Code of Conduct","text":"Code Conduct adapted Contributor Covenant, version 1.4, available https://www.contributor-covenant.org/version/1/4/code--conduct.html answers common questions code conduct, see https://www.contributor-covenant.org/faq","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/CONTRIBUTING.html","id":null,"dir":"","previous_headings":"","what":"Contributing to {rtables}","title":"Contributing to {rtables}","text":"welcome contributions big small ongoing development {rtables} package. , best way contribute package filing issues feature requests bugs encountered. interested contributing code package, contributions can made working current issues opening pull requests code changes. help able provide greatly appreciated! Contributions project released public project’s open source license.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/CONTRIBUTING.html","id":"filing-issues","dir":"","previous_headings":"","what":"Filing Issues","title":"Contributing to {rtables}","text":"Issues used establish prioritized timeline track development progress within package. new feature feel enhance experience package users, please open Feature Request issue. notice bug existing code, please file Bug Fix issue description bug reprex (reproducible example). types issues (questions, typos ’ve noticed, improvements documentation, etc.) can filed well. Click file new issue, see list current issues. Please utilize labels wherever possible creating issues organization purposes narrow scope work required.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/CONTRIBUTING.html","id":"creating-pull-requests","dir":"","previous_headings":"","what":"Creating Pull Requests","title":"Contributing to {rtables}","text":"Development {rtables} package relies Issue → Branch → PR → Code Review → Merge pipeline facilitated GitHub. experienced programmer interested contributing package code, please begin filing issue describing changes like make. may case idea already implemented way, package maintainers can help determine whether feature necessary begin development. Whether opening issue pull request, detailed description, easier package maintainers help ! make code changes package, please follow following process.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/CONTRIBUTING.html","id":"pull-request-process","dir":"","previous_headings":"Creating Pull Requests","what":"Pull Request Process","title":"Contributing to {rtables}","text":"{rtables} package part NEST project utilizes staged.dependencies ensure simplify development process track upstream downstream package dependencies. highly recommend installing using package developing within {rtables}.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/CONTRIBUTING.html","id":"id_1-create-a-branch","dir":"","previous_headings":"Creating Pull Requests > Pull Request Process","what":"1. Create a branch","title":"Contributing to {rtables}","text":"order work new pull request, please first create branch main upon can work commit changes. comply staged.dependencies standards, {rtables} uses following branch naming convention: issue#_description_of_issue@target_merge_branch example, 443_refactor_splits@main. cases, target merge branch base (main) branch. cases, change {rtables} may first require upstream changes {formatters} package. Suppose branch 100_update_fmts@main {formatters} containing required upstream changes. branch created {rtables} named follows example: 443_refactor_splits@100_update_fmts@main. ensures correct branches checked running tests, etc. details staged.dependencies branch naming conventions, click .","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/CONTRIBUTING.html","id":"id_2-code","dir":"","previous_headings":"Creating Pull Requests > Pull Request Process","what":"2. Code","title":"Contributing to {rtables}","text":"Work within {rtables} package apply code changes. Avoid combining issues single branch - ideally, branch associated single issue prefixed issue number. information basics {rtables} package, please read package vignettes, available . advanced development work within {rtables}, consider reading {rtables} Developer Guide. Developer Guide can accessed {rtables} site navigation bar, listed convenience: Developer Guide: Split Machinery Developer Guide: Tabulation Developer Guide: Debugging {rtables} Beyond Developer Guide: Sparse Notes {rtables} Internals","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/CONTRIBUTING.html","id":"code-style","dir":"","previous_headings":"Creating Pull Requests > Pull Request Process > 2. Code","what":"Code style","title":"Contributing to {rtables}","text":"{rtables} package follows tidyverse style guide please adhere guidelines submitted code. making changes file within package, can apply package styler automatically check lint running following two lines code within file:","code":"styler:::style_active_file() lintr:::addin_lint()"},{"path":"https://insightsengineering.github.io/rtables.officer/CONTRIBUTING.html","id":"documentation","dir":"","previous_headings":"Creating Pull Requests > Pull Request Process > 2. Code","what":"Documentation","title":"Contributing to {rtables}","text":"Package documentation uses roxygen2. contribution requires updates documentation, ensure roxygen comments updated within source code file. updating roxygen documentation, run devtools::document() update accompanying .Rd files (update files hand!).","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/CONTRIBUTING.html","id":"tests","dir":"","previous_headings":"Creating Pull Requests > Pull Request Process > 2. Code","what":"Tests","title":"Contributing to {rtables}","text":"ensure high code coverage, create tests using testthat package. cases, changes package code necessitate addition one tests ensure added features working expected existing features broken.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/CONTRIBUTING.html","id":"news","dir":"","previous_headings":"Creating Pull Requests > Pull Request Process > 2. Code","what":"NEWS","title":"Contributing to {rtables}","text":"making updates package, please add descriptive entry NEWS file reflects changes. See tidyverse style guide guidelines creating NEWS entry.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/CONTRIBUTING.html","id":"id_3-make-a-pull-request","dir":"","previous_headings":"Creating Pull Requests > Pull Request Process","what":"3. Make a Pull Request","title":"Contributing to {rtables}","text":"previous two steps complete, can create pull request. Indicate description issue addressed pull request, utilize labels help reviewers identify category changes contained within pull request. pull request created, series checks automatically triggered, including R CMD check, tests/code coverage, auto-documentation, . checks must passing order eventually merge pull request, changes may required order resolve status checks. pull requests must also reviewed approved least one package maintainers can merged. review automatically requested several {rtables} maintainers upon creating pull request. maintainer reviews pull request, please try address comments short order - {rtables} package updated regular basis leaving pull request open long likely result merge conflicts create work developer.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/CONTRIBUTING.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"Contributing to {rtables}","text":"Please note project released Contributor Code Conduct. participating project agree abide terms.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/ISSUE_TEMPLATE.html","id":null,"dir":"","previous_headings":"","what":"Reporting an Issue with rtables","title":"Reporting an Issue with rtables","text":"use form ask question, ask assistance. Instead, ask Stackoverflow using nest-rtables tag. Questions function’s use closed without response. Please briefly describe problem , relevant, output expect. Please also provide output utils::sessionInfo() devtools::session_info() end post. possible, please include minimal, reproducible example. rtables team much likely resolve issue able reproduce locally. Please delete preamble read . brief description problem","code":"library(rtables) # your reproducible example here"},{"path":"https://insightsengineering.github.io/rtables.officer/articles/rtables.officer.html","id":"introduction","dir":"Articles","previous_headings":"","what":"Introduction","title":"Introduction to {rtables}","text":"rtables package provides framework create, tabulate, output tables R. design requirements rtables origin studying tables commonly used report analyses clinical trials; however, careful keep rtables general purpose toolkit. vignette, give short introduction rtables tabulating table. content vignette based following two resources: rtables useR 2020 presentation Gabriel Becker rtables - Framework Creating Complex Structured Reporting Tables Via Multi-Level Faceted Computations. packages used vignette rtables dplyr:","code":"library(rtables) library(dplyr)"},{"path":"https://insightsengineering.github.io/rtables.officer/articles/rtables.officer.html","id":"overview","dir":"Articles","previous_headings":"","what":"Overview","title":"Introduction to {rtables}","text":"build table using rtables two components required: layout constructed using rtables functions, data.frame unaggregated data. two elements combined build table object. Table objects contain information content structure table, well instructions information processed construct table. obtaining table object, formatted table can printed ASCII format, exported variety formats (.txt, .pdf, .docx, etc.).","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/articles/rtables.officer.html","id":"data","dir":"Articles","previous_headings":"","what":"Data","title":"Introduction to {rtables}","text":"data used vignette made using random number generators. data content relatively simple: one row per imaginary person one column per measurement: study arm, country origin, gender, handedness, age, weight. Note use factor variables level order represented row column order tabulate information df .","code":"n <- 400 set.seed(1) df <- tibble( arm = factor(sample(c(\"Arm A\", \"Arm B\"), n, replace = TRUE), levels = c(\"Arm A\", \"Arm B\")), country = factor(sample(c(\"CAN\", \"USA\"), n, replace = TRUE, prob = c(.55, .45)), levels = c(\"CAN\", \"USA\")), gender = factor(sample(c(\"Female\", \"Male\"), n, replace = TRUE), levels = c(\"Female\", \"Male\")), handed = factor(sample(c(\"Left\", \"Right\"), n, prob = c(.6, .4), replace = TRUE), levels = c(\"Left\", \"Right\")), age = rchisq(n, 30) + 10 ) %>% mutate( weight = 35 * rnorm(n, sd = .5) + ifelse(gender == \"Female\", 140, 180) ) head(df) # # A tibble: 6 × 6 # arm country gender handed age weight # # 1 Arm A USA Female Left 31.3 139. # 2 Arm B CAN Female Right 50.5 116. # 3 Arm A USA Male Right 32.4 186. # 4 Arm A USA Male Right 34.6 169. # 5 Arm B USA Female Right 43.0 160. # 6 Arm A USA Female Right 43.2 126."},{"path":"https://insightsengineering.github.io/rtables.officer/articles/rtables.officer.html","id":"building-a-table","dir":"Articles","previous_headings":"","what":"Building a Table","title":"Introduction to {rtables}","text":"aim vignette build following table step step:","code":"# Arm A Arm B # Female Male Female Male # (N=96) (N=105) (N=92) (N=107) # ———————————————————————————————————————————————————————————— # CAN 45 (46.9%) 64 (61.0%) 46 (50.0%) 62 (57.9%) # Left 32 (33.3%) 42 (40.0%) 26 (28.3%) 37 (34.6%) # mean 38.87 40.43 40.33 37.68 # Right 13 (13.5%) 22 (21.0%) 20 (21.7%) 25 (23.4%) # mean 36.64 40.19 40.16 40.65 # USA 51 (53.1%) 41 (39.0%) 46 (50.0%) 45 (42.1%) # Left 34 (35.4%) 19 (18.1%) 25 (27.2%) 25 (23.4%) # mean 40.36 39.68 39.21 40.07 # Right 17 (17.7%) 22 (21.0%) 21 (22.8%) 20 (18.7%) # mean 36.94 39.80 38.53 39.02"},{"path":"https://insightsengineering.github.io/rtables.officer/articles/rtables.officer.html","id":"quick-start","dir":"Articles","previous_headings":"","what":"Quick Start","title":"Introduction to {rtables}","text":"table can achieved via qtable() function. new tabulation rtables layout framework, can use convenience wrapper create many types two-way frequency tables. purpose qtable enable quick exploratory data analysis. See exploratory_analysis vignette details. code recreate table : qtable function arguments can see many key concepts underlying rtables layout framework. user needs define: variables used facets row /column space? variable used summary analysis? function used summary? table include marginal summaries? labels needed clarify table content? sections look translating questions set features part rtables layout framework. Now let’s take look building example table layout.","code":"qtable(df, row_vars = c(\"country\", \"handed\"), col_vars = c(\"arm\", \"gender\"), avar = \"age\", afun = mean, summarize_groups = TRUE, row_labels = \"mean\" ) # Arm A Arm B # Female Male Female Male # age - mean (N=96) (N=105) (N=92) (N=107) # —————————————————————————————————————————————————————————————— # CAN 45 (46.9%) 64 (61.0%) 46 (50.0%) 62 (57.9%) # Left 32 (33.3%) 42 (40.0%) 26 (28.3%) 37 (34.6%) # mean 38.87 40.43 40.33 37.68 # Right 13 (13.5%) 22 (21.0%) 20 (21.7%) 25 (23.4%) # mean 36.64 40.19 40.16 40.65 # USA 51 (53.1%) 41 (39.0%) 46 (50.0%) 45 (42.1%) # Left 34 (35.4%) 19 (18.1%) 25 (27.2%) 25 (23.4%) # mean 40.36 39.68 39.21 40.07 # Right 17 (17.7%) 22 (21.0%) 21 (22.8%) 20 (18.7%) # mean 36.94 39.80 38.53 39.02"},{"path":"https://insightsengineering.github.io/rtables.officer/articles/rtables.officer.html","id":"layout-instructions","dir":"Articles","previous_headings":"","what":"Layout Instructions","title":"Introduction to {rtables}","text":"rtables basic table defined 0 rows one column representing data. Analyzing variable one way adding row: code first described table assigned description variable lyt. built table using actual data build_table(). description table called table layout. basic_table() start every table layout contains information one column representing data. analyze() instruction adds layout age variable analyzed mean() analysis function result rounded 1 decimal place. Hence, layout “pre-data”, , ’s description build table get data. can look layout isolated: general layouting instructions summarized : basic_table() layout representing table zero rows one column row space: split_rows_by(), split_rows_by_multivar(), split_rows_by_cuts(), split_rows_by_cutfun(), split_rows_by_quartiles() column space: split_cols_by(), split_cols_by_multivar(), split_cols_by_cuts(), split_cols_by_cutfun(), split_cols_by_quartiles() Summarizing Groups: summarize_row_groups() Analyzing Variables: analyze(), analyze_colvars() Using functions, possible create wide variety tables show document.","code":"lyt <- basic_table() %>% analyze(\"age\", mean, format = \"xx.x\") tbl <- build_table(lyt, df) tbl # all obs # —————————————— # mean 39.4 lyt # A Pre-data Table Layout # # Column-Split Structure: # () # # Row-Split Structure: # age (** analysis **)"},{"path":"https://insightsengineering.github.io/rtables.officer/articles/rtables.officer.html","id":"adding-column-structure","dir":"Articles","previous_headings":"","what":"Adding Column Structure","title":"Introduction to {rtables}","text":"now add structure columns adding column split based factor variable arm: resulting table one column per factor level arm. data represented first column df[df$arm == \"ARM \", ]. Hence, split_cols_by() partitions data among columns default. Column splitting can done recursive/nested manner adding sequential split_cols_by() layout instruction. ’s also possible add non-nested split. splitting arm gender: first column represents data df df$arm == \"\" & df$gender == \"Female\" second column data df df$arm == \"\" & df$gender == \"Male\", . information column structure can found col_counts vignette.","code":"lyt <- basic_table() %>% split_cols_by(\"arm\") %>% analyze(\"age\", afun = mean, format = \"xx.x\") tbl <- build_table(lyt, df) tbl # Arm A Arm B # ———————————————————— # mean 39.5 39.4 lyt <- basic_table() %>% split_cols_by(\"arm\") %>% split_cols_by(\"gender\") %>% analyze(\"age\", afun = mean, format = \"xx.x\") tbl <- build_table(lyt, df) tbl # Arm A Arm B # Female Male Female Male # ———————————————————————————————————— # mean 38.8 40.1 39.6 39.2"},{"path":"https://insightsengineering.github.io/rtables.officer/articles/rtables.officer.html","id":"adding-row-structure","dir":"Articles","previous_headings":"","what":"Adding Row Structure","title":"Introduction to {rtables}","text":"far, created layouts analysis column splitting instructions, .e. analyze() split_cols_by(), respectively. resulted table multiple columns one data row. add row structure stratifying mean analysis country (.e. adding split row space): table data used derive first data cell (average age female Canadians Arm ) df$country == \"CAN\" & df$arm == \"Arm \" & df$gender == \"Female\". cell value can also calculated manually: Row structure can also used group table titled groups pages rendering. via ‘page splits’, declared via page_by = TRUE within call split_rows_by: go detail page-splits control page-group specific titles Title footer vignette. Note print render table without pagination, page_by splits currently rendered normal row splits. may change future releases.","code":"lyt <- basic_table() %>% split_cols_by(\"arm\") %>% split_cols_by(\"gender\") %>% split_rows_by(\"country\") %>% analyze(\"age\", afun = mean, format = \"xx.x\") tbl <- build_table(lyt, df) tbl # Arm A Arm B # Female Male Female Male # —————————————————————————————————————— # CAN # mean 38.2 40.3 40.3 38.9 # USA # mean 39.2 39.7 38.9 39.6 mean(df$age[df$country == \"CAN\" & df$arm == \"Arm A\" & df$gender == \"Female\"]) # [1] 38.22447 lyt <- basic_table() %>% split_cols_by(\"arm\") %>% split_cols_by(\"gender\") %>% split_rows_by(\"country\", page_by = TRUE) %>% split_rows_by(\"handed\") %>% analyze(\"age\", afun = mean, format = \"xx.x\") tbl <- build_table(lyt, df) cat(export_as_txt(tbl, page_type = \"letter\", page_break = \"\\n\\n~~~~~~ Page Break ~~~~~~\\n\\n\")) # # country: CAN # # ———————————————————————————————————————— # Arm A Arm B # Female Male Female Male # ———————————————————————————————————————— # Left # mean 38.9 40.4 40.3 37.7 # Right # mean 36.6 40.2 40.2 40.6 # # # ~~~~~~ Page Break ~~~~~~ # # # country: USA # # ———————————————————————————————————————— # Arm A Arm B # Female Male Female Male # ———————————————————————————————————————— # Left # mean 40.4 39.7 39.2 40.1 # Right # mean 36.9 39.8 38.5 39.0"},{"path":"https://insightsengineering.github.io/rtables.officer/articles/rtables.officer.html","id":"adding-group-information","dir":"Articles","previous_headings":"","what":"Adding Group Information","title":"Introduction to {rtables}","text":"adding row splits, get default label rows split level, example CAN USA table . Besides column space subsetting, now subsetted data cell. often useful defining row splitting display information row group. rtables referred content information, .e. mean() row 2 descendant CAN (visible via indenting, though table underlying tree structure importance vignette). order add content information turn CAN label row content row, summarize_row_groups() function required. default, count (nrows()) percentage data relative column associated data calculated: relative percentage average age female Canadians calculated follows: group percentages per row split sum 1 column. can split row space dividing country handedness: Next, add count percentage summary handedness within country:","code":"lyt <- basic_table() %>% split_cols_by(\"arm\") %>% split_cols_by(\"gender\") %>% split_rows_by(\"country\") %>% summarize_row_groups() %>% analyze(\"age\", afun = mean, format = \"xx.x\") tbl <- build_table(lyt, df) tbl # Arm A Arm B # Female Male Female Male # —————————————————————————————————————————————————————————— # CAN 45 (46.9%) 64 (61.0%) 46 (50.0%) 62 (57.9%) # mean 38.2 40.3 40.3 38.9 # USA 51 (53.1%) 41 (39.0%) 46 (50.0%) 45 (42.1%) # mean 39.2 39.7 38.9 39.6 df_cell <- subset(df, df$country == \"CAN\" & df$arm == \"Arm A\" & df$gender == \"Female\") df_col_1 <- subset(df, df$arm == \"Arm A\" & df$gender == \"Female\") c(count = nrow(df_cell), percentage = nrow(df_cell) / nrow(df_col_1)) # count percentage # 45.00000 0.46875 lyt <- basic_table() %>% split_cols_by(\"arm\") %>% split_cols_by(\"gender\") %>% split_rows_by(\"country\") %>% summarize_row_groups() %>% split_rows_by(\"handed\") %>% analyze(\"age\", afun = mean, format = \"xx.x\") tbl <- build_table(lyt, df) tbl # Arm A Arm B # Female Male Female Male # ———————————————————————————————————————————————————————————— # CAN 45 (46.9%) 64 (61.0%) 46 (50.0%) 62 (57.9%) # Left # mean 38.9 40.4 40.3 37.7 # Right # mean 36.6 40.2 40.2 40.6 # USA 51 (53.1%) 41 (39.0%) 46 (50.0%) 45 (42.1%) # Left # mean 40.4 39.7 39.2 40.1 # Right # mean 36.9 39.8 38.5 39.0 lyt <- basic_table() %>% split_cols_by(\"arm\") %>% split_cols_by(\"gender\") %>% split_rows_by(\"country\") %>% summarize_row_groups() %>% split_rows_by(\"handed\") %>% summarize_row_groups() %>% analyze(\"age\", afun = mean, format = \"xx.x\") tbl <- build_table(lyt, df) tbl # Arm A Arm B # Female Male Female Male # ———————————————————————————————————————————————————————————— # CAN 45 (46.9%) 64 (61.0%) 46 (50.0%) 62 (57.9%) # Left 32 (33.3%) 42 (40.0%) 26 (28.3%) 37 (34.6%) # mean 38.9 40.4 40.3 37.7 # Right 13 (13.5%) 22 (21.0%) 20 (21.7%) 25 (23.4%) # mean 36.6 40.2 40.2 40.6 # USA 51 (53.1%) 41 (39.0%) 46 (50.0%) 45 (42.1%) # Left 34 (35.4%) 19 (18.1%) 25 (27.2%) 25 (23.4%) # mean 40.4 39.7 39.2 40.1 # Right 17 (17.7%) 22 (21.0%) 21 (22.8%) 20 (18.7%) # mean 36.9 39.8 38.5 39.0"},{"path":"https://insightsengineering.github.io/rtables.officer/articles/rtables.officer.html","id":"comparing-with-other-tabulation-frameworks","dir":"Articles","previous_headings":"","what":"Comparing with Other Tabulation Frameworks","title":"Introduction to {rtables}","text":"number table frameworks available R, including: gt xtable tableone tables number reasons choose rtables (yet another tables R package): Output tables ASCII text files. Table rendering (ASCII, HTML, etc.) separate data model. Hence, one always access non-rounded/non-formatted numbers. Pagination horizontal vertical directions meet health authority submission requirements. Cell, row, column, table reference system. Titles, footers, referential footnotes. Path based access cell content useful automated content generation. depth comparisons various tabulation frameworks can found Overview table R packages chapter Tables Clinical Trials R book compiled R Consortium Tables Working Group.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/articles/rtables.officer.html","id":"summary","dir":"Articles","previous_headings":"","what":"Summary","title":"Introduction to {rtables}","text":"vignette learned: Every cell associated subset data - means much tabulation splitting/subsetting data. Tables can described pre-data using layouts. Tables form visualization data. vignettes rtables package provide detailed information rtables package. recommend continue tabulation_dplyr vignette compares information derived table vignette using dplyr.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Gabriel Becker. Contributor. Davide Garolini. Author. Emily de la Rua. Author. Abinaya Yogasekaram. Author. Joe Zhu. Author, maintainer. F. Hoffmann-La Roche AG. Copyright holder, funder.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Garolini D, de la Rua E, Yogasekaram , Zhu J (2024). rtables.officer: Reporting Tables. R package version 0.0.1.9008, https://insightsengineering.github.io/rtables.officer/, https://github.com/insightsengineering/rtables.officer.","code":"@Manual{, title = {rtables.officer: Reporting Tables}, author = {Davide Garolini and Emily {de la Rua} and Abinaya Yogasekaram and Joe Zhu}, year = {2024}, note = {R package version 0.0.1.9008, https://insightsengineering.github.io/rtables.officer/}, url = {https://github.com/insightsengineering/rtables.officer}, }"},{"path":[]},{"path":"https://insightsengineering.github.io/rtables.officer/index.html","id":"reporting-tables-with-r","dir":"","previous_headings":"","what":"Reporting Tables with R","title":"Reporting Tables","text":"rtables R package designed create display complex tables R. cells rtable may contain high-dimensional data structure can displayed cell-specific formatting instructions. Currently, rtables can outputted ascii html, pdf, well Power Point (via conversion flextable objects). rtf support development future release. rtables developed copy written F. Hoffmann-La Roche released open source Apache License Version 2. rtables development driven need create regulatory ready tables health authority review. key requirements undertaking listed : values need programmatically accessible non-rounded state cross-checking multiple values displayed within cell flexible tabulation framework flexible formatting (cell spans, rounding, alignment, etc.) multiple output formats (html, ascii, latex, pdf, xml) flexible pagination horizontal vertical directions distinguish name label data structure work CDISC standards title, footnotes, cell cell/row/column references rtables currently covers virtually requirements, advances remain active development.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"Reporting Tables","text":"rtables available CRAN can install latest released version : can install latest development version directly GitHub : Packaged releases (CRAN official CRAN releases) can found releases list. understand use package, please refer Introduction rtables article, provides multiple examples code implementation.","code":"install.packages(\"rtables\") # install.packages(\"pak\") pak::pak(\"insightsengineering/rtables\")"},{"path":[]},{"path":"https://insightsengineering.github.io/rtables.officer/index.html","id":"usage","dir":"","previous_headings":"","what":"Usage","title":"Reporting Tables","text":"first demonstrate demographic table-like example show creation complex table.","code":"library(rtables) lyt <- basic_table() %>% split_cols_by(\"ARM\") %>% analyze(c(\"AGE\", \"BMRKR1\", \"BMRKR2\"), function(x, ...) { if (is.numeric(x)) { in_rows( \"Mean (sd)\" = c(mean(x), sd(x)), \"Median\" = median(x), \"Min - Max\" = range(x), .formats = c(\"xx.xx (xx.xx)\", \"xx.xx\", \"xx.xx - xx.xx\") ) } else if (is.factor(x) || is.character(x)) { in_rows(.list = list_wrap_x(table)(x)) } else { stop(\"type not supported\") } }) build_table(lyt, ex_adsl) #> A: Drug X B: Placebo C: Combination #> ———————————————————————————————————————————————————————————— #> AGE #> Mean (sd) 33.77 (6.55) 35.43 (7.90) 35.43 (7.72) #> Median 33.00 35.00 35.00 #> Min - Max 21.00 - 50.00 21.00 - 62.00 20.00 - 69.00 #> BMRKR1 #> Mean (sd) 5.97 (3.55) 5.70 (3.31) 5.62 (3.49) #> Median 5.39 4.81 4.61 #> Min - Max 0.41 - 17.67 0.65 - 14.24 0.17 - 21.39 #> BMRKR2 #> LOW 50 45 40 #> MEDIUM 37 56 42 #> HIGH 47 33 50 library(rtables) library(dplyr) ## for simplicity grab non-sparse subset ADSL <- ex_adsl %>% filter(RACE %in% levels(RACE)[1:3]) biomarker_ave <- function(x, ...) { val <- if (length(x) > 0) round(mean(x), 2) else \"no data\" in_rows( \"Biomarker 1 (mean)\" = rcell(val) ) } basic_table(show_colcounts = TRUE) %>% split_cols_by(\"ARM\") %>% split_cols_by(\"BMRKR2\") %>% split_rows_by(\"RACE\", split_fun = trim_levels_in_group(\"SEX\")) %>% split_rows_by(\"SEX\") %>% summarize_row_groups() %>% analyze(\"BMRKR1\", biomarker_ave) %>% build_table(ADSL) #> A: Drug X B: Placebo C: Combination #> LOW MEDIUM HIGH LOW MEDIUM HIGH LOW MEDIUM HIGH #> (N=45) (N=35) (N=46) (N=42) (N=48) (N=31) (N=40) (N=39) (N=47) #> ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— #> ASIAN #> F 13 (28.9%) 9 (25.7%) 19 (41.3%) 9 (21.4%) 18 (37.5%) 9 (29.0%) 13 (32.5%) 9 (23.1%) 17 (36.2%) #> Biomarker 1 (mean) 5.23 6.17 5.38 5.64 5.55 4.33 5.46 5.48 5.19 #> M 8 (17.8%) 7 (20.0%) 10 (21.7%) 12 (28.6%) 10 (20.8%) 8 (25.8%) 5 (12.5%) 11 (28.2%) 16 (34.0%) #> Biomarker 1 (mean) 6.77 6.06 5.54 4.9 4.98 6.81 6.53 5.47 4.98 #> U 1 (2.2%) 1 (2.9%) 0 (0.0%) 0 (0.0%) 0 (0.0%) 1 (3.2%) 0 (0.0%) 1 (2.6%) 1 (2.1%) #> Biomarker 1 (mean) 4.68 7.7 no data no data no data 6.97 no data 11.93 9.01 #> BLACK OR AFRICAN AMERICAN #> F 6 (13.3%) 3 (8.6%) 9 (19.6%) 6 (14.3%) 8 (16.7%) 2 (6.5%) 7 (17.5%) 4 (10.3%) 3 (6.4%) #> Biomarker 1 (mean) 5.01 7.2 6.79 6.15 5.26 8.57 5.72 5.76 4.58 #> M 5 (11.1%) 5 (14.3%) 2 (4.3%) 3 (7.1%) 5 (10.4%) 4 (12.9%) 4 (10.0%) 5 (12.8%) 5 (10.6%) #> Biomarker 1 (mean) 6.92 5.82 11.66 4.46 6.14 8.47 6.16 5.25 4.83 #> U 0 (0.0%) 0 (0.0%) 0 (0.0%) 0 (0.0%) 0 (0.0%) 0 (0.0%) 1 (2.5%) 1 (2.6%) 0 (0.0%) #> Biomarker 1 (mean) no data no data no data no data no data no data 2.79 9.82 no data #> UNDIFFERENTIATED 1 (2.2%) 0 (0.0%) 0 (0.0%) 0 (0.0%) 0 (0.0%) 0 (0.0%) 2 (5.0%) 0 (0.0%) 0 (0.0%) #> Biomarker 1 (mean) 9.48 no data no data no data no data no data 6.46 no data no data #> WHITE #> F 6 (13.3%) 7 (20.0%) 4 (8.7%) 5 (11.9%) 6 (12.5%) 6 (19.4%) 6 (15.0%) 3 (7.7%) 2 (4.3%) #> Biomarker 1 (mean) 4.43 7.83 4.52 6.42 5.07 7.83 6.71 5.87 10.7 #> M 4 (8.9%) 3 (8.6%) 2 (4.3%) 6 (14.3%) 1 (2.1%) 1 (3.2%) 2 (5.0%) 5 (12.8%) 3 (6.4%) #> Biomarker 1 (mean) 5.81 7.23 1.39 4.72 4.58 12.87 2.3 5.1 5.98 #> U 1 (2.2%) 0 (0.0%) 0 (0.0%) 1 (2.4%) 0 (0.0%) 0 (0.0%) 0 (0.0%) 0 (0.0%) 0 (0.0%) #> Biomarker 1 (mean) 3.94 no data no data 3.77 no data no data no data no data no data"},{"path":"https://insightsengineering.github.io/rtables.officer/index.html","id":"acknowledgments","dir":"","previous_headings":"","what":"Acknowledgments","title":"Reporting Tables","text":"like thank everyone made rtables better project providing feedback improving examples & vignettes. following list contributors alphabetical: Maximo Carreras, Francois Collins, Saibah Chohan, Tadeusz Lewandowski, Nick Paszty, Nina Qi, Jana Stoilova, Heng Wang, Godwin Yung","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/index.html","id":"presentations","dir":"","previous_headings":"","what":"Presentations","title":"Reporting Tables","text":"Generating Tables, Listings, Graphs using NEST / cardinal [Video] BBS Session Regulatory Submissions Clinical Trials [Video] R Medicine Virtual Conference 2023 [Video] Advanced rtables Training 2023 [Part 1 Slides] [Part 2 Slides] R Pharma 2022 - Creating Submission-Quality Clinical Trial Reporting Tables R rtables [Slides] [Video] R Adoption Series - Reporting Table Creation R [Video] [Slides] Tables Clinical Trials R [Book] useR! 2020 - rtables Layouting Tabulation Framework [Video]","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/reference/export_as_docx.html","id":null,"dir":"Reference","previous_headings":"","what":"Export as word document — export_as_docx","title":"Export as word document — export_as_docx","text":"table, produce self-contained word document attach template word file (template_file). function based tt_to_flextable() transformer officer package.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/reference/export_as_docx.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Export as word document — export_as_docx","text":"","code":"export_as_docx( tt, file, doc_metadata = NULL, titles_as_header = FALSE, footers_as_text = TRUE, template_file = NULL, section_properties = section_properties_default(), ... ) section_properties_default( page_size = c(\"letter\", \"A4\"), orientation = c(\"portrait\", \"landscape\") ) margins_potrait() margins_landscape()"},{"path":"https://insightsengineering.github.io/rtables.officer/reference/export_as_docx.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Export as word document — export_as_docx","text":"tt (TableTree related class) TableTree object representing populated table. file (string) string indicates final file output. Must .docx extension. doc_metadata (list strings) value can used metadata ?officer::set_doc_properties. Important text values title, subject, creator, description, created date object. titles_as_header (flag) defaults TRUE tt_to_flextable(), table self-contained makes additional header rows formatters::main_title() string formatters::subtitles() character vector (one per element). FALSE suggested export_as_docx(). adds titles subtitles text paragraph table. style applied. footers_as_text (flag) defaults FALSE tt_to_flextable(), table self-contained flextable definition footnotes. TRUE used export_as_docx() add footers new paragraph table. style applied, smaller font. template_file (string) template file officer use starting point final document. Document attaches table uses defaults defined template file. section_properties (officer::prop_section) officer::prop_section() object sets margins page size. Defaults section_properties_default(). ... () additional arguments passed tt_to_flextable(). page_size (character(1)) page size. Can \"letter\" \"A4\". Defaults \"letter\". orientation (character(1)) page orientation. Can \"portrait\" \"landscape\". Defaults \"portrait\".","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/reference/export_as_docx.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Export as word document — export_as_docx","text":"section_properties_default(): Helper function defines standard portrait properties tables. margins_potrait(): Helper function defines standard portrait margins tables. margins_landscape(): Helper function defines standard landscape margins tables.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/reference/export_as_docx.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Export as word document — export_as_docx","text":"export_as_docx() customization options available. require specific formats details, suggest use tt_to_flextable() prior export_as_docx. titles_as_header footer_as_text parameters must re-specified table changed first using tt_to_flextable().","code":""},{"path":[]},{"path":"https://insightsengineering.github.io/rtables.officer/reference/export_as_docx.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Export as word document — export_as_docx","text":"","code":"lyt <- basic_table() %>% split_cols_by(\"ARM\") %>% analyze(c(\"AGE\", \"BMRKR2\", \"COUNTRY\")) tbl <- build_table(lyt, ex_adsl) # See how section_properties_portrait function is built for custom tf <- tempfile(fileext = \".docx\") export_as_docx(tbl, file = tf, section_properties = section_properties_default(orientation = \"landscape\") )"},{"path":"https://insightsengineering.github.io/rtables.officer/reference/rtables.officer-package.html","id":null,"dir":"Reference","previous_headings":"","what":"rtables.officer: Reporting Tables — rtables.officer-package","title":"rtables.officer: Reporting Tables — rtables.officer-package","text":"package dedicated convert `rtables` object tables use `pptx` `docx` files.","code":""},{"path":[]},{"path":"https://insightsengineering.github.io/rtables.officer/reference/rtables.officer-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"rtables.officer: Reporting Tables — rtables.officer-package","text":"Maintainer: Joe Zhu joe.zhu@roche.com Authors: Davide Garolini davide.garolini@roche.com Emily de la Rua emily.de_la_rua@contractors.roche.com Abinaya Yogasekaram abinaya.yogasekaram@contractors.roche.com contributors: Gabriel Becker gabembecker@gmail.com [contributor] F. Hoffmann-La Roche AG [copyright holder, funder]","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/reference/tt_to_flextable.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a flextable from an rtables table — tt_to_flextable","title":"Create a flextable from an rtables table — tt_to_flextable","text":"Principally used export (export_as_docx()), function produces flextable rtables table. theme = NULL, rtables-like style used. Otherwise, theme_docx_default() produce .docx-friendly table.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/reference/tt_to_flextable.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a flextable from an rtables table — tt_to_flextable","text":"","code":"tt_to_flextable( tt, theme = theme_docx_default(), border = flextable::fp_border_default(width = 0.5), indent_size = NULL, titles_as_header = TRUE, bold_titles = TRUE, footers_as_text = FALSE, counts_in_newline = FALSE, paginate = FALSE, fontspec = NULL, lpp = NULL, cpp = NULL, ..., colwidths = NULL, tf_wrap = !is.null(cpp), max_width = cpp, total_page_height = 10, total_page_width = 10, autofit_to_page = TRUE ) theme_docx_default( font = \"Arial\", font_size = 9, cell_margins = c(word_mm_to_pt(1.9), word_mm_to_pt(1.9), 0, 0), bold = c(\"header\", \"content_rows\", \"label_rows\", \"top_left\"), bold_manual = NULL, border = flextable::fp_border_default(width = 0.5) ) theme_html_default( font = \"Courier\", font_size = 9, cell_margins = 0.2, remove_internal_borders = \"label_rows\", border = flextable::fp_border_default(width = 1, color = \"black\") ) word_mm_to_pt(mm)"},{"path":"https://insightsengineering.github.io/rtables.officer/reference/tt_to_flextable.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a flextable from an rtables table — tt_to_flextable","text":"tt (TableTree related class) TableTree object representing populated table. theme (function NULL) theme function designed internally function flextable object change layout style. NULL, produce table similar rtables default. Defaults theme_docx_default() classic Word output. See details information. border (flextable::fp_border()) border style. Defaults flextable::fp_border_default(width = 0.5). indent_size (numeric(1)) NULL, default indent size table (see formatters::matrix_form() indent_size, default 2) used. work docx, size multiplied 1 mm (2.83 pt) default. titles_as_header (flag) defaults TRUE tt_to_flextable(), table self-contained makes additional header rows formatters::main_title() string formatters::subtitles() character vector (one per element). FALSE suggested export_as_docx(). adds titles subtitles text paragraph table. style applied. bold_titles (flag integer) defaults TRUE tt_to_flextable(), titles bold. one integers, lines bold. footers_as_text (flag) defaults FALSE tt_to_flextable(), table self-contained flextable definition footnotes. TRUE used export_as_docx() add footers new paragraph table. style applied, smaller font. counts_in_newline (flag) defaults FALSE. rtables text printing (formatters::toString()), column counts, .e. (N=xx), always new line. docx exports necessary print line. paginate (flag) exporting .docx documents using export_as_docx, suggest relying Microsoft Word pagination system. TRUE, option splits tt different \"pages\" multiple flextables. Cooperation two mechanisms guaranteed. Defaults FALSE. fontspec (font_spec) font_spec object specifying font information use calculating string widths heights, returned font_spec(). lpp (numeric(1)) maximum lines per page including (re)printed header context rows. cpp (numeric(1) NULL) width (characters) pages horizontal pagination. NA (default) indicates cpp inferred page size; NULL indicates horizontal pagination done regardless page size. ... () additional parameters passed pagination function. See rtables::paginate_table() details. colwidths (numeric) column widths resulting flextable(s). NULL, column widths estimated formatters::propose_column_widths() used. exporting .docx values normalized represent fraction total_page_width. specified, autofit_to_page set FALSE. tf_wrap (flag) whether text title, subtitles, footnotes wrapped. max_width (integer(1), string NULL) width title footer (including footnotes) materials word-wrapped . NULL, set current print width session (getOption(\"width\")). set \"auto\", width table (plus table inset) used. Parameter ignored tf_wrap = FALSE. total_page_height (numeric(1)) total page height (inches) resulting flextable(s). Used estimate number lines per page (lpp) paginate = TRUE. Defaults 10. total_page_width (numeric(1)) total page width (inches) resulting flextable(s). values added column widths normalized total page width. Defaults 10. autofit_to_page = TRUE, value automatically set allowed page width. autofit_to_page (flag) defaults TRUE. TRUE, column widths automatically adjusted fit total page width. FALSE, colwidths used indicative proportion total_page_width. See flextable::set_table_properties(layout) details. font (string) defaults \"Arial\". font available, flextable default used. Please consider consulting family column systemfonts::system_fonts(). font_size (integer(1)) font size. Defaults 9. cell_margins (numeric(1) numeric(4)) numeric vector four numbers indicating c(\"left\", \"right\", \"top\", \"bottom\"). defaults 0 top bottom, 0.19 mm word pt left right. bold (character) parts table text bold. Can combination c(\"header\", \"content_rows\", \"label_rows\", \"top_left\"). first one renders column names bold (topleft content). second third option use formatters::make_row_df() render content /label rows bold. bold_manual (named list NULL) list index lists. See example needed structure. Accepted groupings/names c(\"header\", \"body\"). remove_internal_borders (character) defaults \"label_rows\". Remove internal borders rows. Currently options can turned providing character value. mm (numeric(1)) value mm transform pt.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/reference/tt_to_flextable.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a flextable from an rtables table — tt_to_flextable","text":"flextable object.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/reference/tt_to_flextable.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Create a flextable from an rtables table — tt_to_flextable","text":"Themes can also extended need minor change default style. can either add theme theme call (e.g. c(theme_docx_default(), my_theme)) create new theme like shown examples. Please pay attention parameters' inputs relevant work properly. Indeed, possible use hidden values building theme (hence need ...). particular, tt_to_flextable sends following variable: tbl_row_class = rtables::make_row_df(tt)$node_class. ignored used theme. See theme_docx_default example retrieve values use .","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/reference/tt_to_flextable.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Create a flextable from an rtables table — tt_to_flextable","text":"theme_docx_default(): Main theme function export_as_docx(). theme_html_default(): Theme function html outputs. word_mm_to_pt(): Padding helper functions transform mm pt.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/reference/tt_to_flextable.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Create a flextable from an rtables table — tt_to_flextable","text":"Currently cpp, tf_wrap, max_width used pagination yet clear cooperation colwidths autofit_to_page. moment suggested use cpp parameter family cautiously. issues arise, please communicate maintainers raise issue.","code":""},{"path":[]},{"path":"https://insightsengineering.github.io/rtables.officer/reference/tt_to_flextable.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a flextable from an rtables table — tt_to_flextable","text":"Title says Whaaaat Oh, ok. : Drug X B: Placebo C: Combination row1 {1} 5 5 5 row2 1, 2 {2} 1, 2 {2} 1, 2 {2} {1} - row 1 - row footnote {2} - row 2 - cell footnote ha HA! Footer! Title says Whaaaat Oh, ok. : Drug X B: Placebo C: Combination row1 {1} 5 5 5 row2 1, 2 {2} 1, 2 {2} 1, 2 {2} {1} - row 1 - row footnote {2} - row 2 - cell footnote ha HA! Footer! Title says Whaaaat Oh, ok. : Drug X B: Placebo C: Combination row1 {1} 5 5 5 row2 1, 2 {2} 1, 2 {2} 1, 2 {2} {1} - row 1 - row footnote {2} - row 2 - cell footnote ha HA! Footer!","code":"analysisfun <- function(x, ...) { in_rows( row1 = 5, row2 = c(1, 2), .row_footnotes = list(row1 = \"row 1 - row footnote\"), .cell_footnotes = list(row2 = \"row 2 - cell footnote\") ) } lyt <- basic_table( title = \"Title says Whaaaat\", subtitles = \"Oh, ok.\", main_footer = \"ha HA! Footer!\" ) %>% split_cols_by(\"ARM\") %>% analyze(\"AGE\", afun = analysisfun) tbl <- build_table(lyt, ex_adsl) # rtables style tt_to_flextable(tbl, theme = NULL) .cl-883718e2{table-layout:auto;}.cl-88310f9c{font-family:'DejaVu Sans';font-size:11pt;font-weight:bold;font-style:normal;text-decoration:none;color:rgba(0, 0, 0, 1.00);background-color:transparent;}.cl-88310fa6{font-family:'DejaVu Sans';font-size:11pt;font-weight:normal;font-style:normal;text-decoration:none;color:rgba(0, 0, 0, 1.00);background-color:transparent;}.cl-88339eec{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:5pt;padding-top:5pt;padding-left:8.2pt;padding-right:5.4pt;line-height: 1;background-color:transparent;}.cl-88339ef6{margin:0;text-align:center;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:5pt;padding-top:5pt;padding-left:5pt;padding-right:5pt;line-height: 1;background-color:transparent;}.cl-88339f00{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:5pt;padding-top:5pt;padding-left:5.4pt;padding-right:5.4pt;line-height: 1;background-color:transparent;}.cl-88339f01{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:5pt;padding-top:5pt;padding-left:5pt;padding-right:5pt;line-height: 1;background-color:transparent;}.cl-8833ba76{background-color:rgba(255, 255, 255, 1.00);vertical-align: middle;border-bottom: 0 solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833ba80{background-color:rgba(255, 255, 255, 1.00);vertical-align: middle;border-bottom: 0 solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833ba81{background-color:rgba(255, 255, 255, 1.00);vertical-align: middle;border-bottom: 0 solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833ba8a{background-color:rgba(255, 255, 255, 1.00);vertical-align: middle;border-bottom: 0 solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833ba8b{background-color:rgba(255, 255, 255, 1.00);vertical-align: middle;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833ba8c{background-color:rgba(255, 255, 255, 1.00);vertical-align: middle;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833ba94{background-color:rgba(255, 255, 255, 1.00);vertical-align: middle;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833ba95{background-color:rgba(255, 255, 255, 1.00);vertical-align: middle;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833ba96{background-color:transparent;vertical-align: middle;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0.5pt solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833ba9e{background-color:transparent;vertical-align: middle;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0.5pt solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833ba9f{background-color:transparent;vertical-align: middle;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0.5pt solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833baa8{background-color:transparent;vertical-align: middle;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0.5pt solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833baa9{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833baaa{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833baab{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833bab2{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833bab3{background-color:transparent;vertical-align: middle;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833bab4{background-color:transparent;vertical-align: middle;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833babc{background-color:transparent;vertical-align: middle;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833babd{background-color:transparent;vertical-align: middle;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833bac6{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833bac7{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833bac8{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833bac9{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}Title says WhaaaatOh, ok. A: Drug XB: PlaceboC: Combinationrow1 {1}555row21, 2 {2}1, 2 {2}1, 2 {2}{1} - row 1 - row footnote{2} - row 2 - cell footnoteha HA! Footer! tt_to_flextable(tbl, theme = theme_docx_default(font_size = 6)) .cl-88770218{table-layout:auto;}.cl-88718824{font-family:'Arial';font-size:6pt;font-weight:bold;font-style:normal;text-decoration:none;color:rgba(0, 0, 0, 1.00);background-color:transparent;}.cl-8871882e{font-family:'Arial';font-size:6pt;font-weight:normal;font-style:normal;text-decoration:none;color:rgba(0, 0, 0, 1.00);background-color:transparent;}.cl-8871882f{font-family:'Arial';font-size:5pt;font-weight:normal;font-style:normal;text-decoration:none;color:rgba(0, 0, 0, 1.00);background-color:transparent;}.cl-8873cf12{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:0;padding-top:0;padding-left:8.2pt;padding-right:5.4pt;line-height: 1;background-color:transparent;}.cl-8873cf1c{margin:0;text-align:center;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:0;padding-top:0;padding-left:5pt;padding-right:5pt;line-height: 1;background-color:transparent;}.cl-8873cf26{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:0;padding-top:0;padding-left:5.4pt;padding-right:5.4pt;line-height: 1;background-color:transparent;}.cl-8873cf27{margin:0;text-align:center;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:0;padding-top:0;padding-left:5.4pt;padding-right:5.4pt;line-height: 1;background-color:transparent;}.cl-8873cf28{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:5pt;padding-top:5pt;padding-left:5pt;padding-right:5pt;line-height: 1;background-color:transparent;}.cl-8873cf30{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:5pt;padding-top:5pt;padding-left:5pt;padding-right:5pt;line-height: 1;background-color:transparent;}.cl-8873e880{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 0 solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e881{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 0 solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e882{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 0 solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e88a{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 0 solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e88b{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e88c{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e88d{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e894{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e895{background-color:transparent;vertical-align: top;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0.5pt solid rgba(102, 102, 102, 1.00);border-left: 0.5pt solid rgba(102, 102, 102, 1.00);border-right: 0.5pt solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e896{background-color:transparent;vertical-align: top;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0.5pt solid rgba(102, 102, 102, 1.00);border-left: 0.5pt solid rgba(102, 102, 102, 1.00);border-right: 0.5pt solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e89e{background-color:transparent;vertical-align: top;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0.5pt solid rgba(102, 102, 102, 1.00);border-left: 0.5pt solid rgba(102, 102, 102, 1.00);border-right: 0.5pt solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e89f{background-color:transparent;vertical-align: top;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0.5pt solid rgba(102, 102, 102, 1.00);border-left: 0.5pt solid rgba(102, 102, 102, 1.00);border-right: 0.5pt solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e8a0{background-color:transparent;vertical-align: top;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0.5pt solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e8a1{background-color:transparent;vertical-align: top;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e8a8{background-color:transparent;vertical-align: top;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e8a9{background-color:transparent;vertical-align: top;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0.5pt solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e8aa{background-color:transparent;vertical-align: top;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0.5pt solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e8ab{background-color:transparent;vertical-align: top;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e8ac{background-color:transparent;vertical-align: top;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e8b2{background-color:transparent;vertical-align: top;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0.5pt solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e8b3{background-color:transparent;vertical-align: top;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e8b4{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e8b5{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e8b6{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}Title says WhaaaatOh, ok. A: Drug XB: PlaceboC: Combinationrow1 {1}555row21, 2 {2}1, 2 {2}1, 2 {2}{1} - row 1 - row footnote{2} - row 2 - cell footnoteha HA! Footer! # Example with multiple themes (only extending the docx default!) my_theme <- function(x, ...) { flextable::border_inner(x, part = \"body\", border = flextable::fp_border_default(width = 0.5)) } flx <- tt_to_flextable(tbl, theme = c(theme_docx_default(), my_theme)) # Custom theme special_bold <- list( \"header\" = list(\"i\" = 1, \"j\" = c(1, 3)), \"body\" = list(\"i\" = c(1, 2), \"j\" = 1) ) custom_theme <- theme_docx_default( font_size = 10, font = \"Brush Script MT\", border = flextable::fp_border_default(color = \"pink\", width = 2), bold = NULL, bold_manual = special_bold ) tt_to_flextable(tbl, border = flextable::fp_border_default(color = \"pink\", width = 2), theme = custom_theme ) .cl-88b5d83a{table-layout:auto;}.cl-88b0497e{font-family:'Brush Script MT';font-size:10pt;font-weight:bold;font-style:normal;text-decoration:none;color:rgba(0, 0, 0, 1.00);background-color:transparent;}.cl-88b04988{font-family:'Brush Script MT';font-size:10pt;font-weight:normal;font-style:normal;text-decoration:none;color:rgba(0, 0, 0, 1.00);background-color:transparent;}.cl-88b04992{font-family:'Brush Script MT';font-size:9pt;font-weight:normal;font-style:normal;text-decoration:none;color:rgba(0, 0, 0, 1.00);background-color:transparent;}.cl-88b2924c{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:0;padding-top:0;padding-left:8.2pt;padding-right:5.4pt;line-height: 1;background-color:transparent;}.cl-88b29256{margin:0;text-align:center;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:0;padding-top:0;padding-left:5pt;padding-right:5pt;line-height: 1;background-color:transparent;}.cl-88b29257{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:0;padding-top:0;padding-left:5.4pt;padding-right:5.4pt;line-height: 1;background-color:transparent;}.cl-88b29258{margin:0;text-align:center;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:0;padding-top:0;padding-left:5.4pt;padding-right:5.4pt;line-height: 1;background-color:transparent;}.cl-88b29260{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:5pt;padding-top:5pt;padding-left:5pt;padding-right:5pt;line-height: 1;background-color:transparent;}.cl-88b29261{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:5pt;padding-top:5pt;padding-left:5pt;padding-right:5pt;line-height: 1;background-color:transparent;}.cl-88b2abce{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 0 solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2abd8{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 0 solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2abe2{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 0 solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2abe3{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 0 solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2abec{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 2pt solid rgba(255, 192, 203, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2abed{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 2pt solid rgba(255, 192, 203, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2abee{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 2pt solid rgba(255, 192, 203, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2abf6{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 2pt solid rgba(255, 192, 203, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2abf7{background-color:transparent;vertical-align: top;border-bottom: 2pt solid rgba(255, 192, 203, 1.00);border-top: 2pt solid rgba(255, 192, 203, 1.00);border-left: 2pt solid rgba(255, 192, 203, 1.00);border-right: 2pt solid rgba(255, 192, 203, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2abf8{background-color:transparent;vertical-align: top;border-bottom: 2pt solid rgba(255, 192, 203, 1.00);border-top: 2pt solid rgba(255, 192, 203, 1.00);border-left: 2pt solid rgba(255, 192, 203, 1.00);border-right: 2pt solid rgba(255, 192, 203, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac00{background-color:transparent;vertical-align: top;border-bottom: 2pt solid rgba(255, 192, 203, 1.00);border-top: 2pt solid rgba(255, 192, 203, 1.00);border-left: 2pt solid rgba(255, 192, 203, 1.00);border-right: 2pt solid rgba(255, 192, 203, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac01{background-color:transparent;vertical-align: top;border-bottom: 2pt solid rgba(255, 192, 203, 1.00);border-top: 2pt solid rgba(255, 192, 203, 1.00);border-left: 2pt solid rgba(255, 192, 203, 1.00);border-right: 2pt solid rgba(255, 192, 203, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac0a{background-color:transparent;vertical-align: top;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 2pt solid rgba(255, 192, 203, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac0b{background-color:transparent;vertical-align: top;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac0c{background-color:transparent;vertical-align: top;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac14{background-color:transparent;vertical-align: top;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 2pt solid rgba(255, 192, 203, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac15{background-color:transparent;vertical-align: top;border-bottom: 2pt solid rgba(255, 192, 203, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 2pt solid rgba(255, 192, 203, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac16{background-color:transparent;vertical-align: top;border-bottom: 2pt solid rgba(255, 192, 203, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac1e{background-color:transparent;vertical-align: top;border-bottom: 2pt solid rgba(255, 192, 203, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac1f{background-color:transparent;vertical-align: top;border-bottom: 2pt solid rgba(255, 192, 203, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 2pt solid rgba(255, 192, 203, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac20{background-color:transparent;vertical-align: top;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac21{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac28{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac29{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}Title says WhaaaatOh, ok. A: Drug XB: PlaceboC: Combinationrow1 {1}555row21, 2 {2}1, 2 {2}1, 2 {2}{1} - row 1 - row footnote{2} - row 2 - cell footnoteha HA! Footer! # Extending themes my_theme <- function(font_size = 6) { # here can pass additional arguments for default theme function(flx, ...) { # First apply theme_docx_default flx <- theme_docx_default(font_size = font_size)(flx, ...) # Then apply additional styling flx <- flextable::border_inner(flx, part = \"body\", border = flextable::fp_border_default(width = 0.5) ) return(flx) } } flx <- tt_to_flextable(tbl, theme = my_theme())"},{"path":[]},{"path":"https://insightsengineering.github.io/rtables.officer/news/index.html","id":"new-features-0-0-1-9008","dir":"Changelog","previous_headings":"","what":"New Features","title":"rtables.officer 0.0.1.9008","text":"First version.","code":""}] +[{"path":[]},{"path":"https://insightsengineering.github.io/rtables.officer/main/CODE_OF_CONDUCT.html","id":"our-pledge","dir":"","previous_headings":"","what":"Our Pledge","title":"Contributor Covenant Code of Conduct","text":"interest fostering open welcoming environment, contributors maintainers pledge making participation project community harassment-free experience everyone, regardless age, body size, disability, ethnicity, sex characteristics, gender identity expression, level experience, education, socio-economic status, nationality, personal appearance, race, religion, sexual identity orientation.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/CODE_OF_CONDUCT.html","id":"our-standards","dir":"","previous_headings":"","what":"Our Standards","title":"Contributor Covenant Code of Conduct","text":"Examples behavior contributes creating positive environment include: Using welcoming inclusive language respectful differing viewpoints experiences Gracefully accepting constructive criticism Focusing best community Showing empathy towards community members Examples unacceptable behavior participants include: use sexualized language imagery unwelcome sexual attention advances Trolling, insulting/derogatory comments, personal political attacks Public private harassment Publishing others’ private information, physical electronic address, without explicit permission conduct reasonably considered inappropriate professional setting","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/CODE_OF_CONDUCT.html","id":"our-responsibilities","dir":"","previous_headings":"","what":"Our Responsibilities","title":"Contributor Covenant Code of Conduct","text":"Project maintainers responsible clarifying standards acceptable behavior expected take appropriate fair corrective action response instances unacceptable behavior. Project maintainers right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct, ban temporarily permanently contributor behaviors deem inappropriate, threatening, offensive, harmful.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/CODE_OF_CONDUCT.html","id":"scope","dir":"","previous_headings":"","what":"Scope","title":"Contributor Covenant Code of Conduct","text":"Code Conduct applies within project spaces public spaces individual representing project community. Examples representing project community include using official project e-mail address, posting via official social media account, acting appointed representative online offline event. Representation project may defined clarified project maintainers.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/CODE_OF_CONDUCT.html","id":"enforcement","dir":"","previous_headings":"","what":"Enforcement","title":"Contributor Covenant Code of Conduct","text":"Instances abusive, harassing, otherwise unacceptable behavior may reported contacting project team support@github.com. complaints reviewed investigated result response deemed necessary appropriate circumstances. project team obligated maintain confidentiality regard reporter incident. details specific enforcement policies may posted separately. Project maintainers follow enforce Code Conduct good faith may face temporary permanent repercussions determined members project’s leadership.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/CODE_OF_CONDUCT.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributor Covenant Code of Conduct","text":"Code Conduct adapted Contributor Covenant, version 1.4, available https://www.contributor-covenant.org/version/1/4/code--conduct.html answers common questions code conduct, see https://www.contributor-covenant.org/faq","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/CONTRIBUTING.html","id":null,"dir":"","previous_headings":"","what":"Contributing to {rtables}","title":"Contributing to {rtables}","text":"welcome contributions big small ongoing development {rtables} package. , best way contribute package filing issues feature requests bugs encountered. interested contributing code package, contributions can made working current issues opening pull requests code changes. help able provide greatly appreciated! Contributions project released public project’s open source license.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/CONTRIBUTING.html","id":"filing-issues","dir":"","previous_headings":"","what":"Filing Issues","title":"Contributing to {rtables}","text":"Issues used establish prioritized timeline track development progress within package. new feature feel enhance experience package users, please open Feature Request issue. notice bug existing code, please file Bug Fix issue description bug reprex (reproducible example). types issues (questions, typos ’ve noticed, improvements documentation, etc.) can filed well. Click file new issue, see list current issues. Please utilize labels wherever possible creating issues organization purposes narrow scope work required.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/CONTRIBUTING.html","id":"creating-pull-requests","dir":"","previous_headings":"","what":"Creating Pull Requests","title":"Contributing to {rtables}","text":"Development {rtables} package relies Issue → Branch → PR → Code Review → Merge pipeline facilitated GitHub. experienced programmer interested contributing package code, please begin filing issue describing changes like make. may case idea already implemented way, package maintainers can help determine whether feature necessary begin development. Whether opening issue pull request, detailed description, easier package maintainers help ! make code changes package, please follow following process.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/CONTRIBUTING.html","id":"pull-request-process","dir":"","previous_headings":"Creating Pull Requests","what":"Pull Request Process","title":"Contributing to {rtables}","text":"{rtables} package part NEST project utilizes staged.dependencies ensure simplify development process track upstream downstream package dependencies. highly recommend installing using package developing within {rtables}.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/CONTRIBUTING.html","id":"id_1-create-a-branch","dir":"","previous_headings":"Creating Pull Requests > Pull Request Process","what":"1. Create a branch","title":"Contributing to {rtables}","text":"order work new pull request, please first create branch main upon can work commit changes. comply staged.dependencies standards, {rtables} uses following branch naming convention: issue#_description_of_issue@target_merge_branch example, 443_refactor_splits@main. cases, target merge branch base (main) branch. cases, change {rtables} may first require upstream changes {formatters} package. Suppose branch 100_update_fmts@main {formatters} containing required upstream changes. branch created {rtables} named follows example: 443_refactor_splits@100_update_fmts@main. ensures correct branches checked running tests, etc. details staged.dependencies branch naming conventions, click .","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/CONTRIBUTING.html","id":"id_2-code","dir":"","previous_headings":"Creating Pull Requests > Pull Request Process","what":"2. Code","title":"Contributing to {rtables}","text":"Work within {rtables} package apply code changes. Avoid combining issues single branch - ideally, branch associated single issue prefixed issue number. information basics {rtables} package, please read package vignettes, available . advanced development work within {rtables}, consider reading {rtables} Developer Guide. Developer Guide can accessed {rtables} site navigation bar, listed convenience: Developer Guide: Split Machinery Developer Guide: Tabulation Developer Guide: Debugging {rtables} Beyond Developer Guide: Sparse Notes {rtables} Internals","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/CONTRIBUTING.html","id":"code-style","dir":"","previous_headings":"Creating Pull Requests > Pull Request Process > 2. Code","what":"Code style","title":"Contributing to {rtables}","text":"{rtables} package follows tidyverse style guide please adhere guidelines submitted code. making changes file within package, can apply package styler automatically check lint running following two lines code within file:","code":"styler:::style_active_file() lintr:::addin_lint()"},{"path":"https://insightsengineering.github.io/rtables.officer/main/CONTRIBUTING.html","id":"documentation","dir":"","previous_headings":"Creating Pull Requests > Pull Request Process > 2. Code","what":"Documentation","title":"Contributing to {rtables}","text":"Package documentation uses roxygen2. contribution requires updates documentation, ensure roxygen comments updated within source code file. updating roxygen documentation, run devtools::document() update accompanying .Rd files (update files hand!).","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/CONTRIBUTING.html","id":"tests","dir":"","previous_headings":"Creating Pull Requests > Pull Request Process > 2. Code","what":"Tests","title":"Contributing to {rtables}","text":"ensure high code coverage, create tests using testthat package. cases, changes package code necessitate addition one tests ensure added features working expected existing features broken.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/CONTRIBUTING.html","id":"news","dir":"","previous_headings":"Creating Pull Requests > Pull Request Process > 2. Code","what":"NEWS","title":"Contributing to {rtables}","text":"making updates package, please add descriptive entry NEWS file reflects changes. See tidyverse style guide guidelines creating NEWS entry.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/CONTRIBUTING.html","id":"id_3-make-a-pull-request","dir":"","previous_headings":"Creating Pull Requests > Pull Request Process","what":"3. Make a Pull Request","title":"Contributing to {rtables}","text":"previous two steps complete, can create pull request. Indicate description issue addressed pull request, utilize labels help reviewers identify category changes contained within pull request. pull request created, series checks automatically triggered, including R CMD check, tests/code coverage, auto-documentation, . checks must passing order eventually merge pull request, changes may required order resolve status checks. pull requests must also reviewed approved least one package maintainers can merged. review automatically requested several {rtables} maintainers upon creating pull request. maintainer reviews pull request, please try address comments short order - {rtables} package updated regular basis leaving pull request open long likely result merge conflicts create work developer.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/CONTRIBUTING.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"Contributing to {rtables}","text":"Please note project released Contributor Code Conduct. participating project agree abide terms.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/ISSUE_TEMPLATE.html","id":null,"dir":"","previous_headings":"","what":"Reporting an Issue with rtables","title":"Reporting an Issue with rtables","text":"use form ask question, ask assistance. Instead, ask Stackoverflow using nest-rtables tag. Questions function’s use closed without response. Please briefly describe problem , relevant, output expect. Please also provide output utils::sessionInfo() devtools::session_info() end post. possible, please include minimal, reproducible example. rtables team much likely resolve issue able reproduce locally. Please delete preamble read . brief description problem","code":"library(rtables) # your reproducible example here"},{"path":"https://insightsengineering.github.io/rtables.officer/main/articles/rtables.officer.html","id":"introduction","dir":"Articles","previous_headings":"","what":"Introduction","title":"Introduction to {rtables}","text":"rtables package provides framework create, tabulate, output tables R. design requirements rtables origin studying tables commonly used report analyses clinical trials; however, careful keep rtables general purpose toolkit. vignette, give short introduction rtables tabulating table. content vignette based following two resources: rtables useR 2020 presentation Gabriel Becker rtables - Framework Creating Complex Structured Reporting Tables Via Multi-Level Faceted Computations. packages used vignette rtables dplyr:","code":"library(rtables) library(dplyr)"},{"path":"https://insightsengineering.github.io/rtables.officer/main/articles/rtables.officer.html","id":"overview","dir":"Articles","previous_headings":"","what":"Overview","title":"Introduction to {rtables}","text":"build table using rtables two components required: layout constructed using rtables functions, data.frame unaggregated data. two elements combined build table object. Table objects contain information content structure table, well instructions information processed construct table. obtaining table object, formatted table can printed ASCII format, exported variety formats (.txt, .pdf, .docx, etc.).","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/articles/rtables.officer.html","id":"data","dir":"Articles","previous_headings":"","what":"Data","title":"Introduction to {rtables}","text":"data used vignette made using random number generators. data content relatively simple: one row per imaginary person one column per measurement: study arm, country origin, gender, handedness, age, weight. Note use factor variables level order represented row column order tabulate information df .","code":"n <- 400 set.seed(1) df <- tibble( arm = factor(sample(c(\"Arm A\", \"Arm B\"), n, replace = TRUE), levels = c(\"Arm A\", \"Arm B\")), country = factor(sample(c(\"CAN\", \"USA\"), n, replace = TRUE, prob = c(.55, .45)), levels = c(\"CAN\", \"USA\")), gender = factor(sample(c(\"Female\", \"Male\"), n, replace = TRUE), levels = c(\"Female\", \"Male\")), handed = factor(sample(c(\"Left\", \"Right\"), n, prob = c(.6, .4), replace = TRUE), levels = c(\"Left\", \"Right\")), age = rchisq(n, 30) + 10 ) %>% mutate( weight = 35 * rnorm(n, sd = .5) + ifelse(gender == \"Female\", 140, 180) ) head(df) # # A tibble: 6 × 6 # arm country gender handed age weight # # 1 Arm A USA Female Left 31.3 139. # 2 Arm B CAN Female Right 50.5 116. # 3 Arm A USA Male Right 32.4 186. # 4 Arm A USA Male Right 34.6 169. # 5 Arm B USA Female Right 43.0 160. # 6 Arm A USA Female Right 43.2 126."},{"path":"https://insightsengineering.github.io/rtables.officer/main/articles/rtables.officer.html","id":"building-a-table","dir":"Articles","previous_headings":"","what":"Building a Table","title":"Introduction to {rtables}","text":"aim vignette build following table step step:","code":"# Arm A Arm B # Female Male Female Male # (N=96) (N=105) (N=92) (N=107) # ———————————————————————————————————————————————————————————— # CAN 45 (46.9%) 64 (61.0%) 46 (50.0%) 62 (57.9%) # Left 32 (33.3%) 42 (40.0%) 26 (28.3%) 37 (34.6%) # mean 38.87 40.43 40.33 37.68 # Right 13 (13.5%) 22 (21.0%) 20 (21.7%) 25 (23.4%) # mean 36.64 40.19 40.16 40.65 # USA 51 (53.1%) 41 (39.0%) 46 (50.0%) 45 (42.1%) # Left 34 (35.4%) 19 (18.1%) 25 (27.2%) 25 (23.4%) # mean 40.36 39.68 39.21 40.07 # Right 17 (17.7%) 22 (21.0%) 21 (22.8%) 20 (18.7%) # mean 36.94 39.80 38.53 39.02"},{"path":"https://insightsengineering.github.io/rtables.officer/main/articles/rtables.officer.html","id":"quick-start","dir":"Articles","previous_headings":"","what":"Quick Start","title":"Introduction to {rtables}","text":"table can achieved via qtable() function. new tabulation rtables layout framework, can use convenience wrapper create many types two-way frequency tables. purpose qtable enable quick exploratory data analysis. See exploratory_analysis vignette details. code recreate table : qtable function arguments can see many key concepts underlying rtables layout framework. user needs define: variables used facets row /column space? variable used summary analysis? function used summary? table include marginal summaries? labels needed clarify table content? sections look translating questions set features part rtables layout framework. Now let’s take look building example table layout.","code":"qtable(df, row_vars = c(\"country\", \"handed\"), col_vars = c(\"arm\", \"gender\"), avar = \"age\", afun = mean, summarize_groups = TRUE, row_labels = \"mean\" ) # Arm A Arm B # Female Male Female Male # age - mean (N=96) (N=105) (N=92) (N=107) # —————————————————————————————————————————————————————————————— # CAN 45 (46.9%) 64 (61.0%) 46 (50.0%) 62 (57.9%) # Left 32 (33.3%) 42 (40.0%) 26 (28.3%) 37 (34.6%) # mean 38.87 40.43 40.33 37.68 # Right 13 (13.5%) 22 (21.0%) 20 (21.7%) 25 (23.4%) # mean 36.64 40.19 40.16 40.65 # USA 51 (53.1%) 41 (39.0%) 46 (50.0%) 45 (42.1%) # Left 34 (35.4%) 19 (18.1%) 25 (27.2%) 25 (23.4%) # mean 40.36 39.68 39.21 40.07 # Right 17 (17.7%) 22 (21.0%) 21 (22.8%) 20 (18.7%) # mean 36.94 39.80 38.53 39.02"},{"path":"https://insightsengineering.github.io/rtables.officer/main/articles/rtables.officer.html","id":"layout-instructions","dir":"Articles","previous_headings":"","what":"Layout Instructions","title":"Introduction to {rtables}","text":"rtables basic table defined 0 rows one column representing data. Analyzing variable one way adding row: code first described table assigned description variable lyt. built table using actual data build_table(). description table called table layout. basic_table() start every table layout contains information one column representing data. analyze() instruction adds layout age variable analyzed mean() analysis function result rounded 1 decimal place. Hence, layout “pre-data”, , ’s description build table get data. can look layout isolated: general layouting instructions summarized : basic_table() layout representing table zero rows one column row space: split_rows_by(), split_rows_by_multivar(), split_rows_by_cuts(), split_rows_by_cutfun(), split_rows_by_quartiles() column space: split_cols_by(), split_cols_by_multivar(), split_cols_by_cuts(), split_cols_by_cutfun(), split_cols_by_quartiles() Summarizing Groups: summarize_row_groups() Analyzing Variables: analyze(), analyze_colvars() Using functions, possible create wide variety tables show document.","code":"lyt <- basic_table() %>% analyze(\"age\", mean, format = \"xx.x\") tbl <- build_table(lyt, df) tbl # all obs # —————————————— # mean 39.4 lyt # A Pre-data Table Layout # # Column-Split Structure: # () # # Row-Split Structure: # age (** analysis **)"},{"path":"https://insightsengineering.github.io/rtables.officer/main/articles/rtables.officer.html","id":"adding-column-structure","dir":"Articles","previous_headings":"","what":"Adding Column Structure","title":"Introduction to {rtables}","text":"now add structure columns adding column split based factor variable arm: resulting table one column per factor level arm. data represented first column df[df$arm == \"ARM \", ]. Hence, split_cols_by() partitions data among columns default. Column splitting can done recursive/nested manner adding sequential split_cols_by() layout instruction. ’s also possible add non-nested split. splitting arm gender: first column represents data df df$arm == \"\" & df$gender == \"Female\" second column data df df$arm == \"\" & df$gender == \"Male\", . information column structure can found col_counts vignette.","code":"lyt <- basic_table() %>% split_cols_by(\"arm\") %>% analyze(\"age\", afun = mean, format = \"xx.x\") tbl <- build_table(lyt, df) tbl # Arm A Arm B # ———————————————————— # mean 39.5 39.4 lyt <- basic_table() %>% split_cols_by(\"arm\") %>% split_cols_by(\"gender\") %>% analyze(\"age\", afun = mean, format = \"xx.x\") tbl <- build_table(lyt, df) tbl # Arm A Arm B # Female Male Female Male # ———————————————————————————————————— # mean 38.8 40.1 39.6 39.2"},{"path":"https://insightsengineering.github.io/rtables.officer/main/articles/rtables.officer.html","id":"adding-row-structure","dir":"Articles","previous_headings":"","what":"Adding Row Structure","title":"Introduction to {rtables}","text":"far, created layouts analysis column splitting instructions, .e. analyze() split_cols_by(), respectively. resulted table multiple columns one data row. add row structure stratifying mean analysis country (.e. adding split row space): table data used derive first data cell (average age female Canadians Arm ) df$country == \"CAN\" & df$arm == \"Arm \" & df$gender == \"Female\". cell value can also calculated manually: Row structure can also used group table titled groups pages rendering. via ‘page splits’, declared via page_by = TRUE within call split_rows_by: go detail page-splits control page-group specific titles Title footer vignette. Note print render table without pagination, page_by splits currently rendered normal row splits. may change future releases.","code":"lyt <- basic_table() %>% split_cols_by(\"arm\") %>% split_cols_by(\"gender\") %>% split_rows_by(\"country\") %>% analyze(\"age\", afun = mean, format = \"xx.x\") tbl <- build_table(lyt, df) tbl # Arm A Arm B # Female Male Female Male # —————————————————————————————————————— # CAN # mean 38.2 40.3 40.3 38.9 # USA # mean 39.2 39.7 38.9 39.6 mean(df$age[df$country == \"CAN\" & df$arm == \"Arm A\" & df$gender == \"Female\"]) # [1] 38.22447 lyt <- basic_table() %>% split_cols_by(\"arm\") %>% split_cols_by(\"gender\") %>% split_rows_by(\"country\", page_by = TRUE) %>% split_rows_by(\"handed\") %>% analyze(\"age\", afun = mean, format = \"xx.x\") tbl <- build_table(lyt, df) cat(export_as_txt(tbl, page_type = \"letter\", page_break = \"\\n\\n~~~~~~ Page Break ~~~~~~\\n\\n\")) # # country: CAN # # ———————————————————————————————————————— # Arm A Arm B # Female Male Female Male # ———————————————————————————————————————— # Left # mean 38.9 40.4 40.3 37.7 # Right # mean 36.6 40.2 40.2 40.6 # # # ~~~~~~ Page Break ~~~~~~ # # # country: USA # # ———————————————————————————————————————— # Arm A Arm B # Female Male Female Male # ———————————————————————————————————————— # Left # mean 40.4 39.7 39.2 40.1 # Right # mean 36.9 39.8 38.5 39.0"},{"path":"https://insightsengineering.github.io/rtables.officer/main/articles/rtables.officer.html","id":"adding-group-information","dir":"Articles","previous_headings":"","what":"Adding Group Information","title":"Introduction to {rtables}","text":"adding row splits, get default label rows split level, example CAN USA table . Besides column space subsetting, now subsetted data cell. often useful defining row splitting display information row group. rtables referred content information, .e. mean() row 2 descendant CAN (visible via indenting, though table underlying tree structure importance vignette). order add content information turn CAN label row content row, summarize_row_groups() function required. default, count (nrows()) percentage data relative column associated data calculated: relative percentage average age female Canadians calculated follows: group percentages per row split sum 1 column. can split row space dividing country handedness: Next, add count percentage summary handedness within country:","code":"lyt <- basic_table() %>% split_cols_by(\"arm\") %>% split_cols_by(\"gender\") %>% split_rows_by(\"country\") %>% summarize_row_groups() %>% analyze(\"age\", afun = mean, format = \"xx.x\") tbl <- build_table(lyt, df) tbl # Arm A Arm B # Female Male Female Male # —————————————————————————————————————————————————————————— # CAN 45 (46.9%) 64 (61.0%) 46 (50.0%) 62 (57.9%) # mean 38.2 40.3 40.3 38.9 # USA 51 (53.1%) 41 (39.0%) 46 (50.0%) 45 (42.1%) # mean 39.2 39.7 38.9 39.6 df_cell <- subset(df, df$country == \"CAN\" & df$arm == \"Arm A\" & df$gender == \"Female\") df_col_1 <- subset(df, df$arm == \"Arm A\" & df$gender == \"Female\") c(count = nrow(df_cell), percentage = nrow(df_cell) / nrow(df_col_1)) # count percentage # 45.00000 0.46875 lyt <- basic_table() %>% split_cols_by(\"arm\") %>% split_cols_by(\"gender\") %>% split_rows_by(\"country\") %>% summarize_row_groups() %>% split_rows_by(\"handed\") %>% analyze(\"age\", afun = mean, format = \"xx.x\") tbl <- build_table(lyt, df) tbl # Arm A Arm B # Female Male Female Male # ———————————————————————————————————————————————————————————— # CAN 45 (46.9%) 64 (61.0%) 46 (50.0%) 62 (57.9%) # Left # mean 38.9 40.4 40.3 37.7 # Right # mean 36.6 40.2 40.2 40.6 # USA 51 (53.1%) 41 (39.0%) 46 (50.0%) 45 (42.1%) # Left # mean 40.4 39.7 39.2 40.1 # Right # mean 36.9 39.8 38.5 39.0 lyt <- basic_table() %>% split_cols_by(\"arm\") %>% split_cols_by(\"gender\") %>% split_rows_by(\"country\") %>% summarize_row_groups() %>% split_rows_by(\"handed\") %>% summarize_row_groups() %>% analyze(\"age\", afun = mean, format = \"xx.x\") tbl <- build_table(lyt, df) tbl # Arm A Arm B # Female Male Female Male # ———————————————————————————————————————————————————————————— # CAN 45 (46.9%) 64 (61.0%) 46 (50.0%) 62 (57.9%) # Left 32 (33.3%) 42 (40.0%) 26 (28.3%) 37 (34.6%) # mean 38.9 40.4 40.3 37.7 # Right 13 (13.5%) 22 (21.0%) 20 (21.7%) 25 (23.4%) # mean 36.6 40.2 40.2 40.6 # USA 51 (53.1%) 41 (39.0%) 46 (50.0%) 45 (42.1%) # Left 34 (35.4%) 19 (18.1%) 25 (27.2%) 25 (23.4%) # mean 40.4 39.7 39.2 40.1 # Right 17 (17.7%) 22 (21.0%) 21 (22.8%) 20 (18.7%) # mean 36.9 39.8 38.5 39.0"},{"path":"https://insightsengineering.github.io/rtables.officer/main/articles/rtables.officer.html","id":"comparing-with-other-tabulation-frameworks","dir":"Articles","previous_headings":"","what":"Comparing with Other Tabulation Frameworks","title":"Introduction to {rtables}","text":"number table frameworks available R, including: gt xtable tableone tables number reasons choose rtables (yet another tables R package): Output tables ASCII text files. Table rendering (ASCII, HTML, etc.) separate data model. Hence, one always access non-rounded/non-formatted numbers. Pagination horizontal vertical directions meet health authority submission requirements. Cell, row, column, table reference system. Titles, footers, referential footnotes. Path based access cell content useful automated content generation. depth comparisons various tabulation frameworks can found Overview table R packages chapter Tables Clinical Trials R book compiled R Consortium Tables Working Group.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/articles/rtables.officer.html","id":"summary","dir":"Articles","previous_headings":"","what":"Summary","title":"Introduction to {rtables}","text":"vignette learned: Every cell associated subset data - means much tabulation splitting/subsetting data. Tables can described pre-data using layouts. Tables form visualization data. vignettes rtables package provide detailed information rtables package. recommend continue tabulation_dplyr vignette compares information derived table vignette using dplyr.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Gabriel Becker. Contributor. Davide Garolini. Author. Emily de la Rua. Author. Abinaya Yogasekaram. Author. Joe Zhu. Author, maintainer. F. Hoffmann-La Roche AG. Copyright holder, funder.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Garolini D, de la Rua E, Yogasekaram , Zhu J (2024). rtables.officer: Reporting Tables. R package version 0.0.1.9008, https://insightsengineering.github.io/rtables.officer/main/, https://github.com/insightsengineering/rtables.officer.","code":"@Manual{, title = {rtables.officer: Reporting Tables}, author = {Davide Garolini and Emily {de la Rua} and Abinaya Yogasekaram and Joe Zhu}, year = {2024}, note = {R package version 0.0.1.9008, https://insightsengineering.github.io/rtables.officer/main/}, url = {https://github.com/insightsengineering/rtables.officer}, }"},{"path":[]},{"path":"https://insightsengineering.github.io/rtables.officer/main/index.html","id":"reporting-tables-with-r","dir":"","previous_headings":"","what":"Reporting Tables with R","title":"Reporting Tables","text":"rtables R package designed create display complex tables R. cells rtable may contain high-dimensional data structure can displayed cell-specific formatting instructions. Currently, rtables can outputted ascii html, pdf, well Power Point (via conversion flextable objects). rtf support development future release. rtables developed copy written F. Hoffmann-La Roche released open source Apache License Version 2. rtables development driven need create regulatory ready tables health authority review. key requirements undertaking listed : values need programmatically accessible non-rounded state cross-checking multiple values displayed within cell flexible tabulation framework flexible formatting (cell spans, rounding, alignment, etc.) multiple output formats (html, ascii, latex, pdf, xml) flexible pagination horizontal vertical directions distinguish name label data structure work CDISC standards title, footnotes, cell cell/row/column references rtables currently covers virtually requirements, advances remain active development.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"Reporting Tables","text":"rtables available CRAN can install latest released version : can install latest development version directly GitHub : Packaged releases (CRAN official CRAN releases) can found releases list. understand use package, please refer Introduction rtables article, provides multiple examples code implementation.","code":"install.packages(\"rtables\") # install.packages(\"pak\") pak::pak(\"insightsengineering/rtables\")"},{"path":[]},{"path":"https://insightsengineering.github.io/rtables.officer/main/index.html","id":"usage","dir":"","previous_headings":"","what":"Usage","title":"Reporting Tables","text":"first demonstrate demographic table-like example show creation complex table.","code":"library(rtables) lyt <- basic_table() %>% split_cols_by(\"ARM\") %>% analyze(c(\"AGE\", \"BMRKR1\", \"BMRKR2\"), function(x, ...) { if (is.numeric(x)) { in_rows( \"Mean (sd)\" = c(mean(x), sd(x)), \"Median\" = median(x), \"Min - Max\" = range(x), .formats = c(\"xx.xx (xx.xx)\", \"xx.xx\", \"xx.xx - xx.xx\") ) } else if (is.factor(x) || is.character(x)) { in_rows(.list = list_wrap_x(table)(x)) } else { stop(\"type not supported\") } }) build_table(lyt, ex_adsl) #> A: Drug X B: Placebo C: Combination #> ———————————————————————————————————————————————————————————— #> AGE #> Mean (sd) 33.77 (6.55) 35.43 (7.90) 35.43 (7.72) #> Median 33.00 35.00 35.00 #> Min - Max 21.00 - 50.00 21.00 - 62.00 20.00 - 69.00 #> BMRKR1 #> Mean (sd) 5.97 (3.55) 5.70 (3.31) 5.62 (3.49) #> Median 5.39 4.81 4.61 #> Min - Max 0.41 - 17.67 0.65 - 14.24 0.17 - 21.39 #> BMRKR2 #> LOW 50 45 40 #> MEDIUM 37 56 42 #> HIGH 47 33 50 library(rtables) library(dplyr) ## for simplicity grab non-sparse subset ADSL <- ex_adsl %>% filter(RACE %in% levels(RACE)[1:3]) biomarker_ave <- function(x, ...) { val <- if (length(x) > 0) round(mean(x), 2) else \"no data\" in_rows( \"Biomarker 1 (mean)\" = rcell(val) ) } basic_table(show_colcounts = TRUE) %>% split_cols_by(\"ARM\") %>% split_cols_by(\"BMRKR2\") %>% split_rows_by(\"RACE\", split_fun = trim_levels_in_group(\"SEX\")) %>% split_rows_by(\"SEX\") %>% summarize_row_groups() %>% analyze(\"BMRKR1\", biomarker_ave) %>% build_table(ADSL) #> A: Drug X B: Placebo C: Combination #> LOW MEDIUM HIGH LOW MEDIUM HIGH LOW MEDIUM HIGH #> (N=45) (N=35) (N=46) (N=42) (N=48) (N=31) (N=40) (N=39) (N=47) #> ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— #> ASIAN #> F 13 (28.9%) 9 (25.7%) 19 (41.3%) 9 (21.4%) 18 (37.5%) 9 (29.0%) 13 (32.5%) 9 (23.1%) 17 (36.2%) #> Biomarker 1 (mean) 5.23 6.17 5.38 5.64 5.55 4.33 5.46 5.48 5.19 #> M 8 (17.8%) 7 (20.0%) 10 (21.7%) 12 (28.6%) 10 (20.8%) 8 (25.8%) 5 (12.5%) 11 (28.2%) 16 (34.0%) #> Biomarker 1 (mean) 6.77 6.06 5.54 4.9 4.98 6.81 6.53 5.47 4.98 #> U 1 (2.2%) 1 (2.9%) 0 (0.0%) 0 (0.0%) 0 (0.0%) 1 (3.2%) 0 (0.0%) 1 (2.6%) 1 (2.1%) #> Biomarker 1 (mean) 4.68 7.7 no data no data no data 6.97 no data 11.93 9.01 #> BLACK OR AFRICAN AMERICAN #> F 6 (13.3%) 3 (8.6%) 9 (19.6%) 6 (14.3%) 8 (16.7%) 2 (6.5%) 7 (17.5%) 4 (10.3%) 3 (6.4%) #> Biomarker 1 (mean) 5.01 7.2 6.79 6.15 5.26 8.57 5.72 5.76 4.58 #> M 5 (11.1%) 5 (14.3%) 2 (4.3%) 3 (7.1%) 5 (10.4%) 4 (12.9%) 4 (10.0%) 5 (12.8%) 5 (10.6%) #> Biomarker 1 (mean) 6.92 5.82 11.66 4.46 6.14 8.47 6.16 5.25 4.83 #> U 0 (0.0%) 0 (0.0%) 0 (0.0%) 0 (0.0%) 0 (0.0%) 0 (0.0%) 1 (2.5%) 1 (2.6%) 0 (0.0%) #> Biomarker 1 (mean) no data no data no data no data no data no data 2.79 9.82 no data #> UNDIFFERENTIATED 1 (2.2%) 0 (0.0%) 0 (0.0%) 0 (0.0%) 0 (0.0%) 0 (0.0%) 2 (5.0%) 0 (0.0%) 0 (0.0%) #> Biomarker 1 (mean) 9.48 no data no data no data no data no data 6.46 no data no data #> WHITE #> F 6 (13.3%) 7 (20.0%) 4 (8.7%) 5 (11.9%) 6 (12.5%) 6 (19.4%) 6 (15.0%) 3 (7.7%) 2 (4.3%) #> Biomarker 1 (mean) 4.43 7.83 4.52 6.42 5.07 7.83 6.71 5.87 10.7 #> M 4 (8.9%) 3 (8.6%) 2 (4.3%) 6 (14.3%) 1 (2.1%) 1 (3.2%) 2 (5.0%) 5 (12.8%) 3 (6.4%) #> Biomarker 1 (mean) 5.81 7.23 1.39 4.72 4.58 12.87 2.3 5.1 5.98 #> U 1 (2.2%) 0 (0.0%) 0 (0.0%) 1 (2.4%) 0 (0.0%) 0 (0.0%) 0 (0.0%) 0 (0.0%) 0 (0.0%) #> Biomarker 1 (mean) 3.94 no data no data 3.77 no data no data no data no data no data"},{"path":"https://insightsengineering.github.io/rtables.officer/main/index.html","id":"acknowledgments","dir":"","previous_headings":"","what":"Acknowledgments","title":"Reporting Tables","text":"like thank everyone made rtables better project providing feedback improving examples & vignettes. following list contributors alphabetical: Maximo Carreras, Francois Collins, Saibah Chohan, Tadeusz Lewandowski, Nick Paszty, Nina Qi, Jana Stoilova, Heng Wang, Godwin Yung","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/index.html","id":"presentations","dir":"","previous_headings":"","what":"Presentations","title":"Reporting Tables","text":"Generating Tables, Listings, Graphs using NEST / cardinal [Video] BBS Session Regulatory Submissions Clinical Trials [Video] R Medicine Virtual Conference 2023 [Video] Advanced rtables Training 2023 [Part 1 Slides] [Part 2 Slides] R Pharma 2022 - Creating Submission-Quality Clinical Trial Reporting Tables R rtables [Slides] [Video] R Adoption Series - Reporting Table Creation R [Video] [Slides] Tables Clinical Trials R [Book] useR! 2020 - rtables Layouting Tabulation Framework [Video]","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/reference/export_as_docx.html","id":null,"dir":"Reference","previous_headings":"","what":"Export as word document — export_as_docx","title":"Export as word document — export_as_docx","text":"table, produce self-contained word document attach template word file (template_file). function based tt_to_flextable() transformer officer package.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/reference/export_as_docx.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Export as word document — export_as_docx","text":"","code":"export_as_docx( tt, file, doc_metadata = NULL, titles_as_header = FALSE, footers_as_text = TRUE, template_file = NULL, section_properties = section_properties_default(), ... ) section_properties_default( page_size = c(\"letter\", \"A4\"), orientation = c(\"portrait\", \"landscape\") ) margins_potrait() margins_landscape()"},{"path":"https://insightsengineering.github.io/rtables.officer/main/reference/export_as_docx.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Export as word document — export_as_docx","text":"tt (TableTree related class) TableTree object representing populated table. file (string) string indicates final file output. Must .docx extension. doc_metadata (list strings) value can used metadata ?officer::set_doc_properties. Important text values title, subject, creator, description, created date object. titles_as_header (flag) defaults TRUE tt_to_flextable(), table self-contained makes additional header rows formatters::main_title() string formatters::subtitles() character vector (one per element). FALSE suggested export_as_docx(). adds titles subtitles text paragraph table. style applied. footers_as_text (flag) defaults FALSE tt_to_flextable(), table self-contained flextable definition footnotes. TRUE used export_as_docx() add footers new paragraph table. style applied, smaller font. template_file (string) template file officer use starting point final document. Document attaches table uses defaults defined template file. section_properties (officer::prop_section) officer::prop_section() object sets margins page size. Defaults section_properties_default(). ... () additional arguments passed tt_to_flextable(). page_size (character(1)) page size. Can \"letter\" \"A4\". Defaults \"letter\". orientation (character(1)) page orientation. Can \"portrait\" \"landscape\". Defaults \"portrait\".","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/reference/export_as_docx.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Export as word document — export_as_docx","text":"section_properties_default(): Helper function defines standard portrait properties tables. margins_potrait(): Helper function defines standard portrait margins tables. margins_landscape(): Helper function defines standard landscape margins tables.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/reference/export_as_docx.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Export as word document — export_as_docx","text":"export_as_docx() customization options available. require specific formats details, suggest use tt_to_flextable() prior export_as_docx. titles_as_header footer_as_text parameters must re-specified table changed first using tt_to_flextable().","code":""},{"path":[]},{"path":"https://insightsengineering.github.io/rtables.officer/main/reference/export_as_docx.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Export as word document — export_as_docx","text":"","code":"lyt <- basic_table() %>% split_cols_by(\"ARM\") %>% analyze(c(\"AGE\", \"BMRKR2\", \"COUNTRY\")) tbl <- build_table(lyt, ex_adsl) # See how section_properties_portrait function is built for custom tf <- tempfile(fileext = \".docx\") export_as_docx(tbl, file = tf, section_properties = section_properties_default(orientation = \"landscape\") )"},{"path":"https://insightsengineering.github.io/rtables.officer/main/reference/rtables.officer-package.html","id":null,"dir":"Reference","previous_headings":"","what":"rtables.officer: Reporting Tables — rtables.officer-package","title":"rtables.officer: Reporting Tables — rtables.officer-package","text":"package dedicated convert `rtables` object tables use `pptx` `docx` files.","code":""},{"path":[]},{"path":"https://insightsengineering.github.io/rtables.officer/main/reference/rtables.officer-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"rtables.officer: Reporting Tables — rtables.officer-package","text":"Maintainer: Joe Zhu joe.zhu@roche.com Authors: Davide Garolini davide.garolini@roche.com Emily de la Rua emily.de_la_rua@contractors.roche.com Abinaya Yogasekaram abinaya.yogasekaram@contractors.roche.com contributors: Gabriel Becker gabembecker@gmail.com [contributor] F. Hoffmann-La Roche AG [copyright holder, funder]","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/reference/tt_to_flextable.html","id":null,"dir":"Reference","previous_headings":"","what":"Create a flextable from an rtables table — tt_to_flextable","title":"Create a flextable from an rtables table — tt_to_flextable","text":"Principally used export (export_as_docx()), function produces flextable rtables table. theme = NULL, rtables-like style used. Otherwise, theme_docx_default() produce .docx-friendly table.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/reference/tt_to_flextable.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Create a flextable from an rtables table — tt_to_flextable","text":"","code":"tt_to_flextable( tt, theme = theme_docx_default(), border = flextable::fp_border_default(width = 0.5), indent_size = NULL, titles_as_header = TRUE, bold_titles = TRUE, footers_as_text = FALSE, counts_in_newline = FALSE, paginate = FALSE, fontspec = NULL, lpp = NULL, cpp = NULL, ..., colwidths = NULL, tf_wrap = !is.null(cpp), max_width = cpp, total_page_height = 10, total_page_width = 10, autofit_to_page = TRUE ) theme_docx_default( font = \"Arial\", font_size = 9, cell_margins = c(word_mm_to_pt(1.9), word_mm_to_pt(1.9), 0, 0), bold = c(\"header\", \"content_rows\", \"label_rows\", \"top_left\"), bold_manual = NULL, border = flextable::fp_border_default(width = 0.5) ) theme_html_default( font = \"Courier\", font_size = 9, cell_margins = 0.2, remove_internal_borders = \"label_rows\", border = flextable::fp_border_default(width = 1, color = \"black\") ) word_mm_to_pt(mm)"},{"path":"https://insightsengineering.github.io/rtables.officer/main/reference/tt_to_flextable.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Create a flextable from an rtables table — tt_to_flextable","text":"tt (TableTree related class) TableTree object representing populated table. theme (function NULL) theme function designed internally function flextable object change layout style. NULL, produce table similar rtables default. Defaults theme_docx_default() classic Word output. See details information. border (flextable::fp_border()) border style. Defaults flextable::fp_border_default(width = 0.5). indent_size (numeric(1)) NULL, default indent size table (see formatters::matrix_form() indent_size, default 2) used. work docx, size multiplied 1 mm (2.83 pt) default. titles_as_header (flag) defaults TRUE tt_to_flextable(), table self-contained makes additional header rows formatters::main_title() string formatters::subtitles() character vector (one per element). FALSE suggested export_as_docx(). adds titles subtitles text paragraph table. style applied. bold_titles (flag integer) defaults TRUE tt_to_flextable(), titles bold. one integers, lines bold. footers_as_text (flag) defaults FALSE tt_to_flextable(), table self-contained flextable definition footnotes. TRUE used export_as_docx() add footers new paragraph table. style applied, smaller font. counts_in_newline (flag) defaults FALSE. rtables text printing (formatters::toString()), column counts, .e. (N=xx), always new line. docx exports necessary print line. paginate (flag) exporting .docx documents using export_as_docx, suggest relying Microsoft Word pagination system. TRUE, option splits tt different \"pages\" multiple flextables. Cooperation two mechanisms guaranteed. Defaults FALSE. fontspec (font_spec) font_spec object specifying font information use calculating string widths heights, returned font_spec(). lpp (numeric(1)) maximum lines per page including (re)printed header context rows. cpp (numeric(1) NULL) width (characters) pages horizontal pagination. NA (default) indicates cpp inferred page size; NULL indicates horizontal pagination done regardless page size. ... () additional parameters passed pagination function. See rtables::paginate_table() details. colwidths (numeric) column widths resulting flextable(s). NULL, column widths estimated formatters::propose_column_widths() used. exporting .docx values normalized represent fraction total_page_width. specified, autofit_to_page set FALSE. tf_wrap (flag) whether text title, subtitles, footnotes wrapped. max_width (integer(1), string NULL) width title footer (including footnotes) materials word-wrapped . NULL, set current print width session (getOption(\"width\")). set \"auto\", width table (plus table inset) used. Parameter ignored tf_wrap = FALSE. total_page_height (numeric(1)) total page height (inches) resulting flextable(s). Used estimate number lines per page (lpp) paginate = TRUE. Defaults 10. total_page_width (numeric(1)) total page width (inches) resulting flextable(s). values added column widths normalized total page width. Defaults 10. autofit_to_page = TRUE, value automatically set allowed page width. autofit_to_page (flag) defaults TRUE. TRUE, column widths automatically adjusted fit total page width. FALSE, colwidths used indicative proportion total_page_width. See flextable::set_table_properties(layout) details. font (string) defaults \"Arial\". font available, flextable default used. Please consider consulting family column systemfonts::system_fonts(). font_size (integer(1)) font size. Defaults 9. cell_margins (numeric(1) numeric(4)) numeric vector four numbers indicating c(\"left\", \"right\", \"top\", \"bottom\"). defaults 0 top bottom, 0.19 mm word pt left right. bold (character) parts table text bold. Can combination c(\"header\", \"content_rows\", \"label_rows\", \"top_left\"). first one renders column names bold (topleft content). second third option use formatters::make_row_df() render content /label rows bold. bold_manual (named list NULL) list index lists. See example needed structure. Accepted groupings/names c(\"header\", \"body\"). remove_internal_borders (character) defaults \"label_rows\". Remove internal borders rows. Currently options can turned providing character value. mm (numeric(1)) value mm transform pt.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/reference/tt_to_flextable.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Create a flextable from an rtables table — tt_to_flextable","text":"flextable object.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/reference/tt_to_flextable.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Create a flextable from an rtables table — tt_to_flextable","text":"Themes can also extended need minor change default style. can either add theme theme call (e.g. c(theme_docx_default(), my_theme)) create new theme like shown examples. Please pay attention parameters' inputs relevant work properly. Indeed, possible use hidden values building theme (hence need ...). particular, tt_to_flextable sends following variable: tbl_row_class = rtables::make_row_df(tt)$node_class. ignored used theme. See theme_docx_default example retrieve values use .","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/reference/tt_to_flextable.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Create a flextable from an rtables table — tt_to_flextable","text":"theme_docx_default(): Main theme function export_as_docx(). theme_html_default(): Theme function html outputs. word_mm_to_pt(): Padding helper functions transform mm pt.","code":""},{"path":"https://insightsengineering.github.io/rtables.officer/main/reference/tt_to_flextable.html","id":"note","dir":"Reference","previous_headings":"","what":"Note","title":"Create a flextable from an rtables table — tt_to_flextable","text":"Currently cpp, tf_wrap, max_width used pagination yet clear cooperation colwidths autofit_to_page. moment suggested use cpp parameter family cautiously. issues arise, please communicate maintainers raise issue.","code":""},{"path":[]},{"path":"https://insightsengineering.github.io/rtables.officer/main/reference/tt_to_flextable.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Create a flextable from an rtables table — tt_to_flextable","text":"Title says Whaaaat Oh, ok. : Drug X B: Placebo C: Combination row1 {1} 5 5 5 row2 1, 2 {2} 1, 2 {2} 1, 2 {2} {1} - row 1 - row footnote {2} - row 2 - cell footnote ha HA! Footer! Title says Whaaaat Oh, ok. : Drug X B: Placebo C: Combination row1 {1} 5 5 5 row2 1, 2 {2} 1, 2 {2} 1, 2 {2} {1} - row 1 - row footnote {2} - row 2 - cell footnote ha HA! Footer! Title says Whaaaat Oh, ok. : Drug X B: Placebo C: Combination row1 {1} 5 5 5 row2 1, 2 {2} 1, 2 {2} 1, 2 {2} {1} - row 1 - row footnote {2} - row 2 - cell footnote ha HA! Footer!","code":"analysisfun <- function(x, ...) { in_rows( row1 = 5, row2 = c(1, 2), .row_footnotes = list(row1 = \"row 1 - row footnote\"), .cell_footnotes = list(row2 = \"row 2 - cell footnote\") ) } lyt <- basic_table( title = \"Title says Whaaaat\", subtitles = \"Oh, ok.\", main_footer = \"ha HA! Footer!\" ) %>% split_cols_by(\"ARM\") %>% analyze(\"AGE\", afun = analysisfun) tbl <- build_table(lyt, ex_adsl) # rtables style tt_to_flextable(tbl, theme = NULL) .cl-883718e2{table-layout:auto;}.cl-88310f9c{font-family:'DejaVu Sans';font-size:11pt;font-weight:bold;font-style:normal;text-decoration:none;color:rgba(0, 0, 0, 1.00);background-color:transparent;}.cl-88310fa6{font-family:'DejaVu Sans';font-size:11pt;font-weight:normal;font-style:normal;text-decoration:none;color:rgba(0, 0, 0, 1.00);background-color:transparent;}.cl-88339eec{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:5pt;padding-top:5pt;padding-left:8.2pt;padding-right:5.4pt;line-height: 1;background-color:transparent;}.cl-88339ef6{margin:0;text-align:center;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:5pt;padding-top:5pt;padding-left:5pt;padding-right:5pt;line-height: 1;background-color:transparent;}.cl-88339f00{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:5pt;padding-top:5pt;padding-left:5.4pt;padding-right:5.4pt;line-height: 1;background-color:transparent;}.cl-88339f01{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:5pt;padding-top:5pt;padding-left:5pt;padding-right:5pt;line-height: 1;background-color:transparent;}.cl-8833ba76{background-color:rgba(255, 255, 255, 1.00);vertical-align: middle;border-bottom: 0 solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833ba80{background-color:rgba(255, 255, 255, 1.00);vertical-align: middle;border-bottom: 0 solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833ba81{background-color:rgba(255, 255, 255, 1.00);vertical-align: middle;border-bottom: 0 solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833ba8a{background-color:rgba(255, 255, 255, 1.00);vertical-align: middle;border-bottom: 0 solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833ba8b{background-color:rgba(255, 255, 255, 1.00);vertical-align: middle;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833ba8c{background-color:rgba(255, 255, 255, 1.00);vertical-align: middle;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833ba94{background-color:rgba(255, 255, 255, 1.00);vertical-align: middle;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833ba95{background-color:rgba(255, 255, 255, 1.00);vertical-align: middle;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833ba96{background-color:transparent;vertical-align: middle;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0.5pt solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833ba9e{background-color:transparent;vertical-align: middle;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0.5pt solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833ba9f{background-color:transparent;vertical-align: middle;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0.5pt solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833baa8{background-color:transparent;vertical-align: middle;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0.5pt solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833baa9{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833baaa{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833baab{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833bab2{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833bab3{background-color:transparent;vertical-align: middle;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833bab4{background-color:transparent;vertical-align: middle;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833babc{background-color:transparent;vertical-align: middle;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833babd{background-color:transparent;vertical-align: middle;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833bac6{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833bac7{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833bac8{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8833bac9{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}Title says WhaaaatOh, ok. A: Drug XB: PlaceboC: Combinationrow1 {1}555row21, 2 {2}1, 2 {2}1, 2 {2}{1} - row 1 - row footnote{2} - row 2 - cell footnoteha HA! Footer! tt_to_flextable(tbl, theme = theme_docx_default(font_size = 6)) .cl-88770218{table-layout:auto;}.cl-88718824{font-family:'Arial';font-size:6pt;font-weight:bold;font-style:normal;text-decoration:none;color:rgba(0, 0, 0, 1.00);background-color:transparent;}.cl-8871882e{font-family:'Arial';font-size:6pt;font-weight:normal;font-style:normal;text-decoration:none;color:rgba(0, 0, 0, 1.00);background-color:transparent;}.cl-8871882f{font-family:'Arial';font-size:5pt;font-weight:normal;font-style:normal;text-decoration:none;color:rgba(0, 0, 0, 1.00);background-color:transparent;}.cl-8873cf12{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:0;padding-top:0;padding-left:8.2pt;padding-right:5.4pt;line-height: 1;background-color:transparent;}.cl-8873cf1c{margin:0;text-align:center;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:0;padding-top:0;padding-left:5pt;padding-right:5pt;line-height: 1;background-color:transparent;}.cl-8873cf26{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:0;padding-top:0;padding-left:5.4pt;padding-right:5.4pt;line-height: 1;background-color:transparent;}.cl-8873cf27{margin:0;text-align:center;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:0;padding-top:0;padding-left:5.4pt;padding-right:5.4pt;line-height: 1;background-color:transparent;}.cl-8873cf28{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:5pt;padding-top:5pt;padding-left:5pt;padding-right:5pt;line-height: 1;background-color:transparent;}.cl-8873cf30{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:5pt;padding-top:5pt;padding-left:5pt;padding-right:5pt;line-height: 1;background-color:transparent;}.cl-8873e880{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 0 solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e881{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 0 solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e882{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 0 solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e88a{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 0 solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e88b{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e88c{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e88d{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e894{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e895{background-color:transparent;vertical-align: top;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0.5pt solid rgba(102, 102, 102, 1.00);border-left: 0.5pt solid rgba(102, 102, 102, 1.00);border-right: 0.5pt solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e896{background-color:transparent;vertical-align: top;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0.5pt solid rgba(102, 102, 102, 1.00);border-left: 0.5pt solid rgba(102, 102, 102, 1.00);border-right: 0.5pt solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e89e{background-color:transparent;vertical-align: top;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0.5pt solid rgba(102, 102, 102, 1.00);border-left: 0.5pt solid rgba(102, 102, 102, 1.00);border-right: 0.5pt solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e89f{background-color:transparent;vertical-align: top;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0.5pt solid rgba(102, 102, 102, 1.00);border-left: 0.5pt solid rgba(102, 102, 102, 1.00);border-right: 0.5pt solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e8a0{background-color:transparent;vertical-align: top;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0.5pt solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e8a1{background-color:transparent;vertical-align: top;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e8a8{background-color:transparent;vertical-align: top;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e8a9{background-color:transparent;vertical-align: top;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0.5pt solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e8aa{background-color:transparent;vertical-align: top;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0.5pt solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e8ab{background-color:transparent;vertical-align: top;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e8ac{background-color:transparent;vertical-align: top;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e8b2{background-color:transparent;vertical-align: top;border-bottom: 0.5pt solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0.5pt solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e8b3{background-color:transparent;vertical-align: top;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e8b4{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e8b5{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-8873e8b6{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}Title says WhaaaatOh, ok. A: Drug XB: PlaceboC: Combinationrow1 {1}555row21, 2 {2}1, 2 {2}1, 2 {2}{1} - row 1 - row footnote{2} - row 2 - cell footnoteha HA! Footer! # Example with multiple themes (only extending the docx default!) my_theme <- function(x, ...) { flextable::border_inner(x, part = \"body\", border = flextable::fp_border_default(width = 0.5)) } flx <- tt_to_flextable(tbl, theme = c(theme_docx_default(), my_theme)) # Custom theme special_bold <- list( \"header\" = list(\"i\" = 1, \"j\" = c(1, 3)), \"body\" = list(\"i\" = c(1, 2), \"j\" = 1) ) custom_theme <- theme_docx_default( font_size = 10, font = \"Brush Script MT\", border = flextable::fp_border_default(color = \"pink\", width = 2), bold = NULL, bold_manual = special_bold ) tt_to_flextable(tbl, border = flextable::fp_border_default(color = \"pink\", width = 2), theme = custom_theme ) .cl-88b5d83a{table-layout:auto;}.cl-88b0497e{font-family:'Brush Script MT';font-size:10pt;font-weight:bold;font-style:normal;text-decoration:none;color:rgba(0, 0, 0, 1.00);background-color:transparent;}.cl-88b04988{font-family:'Brush Script MT';font-size:10pt;font-weight:normal;font-style:normal;text-decoration:none;color:rgba(0, 0, 0, 1.00);background-color:transparent;}.cl-88b04992{font-family:'Brush Script MT';font-size:9pt;font-weight:normal;font-style:normal;text-decoration:none;color:rgba(0, 0, 0, 1.00);background-color:transparent;}.cl-88b2924c{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:0;padding-top:0;padding-left:8.2pt;padding-right:5.4pt;line-height: 1;background-color:transparent;}.cl-88b29256{margin:0;text-align:center;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:0;padding-top:0;padding-left:5pt;padding-right:5pt;line-height: 1;background-color:transparent;}.cl-88b29257{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:0;padding-top:0;padding-left:5.4pt;padding-right:5.4pt;line-height: 1;background-color:transparent;}.cl-88b29258{margin:0;text-align:center;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:0;padding-top:0;padding-left:5.4pt;padding-right:5.4pt;line-height: 1;background-color:transparent;}.cl-88b29260{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:5pt;padding-top:5pt;padding-left:5pt;padding-right:5pt;line-height: 1;background-color:transparent;}.cl-88b29261{margin:0;text-align:left;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);padding-bottom:5pt;padding-top:5pt;padding-left:5pt;padding-right:5pt;line-height: 1;background-color:transparent;}.cl-88b2abce{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 0 solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2abd8{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 0 solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2abe2{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 0 solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2abe3{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 0 solid rgba(102, 102, 102, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2abec{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 2pt solid rgba(255, 192, 203, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2abed{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 2pt solid rgba(255, 192, 203, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2abee{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 2pt solid rgba(255, 192, 203, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2abf6{background-color:rgba(255, 255, 255, 1.00);vertical-align: top;border-bottom: 2pt solid rgba(255, 192, 203, 1.00);border-top: 0 solid rgba(102, 102, 102, 1.00);border-left: 0 solid rgba(102, 102, 102, 1.00);border-right: 0 solid rgba(102, 102, 102, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2abf7{background-color:transparent;vertical-align: top;border-bottom: 2pt solid rgba(255, 192, 203, 1.00);border-top: 2pt solid rgba(255, 192, 203, 1.00);border-left: 2pt solid rgba(255, 192, 203, 1.00);border-right: 2pt solid rgba(255, 192, 203, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2abf8{background-color:transparent;vertical-align: top;border-bottom: 2pt solid rgba(255, 192, 203, 1.00);border-top: 2pt solid rgba(255, 192, 203, 1.00);border-left: 2pt solid rgba(255, 192, 203, 1.00);border-right: 2pt solid rgba(255, 192, 203, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac00{background-color:transparent;vertical-align: top;border-bottom: 2pt solid rgba(255, 192, 203, 1.00);border-top: 2pt solid rgba(255, 192, 203, 1.00);border-left: 2pt solid rgba(255, 192, 203, 1.00);border-right: 2pt solid rgba(255, 192, 203, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac01{background-color:transparent;vertical-align: top;border-bottom: 2pt solid rgba(255, 192, 203, 1.00);border-top: 2pt solid rgba(255, 192, 203, 1.00);border-left: 2pt solid rgba(255, 192, 203, 1.00);border-right: 2pt solid rgba(255, 192, 203, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac0a{background-color:transparent;vertical-align: top;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 2pt solid rgba(255, 192, 203, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac0b{background-color:transparent;vertical-align: top;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac0c{background-color:transparent;vertical-align: top;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac14{background-color:transparent;vertical-align: top;border-bottom: 0 solid rgba(0, 0, 0, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 2pt solid rgba(255, 192, 203, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac15{background-color:transparent;vertical-align: top;border-bottom: 2pt solid rgba(255, 192, 203, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 2pt solid rgba(255, 192, 203, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac16{background-color:transparent;vertical-align: top;border-bottom: 2pt solid rgba(255, 192, 203, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac1e{background-color:transparent;vertical-align: top;border-bottom: 2pt solid rgba(255, 192, 203, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 0 solid rgba(0, 0, 0, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac1f{background-color:transparent;vertical-align: top;border-bottom: 2pt solid rgba(255, 192, 203, 1.00);border-top: 0 solid rgba(0, 0, 0, 1.00);border-left: 0 solid rgba(0, 0, 0, 1.00);border-right: 2pt solid rgba(255, 192, 203, 1.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac20{background-color:transparent;vertical-align: top;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac21{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac28{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}.cl-88b2ac29{background-color:transparent;vertical-align: middle;border-bottom: 0 solid rgba(255, 255, 255, 0.00);border-top: 0 solid rgba(255, 255, 255, 0.00);border-left: 0 solid rgba(255, 255, 255, 0.00);border-right: 0 solid rgba(255, 255, 255, 0.00);margin-bottom:0;margin-top:0;margin-left:0;margin-right:0;}Title says WhaaaatOh, ok. A: Drug XB: PlaceboC: Combinationrow1 {1}555row21, 2 {2}1, 2 {2}1, 2 {2}{1} - row 1 - row footnote{2} - row 2 - cell footnoteha HA! Footer! # Extending themes my_theme <- function(font_size = 6) { # here can pass additional arguments for default theme function(flx, ...) { # First apply theme_docx_default flx <- theme_docx_default(font_size = font_size)(flx, ...) # Then apply additional styling flx <- flextable::border_inner(flx, part = \"body\", border = flextable::fp_border_default(width = 0.5) ) return(flx) } } flx <- tt_to_flextable(tbl, theme = my_theme())"},{"path":[]},{"path":"https://insightsengineering.github.io/rtables.officer/main/news/index.html","id":"new-features-0-0-1-9008","dir":"Changelog","previous_headings":"","what":"New Features","title":"rtables.officer 0.0.1.9008","text":"First version.","code":""}]