From 89a59c2888c4c7687c3db84d565e9c573128a344 Mon Sep 17 00:00:00 2001 From: vincentarelbundock Date: Tue, 24 Sep 2024 10:30:50 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20vincenta?= =?UTF-8?q?relbundock/tinytable@8d204a07531e58d33707d8d7889d78bf22d9059b?= =?UTF-8?q?=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- man/format_tt.html | 130 +- man/group_tt.html | 330 ++--- man/rbind2-tinytable-tinytable-method.html | 92 +- man/theme_tt.html | 34 +- man/tt.html | 88 +- search.json | 12 +- vignettes/custom.html | 204 +-- vignettes/format.html | 400 ++--- vignettes/group.html | 688 ++++----- vignettes/plot.html | 246 ++-- vignettes/style.html | 1282 ++++++++--------- vignettes/theme.html | 128 +- vignettes/tinytable.html | 516 +++---- .../id17n7yfbiqokvefn8xa31.png | Bin 0 -> 2564 bytes .../id3bcqav9iavdst1wy7emp.png | Bin 0 -> 11912 bytes .../id3l4nfzts9g8wt53tttu9.png | Bin 0 -> 1829 bytes .../id4a1spfe8hlrg31iy8zts.png | Bin 0 -> 11898 bytes .../id4fqz0fpq2h2ilb50ustb.png | Bin 0 -> 512 bytes .../id5259apc1dorv60kdbww2.png | Bin 0 -> 2250 bytes .../id5d3wqwrami515dglx2xz.png | Bin 0 -> 548 bytes .../id6w2suf70inl6t15zanqv.png | Bin 0 -> 1846 bytes .../id8c1pmyi26bmqv0t0i0o4.png | Bin 0 -> 10393 bytes .../id8x4eknor7gm5g4aj9kdj.png | Bin 0 -> 2558 bytes .../id9z5czsduiy3mo1elogly.png | Bin 0 -> 2077 bytes .../iddm56rt5xpq0p02qr769o.png | Bin 0 -> 15240 bytes .../ide05m6o10dq3u93gode7v.png | Bin 0 -> 11877 bytes .../ideb5evek0fzucidbgtufe.png | Bin 0 -> 2214 bytes .../idgdmi9l1u5nlhe66lo4nt.png | Bin 0 -> 5080 bytes .../idhdbifzeyu6ft9lto285l.png | Bin 0 -> 529 bytes .../idig180gixsumh4j09pwft.png | Bin 0 -> 2444 bytes .../idirk1jpynxzxbzj0p3i4t.png | Bin 0 -> 1728 bytes .../idj94r2avcva8yta462nsz.png | Bin 0 -> 12837 bytes .../idmgaww9nw3gzx0013bee5.png | Bin 0 -> 2072 bytes .../idmsriaso1rrih0xzgxpeb.png | Bin 0 -> 5057 bytes .../idp60vwa4h91cbr7fkuy49.png | Bin 0 -> 1127 bytes .../idqqh4krbsglt7ignvcvna.png | Bin 0 -> 2191 bytes .../idtppsi0dolmx4rd4t4mnk.png | Bin 0 -> 9865 bytes .../idufs1a5fhuqnmswjulpln.png | Bin 0 -> 5073 bytes .../idv9ohq0qtlp5rbik738mz.png | Bin 0 -> 12175 bytes .../idylvoxdmn1nxhusggi3lb.png | Bin 0 -> 8399 bytes vignettes/tinytable_tutorial.pdf | Bin 1804098 -> 1803321 bytes 41 files changed, 2075 insertions(+), 2075 deletions(-) create mode 100644 vignettes/tinytable_assets/id17n7yfbiqokvefn8xa31.png create mode 100644 vignettes/tinytable_assets/id3bcqav9iavdst1wy7emp.png create mode 100644 vignettes/tinytable_assets/id3l4nfzts9g8wt53tttu9.png create mode 100644 vignettes/tinytable_assets/id4a1spfe8hlrg31iy8zts.png create mode 100644 vignettes/tinytable_assets/id4fqz0fpq2h2ilb50ustb.png create mode 100644 vignettes/tinytable_assets/id5259apc1dorv60kdbww2.png create mode 100644 vignettes/tinytable_assets/id5d3wqwrami515dglx2xz.png create mode 100644 vignettes/tinytable_assets/id6w2suf70inl6t15zanqv.png create mode 100644 vignettes/tinytable_assets/id8c1pmyi26bmqv0t0i0o4.png create mode 100644 vignettes/tinytable_assets/id8x4eknor7gm5g4aj9kdj.png create mode 100644 vignettes/tinytable_assets/id9z5czsduiy3mo1elogly.png create mode 100644 vignettes/tinytable_assets/iddm56rt5xpq0p02qr769o.png create mode 100644 vignettes/tinytable_assets/ide05m6o10dq3u93gode7v.png create mode 100644 vignettes/tinytable_assets/ideb5evek0fzucidbgtufe.png create mode 100644 vignettes/tinytable_assets/idgdmi9l1u5nlhe66lo4nt.png create mode 100644 vignettes/tinytable_assets/idhdbifzeyu6ft9lto285l.png create mode 100644 vignettes/tinytable_assets/idig180gixsumh4j09pwft.png create mode 100644 vignettes/tinytable_assets/idirk1jpynxzxbzj0p3i4t.png create mode 100644 vignettes/tinytable_assets/idj94r2avcva8yta462nsz.png create mode 100644 vignettes/tinytable_assets/idmgaww9nw3gzx0013bee5.png create mode 100644 vignettes/tinytable_assets/idmsriaso1rrih0xzgxpeb.png create mode 100644 vignettes/tinytable_assets/idp60vwa4h91cbr7fkuy49.png create mode 100644 vignettes/tinytable_assets/idqqh4krbsglt7ignvcvna.png create mode 100644 vignettes/tinytable_assets/idtppsi0dolmx4rd4t4mnk.png create mode 100644 vignettes/tinytable_assets/idufs1a5fhuqnmswjulpln.png create mode 100644 vignettes/tinytable_assets/idv9ohq0qtlp5rbik738mz.png create mode 100644 vignettes/tinytable_assets/idylvoxdmn1nxhusggi3lb.png diff --git a/man/format_tt.html b/man/format_tt.html index a1fd8ed8..22f0cb0d 100644 --- a/man/format_tt.html +++ b/man/format_tt.html @@ -701,12 +701,12 @@

Examples

- +
@@ -760,16 +760,16 @@

Examples

- + - - + + - +
10 000 9 99910 002
9 99910 00110 00010 002
10 002 9 99910 000
@@ -782,12 +782,12 @@

Examples

- +
@@ -861,12 +861,12 @@

Examples

-
+
@@ -952,12 +952,12 @@

Examples

-
+
@@ -1025,12 +1025,12 @@

Examples

-
+
@@ -1098,12 +1098,12 @@

Examples

-
+
@@ -1182,12 +1182,12 @@

Examples

-
+
diff --git a/man/group_tt.html b/man/group_tt.html index 84df0f7d..582878f0 100644 --- a/man/group_tt.html +++ b/man/group_tt.html @@ -480,12 +480,12 @@

Examples

-
+
@@ -555,36 +555,36 @@

Examples

- - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + +
-1.0078862 0.4352756-1.2928994 0.3438932
1.4752168 0.9104151-0.2131877 0.9079434
-0.8107267-0.2365799-1.0560067 0.8225227
-1.2232999 0.1458874 1.0793180-1.9694722
0.9005819-0.6132735-0.0945106 0.5980063
-0.1360992-1.1905177 1.8215610 0.2414946
-0.6259448-1.0824529 1.1239596 1.0194036
0.6234085 0.3027523-1.6838725-1.0095785
@@ -604,12 +604,12 @@

Examples

- +
@@ -778,12 +778,12 @@

Examples

-
+
@@ -975,12 +975,12 @@

Examples

-
+
@@ -1165,12 +1165,12 @@

Examples

-
Hamburgers
+
diff --git a/man/rbind2-tinytable-tinytable-method.html b/man/rbind2-tinytable-tinytable-method.html index 092bbcda..2b7dbade 100644 --- a/man/rbind2-tinytable-tinytable-method.html +++ b/man/rbind2-tinytable-tinytable-method.html @@ -487,12 +487,12 @@

Examples

-
Foo
+
@@ -603,12 +603,12 @@

Examples

-
Combine two tiny tables.
+
@@ -720,12 +720,12 @@

Examples

-
Combine two tiny tables.
+
@@ -830,12 +830,12 @@

Examples

-
Combine two tiny tables.
+
diff --git a/man/theme_tt.html b/man/theme_tt.html index cce41cff..5bee552d 100644 --- a/man/theme_tt.html +++ b/man/theme_tt.html @@ -575,12 +575,12 @@

Examples

-
Combine two tiny tables.
+
diff --git a/man/tt.html b/man/tt.html index 2e3e1c84..68a093cd 100644 --- a/man/tt.html +++ b/man/tt.html @@ -632,12 +632,12 @@

Examples

-
+
@@ -737,12 +737,12 @@

Examples

-
+
@@ -965,12 +965,12 @@

Examples

-
+
diff --git a/search.json b/search.json index 1b886dfe..8eaa7ba9 100644 --- a/search.json +++ b/search.json @@ -76,7 +76,7 @@ "href": "man/format_tt.html", "title": "tinytable", "section": "", - "text": "This function formats the columns of a data frame based on the column type (logical, date, numeric). It allows various formatting options like significant digits, decimal points, and scientific notation. It also includes custom formatting for date and boolean values. If this function is applied several times to the same cell, the last transformation is retained and the previous calls are ignored, except for the escape argument which can be applied to previously transformed data.\n\n\n\nformat_tt(\n x,\n i = NULL,\n j = NULL,\n digits = get_option(\"tinytable_format_digits\", default = NULL),\n num_fmt = get_option(\"tinytable_format_num_fmt\", default = \"significant\"),\n num_zero = get_option(\"tinytable_format_num_zero\", default = FALSE),\n num_suffix = get_option(\"tinytable_format_num_suffix\", default = FALSE),\n num_mark_big = get_option(\"tinytable_format_num_mark_big\", default = \"\"),\n num_mark_dec = get_option(\"tinytable_format_num_mark_dec\", default =\n getOption(\"OutDec\", default = \".\")),\n date = get_option(\"tinytable_format_date\", default = \"%Y-%m-%d\"),\n bool = get_option(\"tinytable_format_bool\", default = function(column)\n tools::toTitleCase(tolower(column))),\n math = get_option(\"tinytable_format_math\", default = FALSE),\n other = get_option(\"tinytable_format_other\", default = as.character),\n replace = get_option(\"tinytable_format_replace\", default = TRUE),\n escape = get_option(\"tinytable_format_escape\", default = FALSE),\n markdown = get_option(\"tinytable_format_markdown\", default = FALSE),\n quarto = get_option(\"tinytable_format_quarto\", default = FALSE),\n fn = get_option(\"tinytable_format_fn\", default = NULL),\n sprintf = get_option(\"tinytable_format_sprintf\", default = NULL),\n ...\n)\n\n\n\n\n\n\n\nx\n\n\nA data frame or a vector to be formatted.\n\n\n\n\ni\n\n\nRow indices where the formatting should be applied.\n\n\n\n\nj\n\n\nColumn indices where the styling should be applied. Can be:\n\n\nInteger vectors indicating column positions.\n\n\nCharacter vector indicating column names.\n\n\nA single string specifying a Perl-style regular expression used to match column names.\n\n\n\n\n\n\ndigits\n\n\nNumber of significant digits or decimal places.\n\n\n\n\nnum_fmt\n\n\nThe format for numeric values; one of ‘significant’, ‘significant_cell’, ‘decimal’, or ‘scientific’.\n\n\n\n\nnum_zero\n\n\nLogical; if TRUE, trailing zeros are kept in \"decimal\" format (but not in \"significant\" format).\n\n\n\n\nnum_suffix\n\n\nLogical; if TRUE display short numbers with digits significant digits and K (thousands), M (millions), B (billions), or T (trillions) suffixes.\n\n\n\n\nnum_mark_big\n\n\nCharacter to use as a thousands separator.\n\n\n\n\nnum_mark_dec\n\n\nDecimal mark character. Default is the global option ‘OutDec’.\n\n\n\n\ndate\n\n\nA string passed to the format() function, such as \"%Y-%m-%d\". See the \"Details\" section in ?strptime\n\n\n\n\nbool\n\n\nA function to format logical columns. Defaults to title case.\n\n\n\n\nmath\n\n\nLogical. If TRUE, wrap cell values in math mode $..$. This is useful for LaTeX output or with HTML MathJax options(tinytable_html_mathjax=TRUE).\n\n\n\n\nother\n\n\nA function to format columns of other types. Defaults to as.character().\n\n\n\n\nreplace\n\n\nLogical, String or Named list of vectors\n\n\nTRUE: Replace NA by an empty string.\n\n\nFALSE: Print NA as the string \"NA\".\n\n\nString: Replace NA entries by the user-supplied string.\n\n\nNamed list: Replace matching elements of the vectors in the list by theirs names. Example:\n\n\nlist(“-” = c(NA, NaN), “Tiny” = -Inf, “Massive” = Inf)\n\n\n\n\n\n\n\n\nescape\n\n\nLogical or \"latex\" or \"html\". If TRUE, escape special characters to display them as text in the format of the output of a tt() table.\n\n\nIf i and j are both NULL, escape all cells, column names, caption, notes, and spanning labels created by group_tt().\n\n\n\n\n\n\nmarkdown\n\n\nLogical; if TRUE, render markdown syntax in cells. Ex: italicized text is properly italicized in HTML and LaTeX.\n\n\n\n\nquarto\n\n\nLogical. Enable Quarto data processing and wrap cell content in a data-qmd span (HTML) or macro (LaTeX). See warnings in the Global Options section below.\n\n\n\n\nfn\n\n\nFunction for custom formatting. Accepts a vector and returns a character vector of the same length.\n\n\n\n\nsprintf\n\n\nString passed to the ?sprintf function to format numbers or interpolate strings with a user-defined pattern (similar to the glue package, but using Base R).\n\n\n\n\n…\n\n\nAdditional arguments are ignored.\n\n\n\n\n\n\nA data frame with formatted columns.\n\n\n\n\n\n\n\noptions(“tinytable_quarto_figure” = FALSE): Typst only. Normally, it is best to allow Quarto to define the figure environment, so the default behavior is to not include one.\n\n\n\nThe format_tt(quarto=TRUE) argument activates Quarto data processing for specific cells. This funcationality comes with a few warnings:\n\n\nCurrently, Quarto provides a LaTeX macro, but it does not appear to do anything with it. References and markdown codes may not be processed as expected in LaTeX.\n\n\nQuarto data processing can enter in conflict with tinytable styling or formatting options. See below for how to disable it.\n\n\noptions(tinytable_quarto_disable_processing = TRUE)\nDisable Quarto processing of cell content. Setting this global option to FALSE may lead to conflicts with some tinytable features, but it also allows use of markdown and Quarto-specific code in table cells, such as cross-references.\n\nx <- data.frame(Math = \"x^2^\", Citation = \"@Lovelace1842\")\nfn <- function(z) sprintf(\"<span data-qmd='%s'></span>\", z)\ntt(x) |> format_tt(i = 1, fn = fn)\n\n\nSee this link for more details: https://quarto.org/docs/authoring/tables.html#disabling-quarto-table-processing\n\n\n\noptions(tinytable_html_mathjax = TRUE): insert MathJax scripts in the HTML document. Warning: This may conflict with other elements of the page if MathJax is otherwise loaded.\n\n\noptions(tinytable_html_portable = TRUE): plot_tt() inserts base 64 encoded images directly in the HTML file rather than use external links.\n\n\n\n\n\noptions(tinytable_pdf_clean = TRUE) deletes temporary and log files.\n\n\noptions(tinytable_pdf_engine = “xelatex”): \"xelatex\", \"pdflatex\", \"lualatex\"\n\n\n\n\n\n\nlibrary(\"tinytable\")\n\ndat <- data.frame(\n a = rnorm(3, mean = 10000),\n b = rnorm(3, 10000))\ntab <- tt(dat)\nformat_tt(tab,\n digits = 2,\n num_mark_dec = \",\",\n num_mark_big = \" \")\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n 10 000\n 9 999\n \n \n 9 999\n 10 001\n \n \n 10 002\n 9 999\n \n \n \n \n\n\nk <- tt(data.frame(x = c(0.000123456789, 12.4356789)))\nformat_tt(k, digits = 2, num_fmt = \"significant_cell\")\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 0.00012\n \n \n 12\n \n \n \n \n\n\ndat <- data.frame(\n a = c(\"Burger\", \"Halloumi\", \"Tofu\", \"Beans\"),\n b = c(1.43202, 201.399, 0.146188, 0.0031),\n c = c(98938272783457, 7288839482, 29111727, 93945))\ntt(dat) |>\n format_tt(j = \"a\", sprintf = \"Food: %s\") |>\n format_tt(j = 2, digits = 1, num_fmt = \"decimal\", num_zero = TRUE) |>\n format_tt(j = \"c\", digits = 2, num_suffix = TRUE)\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n c\n \n \n \n \n \n Food: Burger\n 1.4\n 99T\n \n \n Food: Halloumi\n 201.4\n 7.3B\n \n \n Food: Tofu\n 0.1\n 29M\n \n \n Food: Beans\n 0.0\n 94K\n \n \n \n \n\n\ny <- tt(data.frame(x = c(123456789.678, 12435.6789)))\nformat_tt(y, digits=3, num_mark_big=\" \")\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 123 456 790\n \n \n 12 436\n \n \n \n \n\n\nx <- tt(data.frame(Text = c(\"_italicized text_\", \"__bold text__\")))\nformat_tt(x, markdown=TRUE)\n\n\n\n \n\n \n \n \n \n \n \n Text\n \n \n \n \n \n italicized text\n \n \n bold text\n \n \n \n \n\n\ntab <- data.frame(a = c(NA, 1, 2), b = c(3, NA, 5))\ntt(tab) |> format_tt(replace = \"-\")\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n -\n 3\n \n \n 1\n -\n \n \n 2\n 5\n \n \n \n \n\n\ndat <- data.frame(\n \"LaTeX\" = c(\"Dollars $\", \"Percent %\", \"Underscore _\"),\n \"HTML\" = c(\"<br>\", \"<sup>4</sup>\", \"<emph>blah</emph>\")\n)\ntt(dat) |> format_tt(escape = TRUE) \n\n\n\n \n\n \n \n \n \n \n \n LaTeX\n HTML\n \n \n \n \n \n Dollars $\n <br>\n \n \n Percent %\n <sup>4</sup>\n \n \n Underscore _\n <emph>blah</emph>", + "text": "This function formats the columns of a data frame based on the column type (logical, date, numeric). It allows various formatting options like significant digits, decimal points, and scientific notation. It also includes custom formatting for date and boolean values. If this function is applied several times to the same cell, the last transformation is retained and the previous calls are ignored, except for the escape argument which can be applied to previously transformed data.\n\n\n\nformat_tt(\n x,\n i = NULL,\n j = NULL,\n digits = get_option(\"tinytable_format_digits\", default = NULL),\n num_fmt = get_option(\"tinytable_format_num_fmt\", default = \"significant\"),\n num_zero = get_option(\"tinytable_format_num_zero\", default = FALSE),\n num_suffix = get_option(\"tinytable_format_num_suffix\", default = FALSE),\n num_mark_big = get_option(\"tinytable_format_num_mark_big\", default = \"\"),\n num_mark_dec = get_option(\"tinytable_format_num_mark_dec\", default =\n getOption(\"OutDec\", default = \".\")),\n date = get_option(\"tinytable_format_date\", default = \"%Y-%m-%d\"),\n bool = get_option(\"tinytable_format_bool\", default = function(column)\n tools::toTitleCase(tolower(column))),\n math = get_option(\"tinytable_format_math\", default = FALSE),\n other = get_option(\"tinytable_format_other\", default = as.character),\n replace = get_option(\"tinytable_format_replace\", default = TRUE),\n escape = get_option(\"tinytable_format_escape\", default = FALSE),\n markdown = get_option(\"tinytable_format_markdown\", default = FALSE),\n quarto = get_option(\"tinytable_format_quarto\", default = FALSE),\n fn = get_option(\"tinytable_format_fn\", default = NULL),\n sprintf = get_option(\"tinytable_format_sprintf\", default = NULL),\n ...\n)\n\n\n\n\n\n\n\nx\n\n\nA data frame or a vector to be formatted.\n\n\n\n\ni\n\n\nRow indices where the formatting should be applied.\n\n\n\n\nj\n\n\nColumn indices where the styling should be applied. Can be:\n\n\nInteger vectors indicating column positions.\n\n\nCharacter vector indicating column names.\n\n\nA single string specifying a Perl-style regular expression used to match column names.\n\n\n\n\n\n\ndigits\n\n\nNumber of significant digits or decimal places.\n\n\n\n\nnum_fmt\n\n\nThe format for numeric values; one of ‘significant’, ‘significant_cell’, ‘decimal’, or ‘scientific’.\n\n\n\n\nnum_zero\n\n\nLogical; if TRUE, trailing zeros are kept in \"decimal\" format (but not in \"significant\" format).\n\n\n\n\nnum_suffix\n\n\nLogical; if TRUE display short numbers with digits significant digits and K (thousands), M (millions), B (billions), or T (trillions) suffixes.\n\n\n\n\nnum_mark_big\n\n\nCharacter to use as a thousands separator.\n\n\n\n\nnum_mark_dec\n\n\nDecimal mark character. Default is the global option ‘OutDec’.\n\n\n\n\ndate\n\n\nA string passed to the format() function, such as \"%Y-%m-%d\". See the \"Details\" section in ?strptime\n\n\n\n\nbool\n\n\nA function to format logical columns. Defaults to title case.\n\n\n\n\nmath\n\n\nLogical. If TRUE, wrap cell values in math mode $..$. This is useful for LaTeX output or with HTML MathJax options(tinytable_html_mathjax=TRUE).\n\n\n\n\nother\n\n\nA function to format columns of other types. Defaults to as.character().\n\n\n\n\nreplace\n\n\nLogical, String or Named list of vectors\n\n\nTRUE: Replace NA by an empty string.\n\n\nFALSE: Print NA as the string \"NA\".\n\n\nString: Replace NA entries by the user-supplied string.\n\n\nNamed list: Replace matching elements of the vectors in the list by theirs names. Example:\n\n\nlist(“-” = c(NA, NaN), “Tiny” = -Inf, “Massive” = Inf)\n\n\n\n\n\n\n\n\nescape\n\n\nLogical or \"latex\" or \"html\". If TRUE, escape special characters to display them as text in the format of the output of a tt() table.\n\n\nIf i and j are both NULL, escape all cells, column names, caption, notes, and spanning labels created by group_tt().\n\n\n\n\n\n\nmarkdown\n\n\nLogical; if TRUE, render markdown syntax in cells. Ex: italicized text is properly italicized in HTML and LaTeX.\n\n\n\n\nquarto\n\n\nLogical. Enable Quarto data processing and wrap cell content in a data-qmd span (HTML) or macro (LaTeX). See warnings in the Global Options section below.\n\n\n\n\nfn\n\n\nFunction for custom formatting. Accepts a vector and returns a character vector of the same length.\n\n\n\n\nsprintf\n\n\nString passed to the ?sprintf function to format numbers or interpolate strings with a user-defined pattern (similar to the glue package, but using Base R).\n\n\n\n\n…\n\n\nAdditional arguments are ignored.\n\n\n\n\n\n\nA data frame with formatted columns.\n\n\n\n\n\n\n\noptions(“tinytable_quarto_figure” = FALSE): Typst only. Normally, it is best to allow Quarto to define the figure environment, so the default behavior is to not include one.\n\n\n\nThe format_tt(quarto=TRUE) argument activates Quarto data processing for specific cells. This funcationality comes with a few warnings:\n\n\nCurrently, Quarto provides a LaTeX macro, but it does not appear to do anything with it. References and markdown codes may not be processed as expected in LaTeX.\n\n\nQuarto data processing can enter in conflict with tinytable styling or formatting options. See below for how to disable it.\n\n\noptions(tinytable_quarto_disable_processing = TRUE)\nDisable Quarto processing of cell content. Setting this global option to FALSE may lead to conflicts with some tinytable features, but it also allows use of markdown and Quarto-specific code in table cells, such as cross-references.\n\nx <- data.frame(Math = \"x^2^\", Citation = \"@Lovelace1842\")\nfn <- function(z) sprintf(\"<span data-qmd='%s'></span>\", z)\ntt(x) |> format_tt(i = 1, fn = fn)\n\n\nSee this link for more details: https://quarto.org/docs/authoring/tables.html#disabling-quarto-table-processing\n\n\n\noptions(tinytable_html_mathjax = TRUE): insert MathJax scripts in the HTML document. Warning: This may conflict with other elements of the page if MathJax is otherwise loaded.\n\n\noptions(tinytable_html_portable = TRUE): plot_tt() inserts base 64 encoded images directly in the HTML file rather than use external links.\n\n\n\n\n\noptions(tinytable_pdf_clean = TRUE) deletes temporary and log files.\n\n\noptions(tinytable_pdf_engine = “xelatex”): \"xelatex\", \"pdflatex\", \"lualatex\"\n\n\n\n\n\n\nlibrary(\"tinytable\")\n\ndat <- data.frame(\n a = rnorm(3, mean = 10000),\n b = rnorm(3, 10000))\ntab <- tt(dat)\nformat_tt(tab,\n digits = 2,\n num_mark_dec = \",\",\n num_mark_big = \" \")\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n 9 999\n 10 002\n \n \n 10 000\n 10 002\n \n \n 10 002\n 10 000\n \n \n \n \n\n\nk <- tt(data.frame(x = c(0.000123456789, 12.4356789)))\nformat_tt(k, digits = 2, num_fmt = \"significant_cell\")\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 0.00012\n \n \n 12\n \n \n \n \n\n\ndat <- data.frame(\n a = c(\"Burger\", \"Halloumi\", \"Tofu\", \"Beans\"),\n b = c(1.43202, 201.399, 0.146188, 0.0031),\n c = c(98938272783457, 7288839482, 29111727, 93945))\ntt(dat) |>\n format_tt(j = \"a\", sprintf = \"Food: %s\") |>\n format_tt(j = 2, digits = 1, num_fmt = \"decimal\", num_zero = TRUE) |>\n format_tt(j = \"c\", digits = 2, num_suffix = TRUE)\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n c\n \n \n \n \n \n Food: Burger\n 1.4\n 99T\n \n \n Food: Halloumi\n 201.4\n 7.3B\n \n \n Food: Tofu\n 0.1\n 29M\n \n \n Food: Beans\n 0.0\n 94K\n \n \n \n \n\n\ny <- tt(data.frame(x = c(123456789.678, 12435.6789)))\nformat_tt(y, digits=3, num_mark_big=\" \")\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 123 456 790\n \n \n 12 436\n \n \n \n \n\n\nx <- tt(data.frame(Text = c(\"_italicized text_\", \"__bold text__\")))\nformat_tt(x, markdown=TRUE)\n\n\n\n \n\n \n \n \n \n \n \n Text\n \n \n \n \n \n italicized text\n \n \n bold text\n \n \n \n \n\n\ntab <- data.frame(a = c(NA, 1, 2), b = c(3, NA, 5))\ntt(tab) |> format_tt(replace = \"-\")\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n -\n 3\n \n \n 1\n -\n \n \n 2\n 5\n \n \n \n \n\n\ndat <- data.frame(\n \"LaTeX\" = c(\"Dollars $\", \"Percent %\", \"Underscore _\"),\n \"HTML\" = c(\"<br>\", \"<sup>4</sup>\", \"<emph>blah</emph>\")\n)\ntt(dat) |> format_tt(escape = TRUE) \n\n\n\n \n\n \n \n \n \n \n \n LaTeX\n HTML\n \n \n \n \n \n Dollars $\n <br>\n \n \n Percent %\n <sup>4</sup>\n \n \n Underscore _\n <emph>blah</emph>", "crumbs": [ "Tutorial (PDF)", "Functions", @@ -88,7 +88,7 @@ "href": "man/format_tt.html#format-columns-of-a-data-frame", "title": "tinytable", "section": "", - "text": "This function formats the columns of a data frame based on the column type (logical, date, numeric). It allows various formatting options like significant digits, decimal points, and scientific notation. It also includes custom formatting for date and boolean values. If this function is applied several times to the same cell, the last transformation is retained and the previous calls are ignored, except for the escape argument which can be applied to previously transformed data.\n\n\n\nformat_tt(\n x,\n i = NULL,\n j = NULL,\n digits = get_option(\"tinytable_format_digits\", default = NULL),\n num_fmt = get_option(\"tinytable_format_num_fmt\", default = \"significant\"),\n num_zero = get_option(\"tinytable_format_num_zero\", default = FALSE),\n num_suffix = get_option(\"tinytable_format_num_suffix\", default = FALSE),\n num_mark_big = get_option(\"tinytable_format_num_mark_big\", default = \"\"),\n num_mark_dec = get_option(\"tinytable_format_num_mark_dec\", default =\n getOption(\"OutDec\", default = \".\")),\n date = get_option(\"tinytable_format_date\", default = \"%Y-%m-%d\"),\n bool = get_option(\"tinytable_format_bool\", default = function(column)\n tools::toTitleCase(tolower(column))),\n math = get_option(\"tinytable_format_math\", default = FALSE),\n other = get_option(\"tinytable_format_other\", default = as.character),\n replace = get_option(\"tinytable_format_replace\", default = TRUE),\n escape = get_option(\"tinytable_format_escape\", default = FALSE),\n markdown = get_option(\"tinytable_format_markdown\", default = FALSE),\n quarto = get_option(\"tinytable_format_quarto\", default = FALSE),\n fn = get_option(\"tinytable_format_fn\", default = NULL),\n sprintf = get_option(\"tinytable_format_sprintf\", default = NULL),\n ...\n)\n\n\n\n\n\n\n\nx\n\n\nA data frame or a vector to be formatted.\n\n\n\n\ni\n\n\nRow indices where the formatting should be applied.\n\n\n\n\nj\n\n\nColumn indices where the styling should be applied. Can be:\n\n\nInteger vectors indicating column positions.\n\n\nCharacter vector indicating column names.\n\n\nA single string specifying a Perl-style regular expression used to match column names.\n\n\n\n\n\n\ndigits\n\n\nNumber of significant digits or decimal places.\n\n\n\n\nnum_fmt\n\n\nThe format for numeric values; one of ‘significant’, ‘significant_cell’, ‘decimal’, or ‘scientific’.\n\n\n\n\nnum_zero\n\n\nLogical; if TRUE, trailing zeros are kept in \"decimal\" format (but not in \"significant\" format).\n\n\n\n\nnum_suffix\n\n\nLogical; if TRUE display short numbers with digits significant digits and K (thousands), M (millions), B (billions), or T (trillions) suffixes.\n\n\n\n\nnum_mark_big\n\n\nCharacter to use as a thousands separator.\n\n\n\n\nnum_mark_dec\n\n\nDecimal mark character. Default is the global option ‘OutDec’.\n\n\n\n\ndate\n\n\nA string passed to the format() function, such as \"%Y-%m-%d\". See the \"Details\" section in ?strptime\n\n\n\n\nbool\n\n\nA function to format logical columns. Defaults to title case.\n\n\n\n\nmath\n\n\nLogical. If TRUE, wrap cell values in math mode $..$. This is useful for LaTeX output or with HTML MathJax options(tinytable_html_mathjax=TRUE).\n\n\n\n\nother\n\n\nA function to format columns of other types. Defaults to as.character().\n\n\n\n\nreplace\n\n\nLogical, String or Named list of vectors\n\n\nTRUE: Replace NA by an empty string.\n\n\nFALSE: Print NA as the string \"NA\".\n\n\nString: Replace NA entries by the user-supplied string.\n\n\nNamed list: Replace matching elements of the vectors in the list by theirs names. Example:\n\n\nlist(“-” = c(NA, NaN), “Tiny” = -Inf, “Massive” = Inf)\n\n\n\n\n\n\n\n\nescape\n\n\nLogical or \"latex\" or \"html\". If TRUE, escape special characters to display them as text in the format of the output of a tt() table.\n\n\nIf i and j are both NULL, escape all cells, column names, caption, notes, and spanning labels created by group_tt().\n\n\n\n\n\n\nmarkdown\n\n\nLogical; if TRUE, render markdown syntax in cells. Ex: italicized text is properly italicized in HTML and LaTeX.\n\n\n\n\nquarto\n\n\nLogical. Enable Quarto data processing and wrap cell content in a data-qmd span (HTML) or macro (LaTeX). See warnings in the Global Options section below.\n\n\n\n\nfn\n\n\nFunction for custom formatting. Accepts a vector and returns a character vector of the same length.\n\n\n\n\nsprintf\n\n\nString passed to the ?sprintf function to format numbers or interpolate strings with a user-defined pattern (similar to the glue package, but using Base R).\n\n\n\n\n…\n\n\nAdditional arguments are ignored.\n\n\n\n\n\n\nA data frame with formatted columns.\n\n\n\n\n\n\n\noptions(“tinytable_quarto_figure” = FALSE): Typst only. Normally, it is best to allow Quarto to define the figure environment, so the default behavior is to not include one.\n\n\n\nThe format_tt(quarto=TRUE) argument activates Quarto data processing for specific cells. This funcationality comes with a few warnings:\n\n\nCurrently, Quarto provides a LaTeX macro, but it does not appear to do anything with it. References and markdown codes may not be processed as expected in LaTeX.\n\n\nQuarto data processing can enter in conflict with tinytable styling or formatting options. See below for how to disable it.\n\n\noptions(tinytable_quarto_disable_processing = TRUE)\nDisable Quarto processing of cell content. Setting this global option to FALSE may lead to conflicts with some tinytable features, but it also allows use of markdown and Quarto-specific code in table cells, such as cross-references.\n\nx <- data.frame(Math = \"x^2^\", Citation = \"@Lovelace1842\")\nfn <- function(z) sprintf(\"<span data-qmd='%s'></span>\", z)\ntt(x) |> format_tt(i = 1, fn = fn)\n\n\nSee this link for more details: https://quarto.org/docs/authoring/tables.html#disabling-quarto-table-processing\n\n\n\noptions(tinytable_html_mathjax = TRUE): insert MathJax scripts in the HTML document. Warning: This may conflict with other elements of the page if MathJax is otherwise loaded.\n\n\noptions(tinytable_html_portable = TRUE): plot_tt() inserts base 64 encoded images directly in the HTML file rather than use external links.\n\n\n\n\n\noptions(tinytable_pdf_clean = TRUE) deletes temporary and log files.\n\n\noptions(tinytable_pdf_engine = “xelatex”): \"xelatex\", \"pdflatex\", \"lualatex\"\n\n\n\n\n\n\nlibrary(\"tinytable\")\n\ndat <- data.frame(\n a = rnorm(3, mean = 10000),\n b = rnorm(3, 10000))\ntab <- tt(dat)\nformat_tt(tab,\n digits = 2,\n num_mark_dec = \",\",\n num_mark_big = \" \")\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n 10 000\n 9 999\n \n \n 9 999\n 10 001\n \n \n 10 002\n 9 999\n \n \n \n \n\n\nk <- tt(data.frame(x = c(0.000123456789, 12.4356789)))\nformat_tt(k, digits = 2, num_fmt = \"significant_cell\")\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 0.00012\n \n \n 12\n \n \n \n \n\n\ndat <- data.frame(\n a = c(\"Burger\", \"Halloumi\", \"Tofu\", \"Beans\"),\n b = c(1.43202, 201.399, 0.146188, 0.0031),\n c = c(98938272783457, 7288839482, 29111727, 93945))\ntt(dat) |>\n format_tt(j = \"a\", sprintf = \"Food: %s\") |>\n format_tt(j = 2, digits = 1, num_fmt = \"decimal\", num_zero = TRUE) |>\n format_tt(j = \"c\", digits = 2, num_suffix = TRUE)\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n c\n \n \n \n \n \n Food: Burger\n 1.4\n 99T\n \n \n Food: Halloumi\n 201.4\n 7.3B\n \n \n Food: Tofu\n 0.1\n 29M\n \n \n Food: Beans\n 0.0\n 94K\n \n \n \n \n\n\ny <- tt(data.frame(x = c(123456789.678, 12435.6789)))\nformat_tt(y, digits=3, num_mark_big=\" \")\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 123 456 790\n \n \n 12 436\n \n \n \n \n\n\nx <- tt(data.frame(Text = c(\"_italicized text_\", \"__bold text__\")))\nformat_tt(x, markdown=TRUE)\n\n\n\n \n\n \n \n \n \n \n \n Text\n \n \n \n \n \n italicized text\n \n \n bold text\n \n \n \n \n\n\ntab <- data.frame(a = c(NA, 1, 2), b = c(3, NA, 5))\ntt(tab) |> format_tt(replace = \"-\")\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n -\n 3\n \n \n 1\n -\n \n \n 2\n 5\n \n \n \n \n\n\ndat <- data.frame(\n \"LaTeX\" = c(\"Dollars $\", \"Percent %\", \"Underscore _\"),\n \"HTML\" = c(\"<br>\", \"<sup>4</sup>\", \"<emph>blah</emph>\")\n)\ntt(dat) |> format_tt(escape = TRUE) \n\n\n\n \n\n \n \n \n \n \n \n LaTeX\n HTML\n \n \n \n \n \n Dollars $\n <br>\n \n \n Percent %\n <sup>4</sup>\n \n \n Underscore _\n <emph>blah</emph>", + "text": "This function formats the columns of a data frame based on the column type (logical, date, numeric). It allows various formatting options like significant digits, decimal points, and scientific notation. It also includes custom formatting for date and boolean values. If this function is applied several times to the same cell, the last transformation is retained and the previous calls are ignored, except for the escape argument which can be applied to previously transformed data.\n\n\n\nformat_tt(\n x,\n i = NULL,\n j = NULL,\n digits = get_option(\"tinytable_format_digits\", default = NULL),\n num_fmt = get_option(\"tinytable_format_num_fmt\", default = \"significant\"),\n num_zero = get_option(\"tinytable_format_num_zero\", default = FALSE),\n num_suffix = get_option(\"tinytable_format_num_suffix\", default = FALSE),\n num_mark_big = get_option(\"tinytable_format_num_mark_big\", default = \"\"),\n num_mark_dec = get_option(\"tinytable_format_num_mark_dec\", default =\n getOption(\"OutDec\", default = \".\")),\n date = get_option(\"tinytable_format_date\", default = \"%Y-%m-%d\"),\n bool = get_option(\"tinytable_format_bool\", default = function(column)\n tools::toTitleCase(tolower(column))),\n math = get_option(\"tinytable_format_math\", default = FALSE),\n other = get_option(\"tinytable_format_other\", default = as.character),\n replace = get_option(\"tinytable_format_replace\", default = TRUE),\n escape = get_option(\"tinytable_format_escape\", default = FALSE),\n markdown = get_option(\"tinytable_format_markdown\", default = FALSE),\n quarto = get_option(\"tinytable_format_quarto\", default = FALSE),\n fn = get_option(\"tinytable_format_fn\", default = NULL),\n sprintf = get_option(\"tinytable_format_sprintf\", default = NULL),\n ...\n)\n\n\n\n\n\n\n\nx\n\n\nA data frame or a vector to be formatted.\n\n\n\n\ni\n\n\nRow indices where the formatting should be applied.\n\n\n\n\nj\n\n\nColumn indices where the styling should be applied. Can be:\n\n\nInteger vectors indicating column positions.\n\n\nCharacter vector indicating column names.\n\n\nA single string specifying a Perl-style regular expression used to match column names.\n\n\n\n\n\n\ndigits\n\n\nNumber of significant digits or decimal places.\n\n\n\n\nnum_fmt\n\n\nThe format for numeric values; one of ‘significant’, ‘significant_cell’, ‘decimal’, or ‘scientific’.\n\n\n\n\nnum_zero\n\n\nLogical; if TRUE, trailing zeros are kept in \"decimal\" format (but not in \"significant\" format).\n\n\n\n\nnum_suffix\n\n\nLogical; if TRUE display short numbers with digits significant digits and K (thousands), M (millions), B (billions), or T (trillions) suffixes.\n\n\n\n\nnum_mark_big\n\n\nCharacter to use as a thousands separator.\n\n\n\n\nnum_mark_dec\n\n\nDecimal mark character. Default is the global option ‘OutDec’.\n\n\n\n\ndate\n\n\nA string passed to the format() function, such as \"%Y-%m-%d\". See the \"Details\" section in ?strptime\n\n\n\n\nbool\n\n\nA function to format logical columns. Defaults to title case.\n\n\n\n\nmath\n\n\nLogical. If TRUE, wrap cell values in math mode $..$. This is useful for LaTeX output or with HTML MathJax options(tinytable_html_mathjax=TRUE).\n\n\n\n\nother\n\n\nA function to format columns of other types. Defaults to as.character().\n\n\n\n\nreplace\n\n\nLogical, String or Named list of vectors\n\n\nTRUE: Replace NA by an empty string.\n\n\nFALSE: Print NA as the string \"NA\".\n\n\nString: Replace NA entries by the user-supplied string.\n\n\nNamed list: Replace matching elements of the vectors in the list by theirs names. Example:\n\n\nlist(“-” = c(NA, NaN), “Tiny” = -Inf, “Massive” = Inf)\n\n\n\n\n\n\n\n\nescape\n\n\nLogical or \"latex\" or \"html\". If TRUE, escape special characters to display them as text in the format of the output of a tt() table.\n\n\nIf i and j are both NULL, escape all cells, column names, caption, notes, and spanning labels created by group_tt().\n\n\n\n\n\n\nmarkdown\n\n\nLogical; if TRUE, render markdown syntax in cells. Ex: italicized text is properly italicized in HTML and LaTeX.\n\n\n\n\nquarto\n\n\nLogical. Enable Quarto data processing and wrap cell content in a data-qmd span (HTML) or macro (LaTeX). See warnings in the Global Options section below.\n\n\n\n\nfn\n\n\nFunction for custom formatting. Accepts a vector and returns a character vector of the same length.\n\n\n\n\nsprintf\n\n\nString passed to the ?sprintf function to format numbers or interpolate strings with a user-defined pattern (similar to the glue package, but using Base R).\n\n\n\n\n…\n\n\nAdditional arguments are ignored.\n\n\n\n\n\n\nA data frame with formatted columns.\n\n\n\n\n\n\n\noptions(“tinytable_quarto_figure” = FALSE): Typst only. Normally, it is best to allow Quarto to define the figure environment, so the default behavior is to not include one.\n\n\n\nThe format_tt(quarto=TRUE) argument activates Quarto data processing for specific cells. This funcationality comes with a few warnings:\n\n\nCurrently, Quarto provides a LaTeX macro, but it does not appear to do anything with it. References and markdown codes may not be processed as expected in LaTeX.\n\n\nQuarto data processing can enter in conflict with tinytable styling or formatting options. See below for how to disable it.\n\n\noptions(tinytable_quarto_disable_processing = TRUE)\nDisable Quarto processing of cell content. Setting this global option to FALSE may lead to conflicts with some tinytable features, but it also allows use of markdown and Quarto-specific code in table cells, such as cross-references.\n\nx <- data.frame(Math = \"x^2^\", Citation = \"@Lovelace1842\")\nfn <- function(z) sprintf(\"<span data-qmd='%s'></span>\", z)\ntt(x) |> format_tt(i = 1, fn = fn)\n\n\nSee this link for more details: https://quarto.org/docs/authoring/tables.html#disabling-quarto-table-processing\n\n\n\noptions(tinytable_html_mathjax = TRUE): insert MathJax scripts in the HTML document. Warning: This may conflict with other elements of the page if MathJax is otherwise loaded.\n\n\noptions(tinytable_html_portable = TRUE): plot_tt() inserts base 64 encoded images directly in the HTML file rather than use external links.\n\n\n\n\n\noptions(tinytable_pdf_clean = TRUE) deletes temporary and log files.\n\n\noptions(tinytable_pdf_engine = “xelatex”): \"xelatex\", \"pdflatex\", \"lualatex\"\n\n\n\n\n\n\nlibrary(\"tinytable\")\n\ndat <- data.frame(\n a = rnorm(3, mean = 10000),\n b = rnorm(3, 10000))\ntab <- tt(dat)\nformat_tt(tab,\n digits = 2,\n num_mark_dec = \",\",\n num_mark_big = \" \")\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n 9 999\n 10 002\n \n \n 10 000\n 10 002\n \n \n 10 002\n 10 000\n \n \n \n \n\n\nk <- tt(data.frame(x = c(0.000123456789, 12.4356789)))\nformat_tt(k, digits = 2, num_fmt = \"significant_cell\")\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 0.00012\n \n \n 12\n \n \n \n \n\n\ndat <- data.frame(\n a = c(\"Burger\", \"Halloumi\", \"Tofu\", \"Beans\"),\n b = c(1.43202, 201.399, 0.146188, 0.0031),\n c = c(98938272783457, 7288839482, 29111727, 93945))\ntt(dat) |>\n format_tt(j = \"a\", sprintf = \"Food: %s\") |>\n format_tt(j = 2, digits = 1, num_fmt = \"decimal\", num_zero = TRUE) |>\n format_tt(j = \"c\", digits = 2, num_suffix = TRUE)\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n c\n \n \n \n \n \n Food: Burger\n 1.4\n 99T\n \n \n Food: Halloumi\n 201.4\n 7.3B\n \n \n Food: Tofu\n 0.1\n 29M\n \n \n Food: Beans\n 0.0\n 94K\n \n \n \n \n\n\ny <- tt(data.frame(x = c(123456789.678, 12435.6789)))\nformat_tt(y, digits=3, num_mark_big=\" \")\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 123 456 790\n \n \n 12 436\n \n \n \n \n\n\nx <- tt(data.frame(Text = c(\"_italicized text_\", \"__bold text__\")))\nformat_tt(x, markdown=TRUE)\n\n\n\n \n\n \n \n \n \n \n \n Text\n \n \n \n \n \n italicized text\n \n \n bold text\n \n \n \n \n\n\ntab <- data.frame(a = c(NA, 1, 2), b = c(3, NA, 5))\ntt(tab) |> format_tt(replace = \"-\")\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n -\n 3\n \n \n 1\n -\n \n \n 2\n 5\n \n \n \n \n\n\ndat <- data.frame(\n \"LaTeX\" = c(\"Dollars $\", \"Percent %\", \"Underscore _\"),\n \"HTML\" = c(\"<br>\", \"<sup>4</sup>\", \"<emph>blah</emph>\")\n)\ntt(dat) |> format_tt(escape = TRUE) \n\n\n\n \n\n \n \n \n \n \n \n LaTeX\n HTML\n \n \n \n \n \n Dollars $\n <br>\n \n \n Percent %\n <sup>4</sup>\n \n \n Underscore _\n <emph>blah</emph>", "crumbs": [ "Tutorial (PDF)", "Functions", @@ -639,7 +639,7 @@ "href": "vignettes/format.html", "title": "Formatting", "section": "", - "text": "library(tinytable)\noptions(tinytable_tt_digits = 3)\noptions(tinytable_theme_placement_latex_float = \"H\")\nx <- mtcars[1:4, 1:5]\n\n\n\nThe tt() function is minimalist; it’s inteded purpose is simply to draw nice tables. Users who want to format numbers, dates, strings, and other variables in different ways should process their data before supplying it to the tt() table-drawing function. To do so, we can use the format_tt() function supplied by the tinytable.\nIn a very simple case—such as printing 2 significant digits of all numeric variables—we can use the digits argument of tt():\n\ndat <- data.frame(\n w = c(143002.2092, 201399.181, 100188.3883),\n x = c(1.43402, 201.399, 0.134588),\n y = as.Date(sample(1:1000, 3), origin = \"1970-01-01\"),\n z = c(TRUE, TRUE, FALSE))\n\ntt(dat, digits = 2)\n\n\n\n \n\n \n \n \n \n \n \n w\n x\n y\n z\n \n \n \n \n \n 143002\n 1.43\n 1971-03-08\n True \n \n \n 201399\n 201.4 \n 1970-08-16\n True \n \n \n 100188\n 0.13\n 1971-09-16\n False\n \n \n \n \n\n\n\nWe can get more fine-grained control over formatting by calling format_tt() after tt(), optionally by specifying the columns to format with j:\n\ntt(dat) |> \n format_tt(\n j = 2:4,\n digits = 1,\n date = \"%B %d %Y\") |>\n format_tt(\n j = 1,\n digits = 2,\n num_mark_big = \" \",\n num_mark_dec = \",\",\n num_fmt = \"decimal\")\n\n\n\n \n\n \n \n \n \n \n \n w\n x\n y\n z\n \n \n \n \n \n 143 002,21\n 1.4\n March 08 1971\n True\n \n \n 201 399,18\n 201.4\n August 16 1970\n True\n \n \n 100 188,39\n 0.1\n September 16 1971\n False\n \n \n \n \n\n\n\nWe can use a regular expression in j to select columns, and the ?sprintf function to format strings, numbers, and to do string interpolation (similar to the glue package, but using Base R):\n\ndat <- data.frame(\n a = c(\"Burger\", \"Halloumi\", \"Tofu\", \"Beans\"),\n b = c(1.43202, 201.399, 0.146188, 0.0031),\n c = c(98938272783457, 7288839482, 29111727, 93945))\ntt(dat) |>\n format_tt(j = \"a\", sprintf = \"Food: %s\") |>\n format_tt(j = 2, digits = 1) |>\n format_tt(j = \"c\", digits = 2, num_suffix = TRUE)\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n c\n \n \n \n \n \n Food: Burger\n 1.432\n 99T\n \n \n Food: Halloumi\n 201.399\n 7.3B\n \n \n Food: Tofu\n 0.146\n 29M\n \n \n Food: Beans\n 0.003\n 94K\n \n \n \n \n\n\n\nFinally, if you like the format_tt() interface, you can use it directly with numbers, vectors, or data frames:\n\nformat_tt(pi, digits = 1)\n\n[1] \"3\"\n\nformat_tt(dat, digits = 1, num_suffix = TRUE)\n\n a b c\n1 Burger 1 99T\n2 Halloumi 201 7B\n3 Tofu 0.1 29M\n4 Beans 0.003 94K\n\n\n\n\n\nBy default, format_tt() formats numbers to ensure that the smallest value in a vector (column) has at least a certain number of significant digits. For example,\n\nk <- data.frame(x = c(0.000123456789, 12.4356789))\ntt(k, digits = 2)\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 0.00012\n \n \n 12.43568\n \n \n \n \n\n\n\nWe can alter this behavior to ensure to round significant digits on a per-cell basis, using the num_fmt argument in format_tt():\n\ntt(k) |> format_tt(digits = 2, num_fmt = \"significant_cell\")\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 0.00012\n \n \n 12\n \n \n \n \n\n\n\nThe numeric formatting options in format_tt() can also be controlled using global options:\n\noptions(\"tinytable_tt_digits\" = 2)\noptions(\"tinytable_format_num_fmt\" = \"significant_cell\")\ntt(k)\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 0.00012\n \n \n 12 \n \n \n \n \n\n\n\n\n\n\nTo insert LaTeX-style mathematical expressions in a tinytable, we enclose the expression in dollar signs: $...$. Note that you must double backslashes in mathematical expressions in R strings.\nIn LaTeX, expression enclosed between $$ will automatically rendered as a mathematical expression.\nIn HTML, users must first load the MathJax JavaScript library to render math. This can be done in two ways. First, one can use a global option. This will insert MathJax scripts alongside every table, which is convenient, but could enter in conflict with other scripts if the user (or notebook) has already inserted MathJax code:\noptions(tinytable_html_mathjax = TRUE)\nAlternatively, users can load MathJax explicitly in their HTML file. In a Quarto notebook, this can be done by using a code chunk like this:\n```{=html}\n<script id=\"MathJax-script\" async src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n<script>\nMathJax = {\n tex: {\n inlineMath: [['$', '$'], ['\\\\(', '\\\\)']]\n },\n svg: {\n fontCache: 'global'\n }\n};\n</script>\n```\nThen, we can do:\n\ndat <- data.frame(Math = c(\n \"$x^2 + y^2 = z^2$\",\n \"$\\\\frac{1}{2}$\"\n))\ntt(dat) |> style_tt(j = 1, align = \"c\")\n\n\n\n \n\n \n \n \n \n \n \n Math\n \n \n \n \n \n $x^2 + y^2 = z^2$\n \n \n $\\frac{1}{2}$ \n \n \n \n \n\n\n\nTo avoid inserting $...$ in every cell manually, we can use the math argument of format_tt():\n\noptions(tinytable_html_mathjax = TRUE)\n\ndat <- data.frame(\"y^2 = e^x\" = c(-2, -pi), check.names = FALSE)\n\ntt(dat, digits = 3) |> format_tt(math = TRUE)\n\n\n\n \n \n \n \n\n \n\n \n \n \n \n \n \n $y^2 = e^x$\n \n \n \n \n \n $-2 $\n \n \n $-3.14$\n \n \n \n \n\n\n\n\n\n\nMissing values can be replaced by a custom string using the replace argument (default \"\"):\n\ntab <- data.frame(a = c(NA, 1, 2), b = c(3, NA, 5))\n\ntt(tab)\n\n\n\n \n \n \n \n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n NA\n 3\n \n \n 1\n NA\n \n \n 2\n 5\n \n \n \n \n\n\ntt(tab) |> format_tt()\n\n\n\n \n \n \n \n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n \n 3\n \n \n 1\n \n \n \n 2\n 5\n \n \n \n \n\n\ntt(tab) |> format_tt(replace = \"-\")\n\n\n\n \n \n \n \n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n -\n 3\n \n \n 1\n -\n \n \n 2\n 5\n \n \n \n \n\n\n\nWe can also specify multiple value replacements at once using a named list of vectors:\n\ntmp <- data.frame(x = 1:5, y = c(pi, NA, NaN, -Inf, Inf))\ndict <- list(\"-\" = c(NA, NaN), \"-∞\" = -Inf, \"∞\" = Inf)\ntt(tmp) |> format_tt(replace = dict, digits = 2)\n\n\n\n \n \n \n \n\n \n\n \n \n \n \n \n \n x\n y\n \n \n \n \n \n 1\n 3.1\n \n \n 2\n -\n \n \n 3\n -\n \n \n 4\n -∞\n \n \n 5\n ∞\n \n \n \n \n\n\n\n\n\n\nLaTeX and HTML use special characters to indicate strings which should be interpreted rather than displayed as text. For example, including underscores or dollar signs in LaTeX can cause compilation errors in some documents. To display those special characters, we need to substitute or escape them with backslashes, depending on the output format. The escape argument of format_tt() can be used to do this automatically:\n\ndat <- data.frame(\n \"LaTeX\" = c(\"Dollars $\", \"Percent %\", \"Underscore _\"),\n \"HTML\" = c(\"<br>\", \"<sup>4</sup>\", \"<emph>blah</emph>\")\n)\n\ntt(dat) |> format_tt(escape = TRUE)\n\n\n\n \n \n \n \n\n \n\n \n \n \n \n \n \n LaTeX\n HTML\n \n \n \n \n \n Dollars $\n <br>\n \n \n Percent %\n <sup>4</sup>\n \n \n Underscore _\n <emph>blah</emph>\n \n \n \n \n\n\n\nWhen applied to a tt() table, format_tt() will determine the type of escaping to do automatically. When applied to a string or vector, we must specify the type of escaping to apply:\n\nformat_tt(\"_ Dollars $\", escape = \"latex\")\n\n[1] \"\\\\_ Dollars \\\\$\"\n\n\n\n\n\nMarkdown can be rendered in cells by using the markdown argument of the format_tt() function (note: this requires installing the markdown as an optional dependency).\n\ndat <- data.frame( markdown = c(\n \"This is _italic_ text.\",\n \"This sentence ends with a superscript.^2^\")\n)\n\ntt(dat) |>\n format_tt(j = 1, markdown = TRUE) |>\n style_tt(j = 1, align = \"c\")\n\n\n\n \n \n \n \n\n \n\n \n \n \n \n \n \n markdown\n \n \n \n \n \n This is italic text.\n \n \n This sentence ends with a superscript.2\n \n \n \n \n\n\n\nMarkdown syntax can be particularly useful when formatting URLs in a table:\n\ndat <- data.frame(\n `Package (link)` = c(\n \"[`marginaleffects`](https://www.marginaleffects.com/)\",\n \"[`modelsummary`](https://www.modelsummary.com/)\",\n \"[`tinytable`](https://vincentarelbundock.github.io/tinytable/)\",\n \"[`countrycode`](https://vincentarelbundock.github.io/countrycode/)\",\n \"[`WDI`](https://vincentarelbundock.github.io/WDI/)\",\n \"[`softbib`](https://vincentarelbundock.github.io/softbib/)\",\n \"[`tinysnapshot`](https://vincentarelbundock.github.io/tinysnapshot/)\",\n \"[`altdoc`](https://etiennebacher.github.io/altdoc/)\",\n \"[`tinyplot`](https://grantmcdermott.com/tinyplot/)\",\n \"[`parameters`](https://easystats.github.io/parameters/)\",\n \"[`insight`](https://easystats.github.io/insight/)\"\n ),\n Purpose = c(\n \"Interpreting statistical models\",\n \"Data and model summaries\",\n \"Draw beautiful tables easily\",\n \"Convert country codes and names\",\n \"Download data from the World Bank\",\n \"Software bibliographies in R\",\n \"Snapshots for unit tests using `tinytest`\",\n \"Create documentation website for R packages\",\n \"Extension of base R plot functions\",\n \"Extract from model objects\",\n \"Extract information from model objects\"\n ),\n check.names = FALSE\n)\n\ntt(dat) |> format_tt(j = 1, markdown = TRUE)\n\n\n\n \n \n \n \n\n \n\n \n \n Vincent sometimes contributes to these R packages.\n \n \n \n Package (link)\n Purpose\n \n \n \n \n \n marginaleffects\n Interpreting statistical models \n \n \n modelsummary\n Data and model summaries \n \n \n tinytable\n Draw beautiful tables easily \n \n \n countrycode\n Convert country codes and names \n \n \n WDI\n Download data from the World Bank \n \n \n softbib\n Software bibliographies in R \n \n \n tinysnapshot\n Snapshots for unit tests using `tinytest` \n \n \n altdoc\n Create documentation website for R packages\n \n \n tinyplot\n Extension of base R plot functions \n \n \n parameters\n Extract from model objects \n \n \n insight\n Extract information from model objects \n \n \n \n \n\n\n\n\n\n\nOn top of the built-in features of format_tt, a custom formatting function can be specified via the fn argument. The fn argument takes a function that accepts a single vector and returns a string (or something that coerces to a string like a number).\n\ntt(x) |> \n format_tt(j = \"mpg\", fn = function(x) paste0(x, \" mpg\")) |>\n format_tt(j = \"drat\", fn = \\(x) signif(x, 2))\n\n\n\n \n \n \n \n\n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n \n \n \n \n \n 21 mpg\n 6\n 160\n 110\n 3.9\n \n \n 21 mpg\n 6\n 160\n 110\n 3.9\n \n \n 22.8 mpg\n 4\n 108\n 93\n 3.8\n \n \n 21.4 mpg\n 6\n 258\n 110\n 3.1\n \n \n \n \n\n\n\nFor example, the scales package which is used internally by ggplot2 provides a bunch of useful tools for formatting (e.g. dates, numbers, percents, logs, currencies, etc.). The label_*() functions can be passed to the fn argument.\nNote that we call format_tt(escape = TRUE) at the end of the pipeline because the column names and cells include characters that need to be escaped in LaTeX: _, %, and $. This last call is superfluous in HTML.\n\nthumbdrives <- data.frame(\n date_lookup = as.Date(c(\"2024-01-15\", \"2024-01-18\", \"2024-01-14\", \"2024-01-16\")),\n price = c(18.49, 19.99, 24.99, 24.99),\n price_rank = c(1, 2, 3, 3),\n memory = c(16e9, 12e9, 10e9, 8e9),\n speed_benchmark = c(0.6, 0.73, 0.82, 0.99)\n)\n\ntt(thumbdrives) |>\n format_tt(j = 1, fn = scales::label_date(\"%e %b\", locale = \"fr\")) |>\n format_tt(j = 2, fn = scales::label_currency()) |>\n format_tt(j = 3, fn = scales::label_ordinal()) |> \n format_tt(j = 4, fn = scales::label_bytes()) |> \n format_tt(j = 5, fn = scales::label_percent()) |>\n format_tt(escape = TRUE)\n\n\n\n \n \n \n \n\n \n\n \n \n \n \n \n \n date_lookup\n price\n price_rank\n memory\n speed_benchmark\n \n \n \n \n \n 2024-01-15\n $18.49\n 1st\n 16 GB\n 60%\n \n \n 2024-01-18\n $19.99\n 2nd\n 12 GB\n 73%\n \n \n 2024-01-14\n $24.99\n 3rd\n 10 GB\n 82%\n \n \n 2024-01-16\n $24.99\n 3rd\n 8 GB\n 99%\n \n \n \n \n\n\n\n\n\n\nQuarto automatically applies some data processing to the content of the tables it renders. By default, tinytable disables this processing, because it can enter in conflict with styling and formatting features of the package.\nTo enable Quarto data processing, we can use the quarto argument of the format_tt() function. This argument allows users to mark certain cells explicitly for processing by Quarto, by wrapping them in a special “span” called “data-qmd”, supported by Quarto:\n\nk <- data.frame(Thing = \"qwerty\", Citation = \"@Lovelace1842\")\n\ntt(k) |> format_tt(quarto = TRUE)\n\n\n\n \n \n \n \n\n \n\n \n \n \n\n\n\nThing\nCitation\n\n\n\n\nqwerty\nLovelace (1842)\n\n\n\n\n \n\n\n\nSome users may want to apply Quarto data processing to all tables. This can be done with themes:\n\ntheme_quarto <- function(x) format_tt(x, quarto = TRUE)\noptions(tinytable_tt_theme = theme_quarto)\n\ntt(k)\n\n\n\n \n \n \n \n\n \n\n \n \n \n\n\n\nThing\nCitation\n\n\n\n\nqwerty\nLovelace (1842)\n\n\n\n\n \n\n\n\nBack to normal:\n\noptions(tinytable_tt_theme = NULL)\n\nAlternatively, users can set a global option to process all tables in Quarto, but they will then have to mark each cell with special content using format_tt(quarto):\n\noptions(tinytable_quarto_disable_processing = FALSE)\n\ntt(x)\n\n\n\n \n \n \n \n\n \n\n \n \n \n\n\n\nmpg\ncyl\ndisp\nhp\ndrat\n\n\n\n\n21.0\n6\n160\n110\n3.90\n\n\n21.0\n6\n160\n110\n3.90\n\n\n22.8\n4\n108\n93\n3.85\n\n\n21.4\n6\n258\n110\n3.08\n\n\n\n\n \n\n\n\nNotice that Quarto is now processing the table, so we lose the default tinytable theme and get the default striped Quarto look.\nBack to normal:\n\noptions(tinytable_quarto_disable_processing = TRUE)", + "text": "library(tinytable)\noptions(tinytable_tt_digits = 3)\noptions(tinytable_theme_placement_latex_float = \"H\")\nx <- mtcars[1:4, 1:5]\n\n\n\nThe tt() function is minimalist; it’s inteded purpose is simply to draw nice tables. Users who want to format numbers, dates, strings, and other variables in different ways should process their data before supplying it to the tt() table-drawing function. To do so, we can use the format_tt() function supplied by the tinytable.\nIn a very simple case—such as printing 2 significant digits of all numeric variables—we can use the digits argument of tt():\n\ndat <- data.frame(\n w = c(143002.2092, 201399.181, 100188.3883),\n x = c(1.43402, 201.399, 0.134588),\n y = as.Date(sample(1:1000, 3), origin = \"1970-01-01\"),\n z = c(TRUE, TRUE, FALSE))\n\ntt(dat, digits = 2)\n\n\n\n \n\n \n \n \n \n \n \n w\n x\n y\n z\n \n \n \n \n \n 143002\n 1.43\n 1971-10-17\n True \n \n \n 201399\n 201.4 \n 1970-12-24\n True \n \n \n 100188\n 0.13\n 1971-12-13\n False\n \n \n \n \n\n\n\nWe can get more fine-grained control over formatting by calling format_tt() after tt(), optionally by specifying the columns to format with j:\n\ntt(dat) |> \n format_tt(\n j = 2:4,\n digits = 1,\n date = \"%B %d %Y\") |>\n format_tt(\n j = 1,\n digits = 2,\n num_mark_big = \" \",\n num_mark_dec = \",\",\n num_fmt = \"decimal\")\n\n\n\n \n\n \n \n \n \n \n \n w\n x\n y\n z\n \n \n \n \n \n 143 002,21\n 1.4\n October 17 1971\n True\n \n \n 201 399,18\n 201.4\n December 24 1970\n True\n \n \n 100 188,39\n 0.1\n December 13 1971\n False\n \n \n \n \n\n\n\nWe can use a regular expression in j to select columns, and the ?sprintf function to format strings, numbers, and to do string interpolation (similar to the glue package, but using Base R):\n\ndat <- data.frame(\n a = c(\"Burger\", \"Halloumi\", \"Tofu\", \"Beans\"),\n b = c(1.43202, 201.399, 0.146188, 0.0031),\n c = c(98938272783457, 7288839482, 29111727, 93945))\ntt(dat) |>\n format_tt(j = \"a\", sprintf = \"Food: %s\") |>\n format_tt(j = 2, digits = 1) |>\n format_tt(j = \"c\", digits = 2, num_suffix = TRUE)\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n c\n \n \n \n \n \n Food: Burger\n 1.432\n 99T\n \n \n Food: Halloumi\n 201.399\n 7.3B\n \n \n Food: Tofu\n 0.146\n 29M\n \n \n Food: Beans\n 0.003\n 94K\n \n \n \n \n\n\n\nFinally, if you like the format_tt() interface, you can use it directly with numbers, vectors, or data frames:\n\nformat_tt(pi, digits = 1)\n\n[1] \"3\"\n\nformat_tt(dat, digits = 1, num_suffix = TRUE)\n\n a b c\n1 Burger 1 99T\n2 Halloumi 201 7B\n3 Tofu 0.1 29M\n4 Beans 0.003 94K\n\n\n\n\n\nBy default, format_tt() formats numbers to ensure that the smallest value in a vector (column) has at least a certain number of significant digits. For example,\n\nk <- data.frame(x = c(0.000123456789, 12.4356789))\ntt(k, digits = 2)\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 0.00012\n \n \n 12.43568\n \n \n \n \n\n\n\nWe can alter this behavior to ensure to round significant digits on a per-cell basis, using the num_fmt argument in format_tt():\n\ntt(k) |> format_tt(digits = 2, num_fmt = \"significant_cell\")\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 0.00012\n \n \n 12\n \n \n \n \n\n\n\nThe numeric formatting options in format_tt() can also be controlled using global options:\n\noptions(\"tinytable_tt_digits\" = 2)\noptions(\"tinytable_format_num_fmt\" = \"significant_cell\")\ntt(k)\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 0.00012\n \n \n 12 \n \n \n \n \n\n\n\n\n\n\nTo insert LaTeX-style mathematical expressions in a tinytable, we enclose the expression in dollar signs: $...$. Note that you must double backslashes in mathematical expressions in R strings.\nIn LaTeX, expression enclosed between $$ will automatically rendered as a mathematical expression.\nIn HTML, users must first load the MathJax JavaScript library to render math. This can be done in two ways. First, one can use a global option. This will insert MathJax scripts alongside every table, which is convenient, but could enter in conflict with other scripts if the user (or notebook) has already inserted MathJax code:\noptions(tinytable_html_mathjax = TRUE)\nAlternatively, users can load MathJax explicitly in their HTML file. In a Quarto notebook, this can be done by using a code chunk like this:\n```{=html}\n<script id=\"MathJax-script\" async src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n<script>\nMathJax = {\n tex: {\n inlineMath: [['$', '$'], ['\\\\(', '\\\\)']]\n },\n svg: {\n fontCache: 'global'\n }\n};\n</script>\n```\nThen, we can do:\n\ndat <- data.frame(Math = c(\n \"$x^2 + y^2 = z^2$\",\n \"$\\\\frac{1}{2}$\"\n))\ntt(dat) |> style_tt(j = 1, align = \"c\")\n\n\n\n \n\n \n \n \n \n \n \n Math\n \n \n \n \n \n $x^2 + y^2 = z^2$\n \n \n $\\frac{1}{2}$ \n \n \n \n \n\n\n\nTo avoid inserting $...$ in every cell manually, we can use the math argument of format_tt():\n\noptions(tinytable_html_mathjax = TRUE)\n\ndat <- data.frame(\"y^2 = e^x\" = c(-2, -pi), check.names = FALSE)\n\ntt(dat, digits = 3) |> format_tt(math = TRUE)\n\n\n\n \n \n \n \n\n \n\n \n \n \n \n \n \n $y^2 = e^x$\n \n \n \n \n \n $-2 $\n \n \n $-3.14$\n \n \n \n \n\n\n\n\n\n\nMissing values can be replaced by a custom string using the replace argument (default \"\"):\n\ntab <- data.frame(a = c(NA, 1, 2), b = c(3, NA, 5))\n\ntt(tab)\n\n\n\n \n \n \n \n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n NA\n 3\n \n \n 1\n NA\n \n \n 2\n 5\n \n \n \n \n\n\ntt(tab) |> format_tt()\n\n\n\n \n \n \n \n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n \n 3\n \n \n 1\n \n \n \n 2\n 5\n \n \n \n \n\n\ntt(tab) |> format_tt(replace = \"-\")\n\n\n\n \n \n \n \n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n -\n 3\n \n \n 1\n -\n \n \n 2\n 5\n \n \n \n \n\n\n\nWe can also specify multiple value replacements at once using a named list of vectors:\n\ntmp <- data.frame(x = 1:5, y = c(pi, NA, NaN, -Inf, Inf))\ndict <- list(\"-\" = c(NA, NaN), \"-∞\" = -Inf, \"∞\" = Inf)\ntt(tmp) |> format_tt(replace = dict, digits = 2)\n\n\n\n \n \n \n \n\n \n\n \n \n \n \n \n \n x\n y\n \n \n \n \n \n 1\n 3.1\n \n \n 2\n -\n \n \n 3\n -\n \n \n 4\n -∞\n \n \n 5\n ∞\n \n \n \n \n\n\n\n\n\n\nLaTeX and HTML use special characters to indicate strings which should be interpreted rather than displayed as text. For example, including underscores or dollar signs in LaTeX can cause compilation errors in some documents. To display those special characters, we need to substitute or escape them with backslashes, depending on the output format. The escape argument of format_tt() can be used to do this automatically:\n\ndat <- data.frame(\n \"LaTeX\" = c(\"Dollars $\", \"Percent %\", \"Underscore _\"),\n \"HTML\" = c(\"<br>\", \"<sup>4</sup>\", \"<emph>blah</emph>\")\n)\n\ntt(dat) |> format_tt(escape = TRUE)\n\n\n\n \n \n \n \n\n \n\n \n \n \n \n \n \n LaTeX\n HTML\n \n \n \n \n \n Dollars $\n <br>\n \n \n Percent %\n <sup>4</sup>\n \n \n Underscore _\n <emph>blah</emph>\n \n \n \n \n\n\n\nWhen applied to a tt() table, format_tt() will determine the type of escaping to do automatically. When applied to a string or vector, we must specify the type of escaping to apply:\n\nformat_tt(\"_ Dollars $\", escape = \"latex\")\n\n[1] \"\\\\_ Dollars \\\\$\"\n\n\n\n\n\nMarkdown can be rendered in cells by using the markdown argument of the format_tt() function (note: this requires installing the markdown as an optional dependency).\n\ndat <- data.frame( markdown = c(\n \"This is _italic_ text.\",\n \"This sentence ends with a superscript.^2^\")\n)\n\ntt(dat) |>\n format_tt(j = 1, markdown = TRUE) |>\n style_tt(j = 1, align = \"c\")\n\n\n\n \n \n \n \n\n \n\n \n \n \n \n \n \n markdown\n \n \n \n \n \n This is italic text.\n \n \n This sentence ends with a superscript.2\n \n \n \n \n\n\n\nMarkdown syntax can be particularly useful when formatting URLs in a table:\n\ndat <- data.frame(\n `Package (link)` = c(\n \"[`marginaleffects`](https://www.marginaleffects.com/)\",\n \"[`modelsummary`](https://www.modelsummary.com/)\",\n \"[`tinytable`](https://vincentarelbundock.github.io/tinytable/)\",\n \"[`countrycode`](https://vincentarelbundock.github.io/countrycode/)\",\n \"[`WDI`](https://vincentarelbundock.github.io/WDI/)\",\n \"[`softbib`](https://vincentarelbundock.github.io/softbib/)\",\n \"[`tinysnapshot`](https://vincentarelbundock.github.io/tinysnapshot/)\",\n \"[`altdoc`](https://etiennebacher.github.io/altdoc/)\",\n \"[`tinyplot`](https://grantmcdermott.com/tinyplot/)\",\n \"[`parameters`](https://easystats.github.io/parameters/)\",\n \"[`insight`](https://easystats.github.io/insight/)\"\n ),\n Purpose = c(\n \"Interpreting statistical models\",\n \"Data and model summaries\",\n \"Draw beautiful tables easily\",\n \"Convert country codes and names\",\n \"Download data from the World Bank\",\n \"Software bibliographies in R\",\n \"Snapshots for unit tests using `tinytest`\",\n \"Create documentation website for R packages\",\n \"Extension of base R plot functions\",\n \"Extract from model objects\",\n \"Extract information from model objects\"\n ),\n check.names = FALSE\n)\n\ntt(dat) |> format_tt(j = 1, markdown = TRUE)\n\n\n\n \n \n \n \n\n \n\n \n \n Vincent sometimes contributes to these R packages.\n \n \n \n Package (link)\n Purpose\n \n \n \n \n \n marginaleffects\n Interpreting statistical models \n \n \n modelsummary\n Data and model summaries \n \n \n tinytable\n Draw beautiful tables easily \n \n \n countrycode\n Convert country codes and names \n \n \n WDI\n Download data from the World Bank \n \n \n softbib\n Software bibliographies in R \n \n \n tinysnapshot\n Snapshots for unit tests using `tinytest` \n \n \n altdoc\n Create documentation website for R packages\n \n \n tinyplot\n Extension of base R plot functions \n \n \n parameters\n Extract from model objects \n \n \n insight\n Extract information from model objects \n \n \n \n \n\n\n\n\n\n\nOn top of the built-in features of format_tt, a custom formatting function can be specified via the fn argument. The fn argument takes a function that accepts a single vector and returns a string (or something that coerces to a string like a number).\n\ntt(x) |> \n format_tt(j = \"mpg\", fn = function(x) paste0(x, \" mpg\")) |>\n format_tt(j = \"drat\", fn = \\(x) signif(x, 2))\n\n\n\n \n \n \n \n\n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n \n \n \n \n \n 21 mpg\n 6\n 160\n 110\n 3.9\n \n \n 21 mpg\n 6\n 160\n 110\n 3.9\n \n \n 22.8 mpg\n 4\n 108\n 93\n 3.8\n \n \n 21.4 mpg\n 6\n 258\n 110\n 3.1\n \n \n \n \n\n\n\nFor example, the scales package which is used internally by ggplot2 provides a bunch of useful tools for formatting (e.g. dates, numbers, percents, logs, currencies, etc.). The label_*() functions can be passed to the fn argument.\nNote that we call format_tt(escape = TRUE) at the end of the pipeline because the column names and cells include characters that need to be escaped in LaTeX: _, %, and $. This last call is superfluous in HTML.\n\nthumbdrives <- data.frame(\n date_lookup = as.Date(c(\"2024-01-15\", \"2024-01-18\", \"2024-01-14\", \"2024-01-16\")),\n price = c(18.49, 19.99, 24.99, 24.99),\n price_rank = c(1, 2, 3, 3),\n memory = c(16e9, 12e9, 10e9, 8e9),\n speed_benchmark = c(0.6, 0.73, 0.82, 0.99)\n)\n\ntt(thumbdrives) |>\n format_tt(j = 1, fn = scales::label_date(\"%e %b\", locale = \"fr\")) |>\n format_tt(j = 2, fn = scales::label_currency()) |>\n format_tt(j = 3, fn = scales::label_ordinal()) |> \n format_tt(j = 4, fn = scales::label_bytes()) |> \n format_tt(j = 5, fn = scales::label_percent()) |>\n format_tt(escape = TRUE)\n\n\n\n \n \n \n \n\n \n\n \n \n \n \n \n \n date_lookup\n price\n price_rank\n memory\n speed_benchmark\n \n \n \n \n \n 2024-01-15\n $18.49\n 1st\n 16 GB\n 60%\n \n \n 2024-01-18\n $19.99\n 2nd\n 12 GB\n 73%\n \n \n 2024-01-14\n $24.99\n 3rd\n 10 GB\n 82%\n \n \n 2024-01-16\n $24.99\n 3rd\n 8 GB\n 99%\n \n \n \n \n\n\n\n\n\n\nQuarto automatically applies some data processing to the content of the tables it renders. By default, tinytable disables this processing, because it can enter in conflict with styling and formatting features of the package.\nTo enable Quarto data processing, we can use the quarto argument of the format_tt() function. This argument allows users to mark certain cells explicitly for processing by Quarto, by wrapping them in a special “span” called “data-qmd”, supported by Quarto:\n\nk <- data.frame(Thing = \"qwerty\", Citation = \"@Lovelace1842\")\n\ntt(k) |> format_tt(quarto = TRUE)\n\n\n\n \n \n \n \n\n \n\n \n \n \n\n\n\nThing\nCitation\n\n\n\n\nqwerty\nLovelace (1842)\n\n\n\n\n \n\n\n\nSome users may want to apply Quarto data processing to all tables. This can be done with themes:\n\ntheme_quarto <- function(x) format_tt(x, quarto = TRUE)\noptions(tinytable_tt_theme = theme_quarto)\n\ntt(k)\n\n\n\n \n \n \n \n\n \n\n \n \n \n\n\n\nThing\nCitation\n\n\n\n\nqwerty\nLovelace (1842)\n\n\n\n\n \n\n\n\nBack to normal:\n\noptions(tinytable_tt_theme = NULL)\n\nAlternatively, users can set a global option to process all tables in Quarto, but they will then have to mark each cell with special content using format_tt(quarto):\n\noptions(tinytable_quarto_disable_processing = FALSE)\n\ntt(x)\n\n\n\n \n \n \n \n\n \n\n \n \n \n\n\n\nmpg\ncyl\ndisp\nhp\ndrat\n\n\n\n\n21.0\n6\n160\n110\n3.90\n\n\n21.0\n6\n160\n110\n3.90\n\n\n22.8\n4\n108\n93\n3.85\n\n\n21.4\n6\n258\n110\n3.08\n\n\n\n\n \n\n\n\nNotice that Quarto is now processing the table, so we lose the default tinytable theme and get the default striped Quarto look.\nBack to normal:\n\noptions(tinytable_quarto_disable_processing = TRUE)", "crumbs": [ "Tutorial (PDF)", "Tutorial", @@ -651,7 +651,7 @@ "href": "vignettes/format.html#numbers-dates-strings-etc.", "title": "Formatting", "section": "", - "text": "The tt() function is minimalist; it’s inteded purpose is simply to draw nice tables. Users who want to format numbers, dates, strings, and other variables in different ways should process their data before supplying it to the tt() table-drawing function. To do so, we can use the format_tt() function supplied by the tinytable.\nIn a very simple case—such as printing 2 significant digits of all numeric variables—we can use the digits argument of tt():\n\ndat <- data.frame(\n w = c(143002.2092, 201399.181, 100188.3883),\n x = c(1.43402, 201.399, 0.134588),\n y = as.Date(sample(1:1000, 3), origin = \"1970-01-01\"),\n z = c(TRUE, TRUE, FALSE))\n\ntt(dat, digits = 2)\n\n\n\n \n\n \n \n \n \n \n \n w\n x\n y\n z\n \n \n \n \n \n 143002\n 1.43\n 1971-03-08\n True \n \n \n 201399\n 201.4 \n 1970-08-16\n True \n \n \n 100188\n 0.13\n 1971-09-16\n False\n \n \n \n \n\n\n\nWe can get more fine-grained control over formatting by calling format_tt() after tt(), optionally by specifying the columns to format with j:\n\ntt(dat) |> \n format_tt(\n j = 2:4,\n digits = 1,\n date = \"%B %d %Y\") |>\n format_tt(\n j = 1,\n digits = 2,\n num_mark_big = \" \",\n num_mark_dec = \",\",\n num_fmt = \"decimal\")\n\n\n\n \n\n \n \n \n \n \n \n w\n x\n y\n z\n \n \n \n \n \n 143 002,21\n 1.4\n March 08 1971\n True\n \n \n 201 399,18\n 201.4\n August 16 1970\n True\n \n \n 100 188,39\n 0.1\n September 16 1971\n False\n \n \n \n \n\n\n\nWe can use a regular expression in j to select columns, and the ?sprintf function to format strings, numbers, and to do string interpolation (similar to the glue package, but using Base R):\n\ndat <- data.frame(\n a = c(\"Burger\", \"Halloumi\", \"Tofu\", \"Beans\"),\n b = c(1.43202, 201.399, 0.146188, 0.0031),\n c = c(98938272783457, 7288839482, 29111727, 93945))\ntt(dat) |>\n format_tt(j = \"a\", sprintf = \"Food: %s\") |>\n format_tt(j = 2, digits = 1) |>\n format_tt(j = \"c\", digits = 2, num_suffix = TRUE)\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n c\n \n \n \n \n \n Food: Burger\n 1.432\n 99T\n \n \n Food: Halloumi\n 201.399\n 7.3B\n \n \n Food: Tofu\n 0.146\n 29M\n \n \n Food: Beans\n 0.003\n 94K\n \n \n \n \n\n\n\nFinally, if you like the format_tt() interface, you can use it directly with numbers, vectors, or data frames:\n\nformat_tt(pi, digits = 1)\n\n[1] \"3\"\n\nformat_tt(dat, digits = 1, num_suffix = TRUE)\n\n a b c\n1 Burger 1 99T\n2 Halloumi 201 7B\n3 Tofu 0.1 29M\n4 Beans 0.003 94K", + "text": "The tt() function is minimalist; it’s inteded purpose is simply to draw nice tables. Users who want to format numbers, dates, strings, and other variables in different ways should process their data before supplying it to the tt() table-drawing function. To do so, we can use the format_tt() function supplied by the tinytable.\nIn a very simple case—such as printing 2 significant digits of all numeric variables—we can use the digits argument of tt():\n\ndat <- data.frame(\n w = c(143002.2092, 201399.181, 100188.3883),\n x = c(1.43402, 201.399, 0.134588),\n y = as.Date(sample(1:1000, 3), origin = \"1970-01-01\"),\n z = c(TRUE, TRUE, FALSE))\n\ntt(dat, digits = 2)\n\n\n\n \n\n \n \n \n \n \n \n w\n x\n y\n z\n \n \n \n \n \n 143002\n 1.43\n 1971-10-17\n True \n \n \n 201399\n 201.4 \n 1970-12-24\n True \n \n \n 100188\n 0.13\n 1971-12-13\n False\n \n \n \n \n\n\n\nWe can get more fine-grained control over formatting by calling format_tt() after tt(), optionally by specifying the columns to format with j:\n\ntt(dat) |> \n format_tt(\n j = 2:4,\n digits = 1,\n date = \"%B %d %Y\") |>\n format_tt(\n j = 1,\n digits = 2,\n num_mark_big = \" \",\n num_mark_dec = \",\",\n num_fmt = \"decimal\")\n\n\n\n \n\n \n \n \n \n \n \n w\n x\n y\n z\n \n \n \n \n \n 143 002,21\n 1.4\n October 17 1971\n True\n \n \n 201 399,18\n 201.4\n December 24 1970\n True\n \n \n 100 188,39\n 0.1\n December 13 1971\n False\n \n \n \n \n\n\n\nWe can use a regular expression in j to select columns, and the ?sprintf function to format strings, numbers, and to do string interpolation (similar to the glue package, but using Base R):\n\ndat <- data.frame(\n a = c(\"Burger\", \"Halloumi\", \"Tofu\", \"Beans\"),\n b = c(1.43202, 201.399, 0.146188, 0.0031),\n c = c(98938272783457, 7288839482, 29111727, 93945))\ntt(dat) |>\n format_tt(j = \"a\", sprintf = \"Food: %s\") |>\n format_tt(j = 2, digits = 1) |>\n format_tt(j = \"c\", digits = 2, num_suffix = TRUE)\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n c\n \n \n \n \n \n Food: Burger\n 1.432\n 99T\n \n \n Food: Halloumi\n 201.399\n 7.3B\n \n \n Food: Tofu\n 0.146\n 29M\n \n \n Food: Beans\n 0.003\n 94K\n \n \n \n \n\n\n\nFinally, if you like the format_tt() interface, you can use it directly with numbers, vectors, or data frames:\n\nformat_tt(pi, digits = 1)\n\n[1] \"3\"\n\nformat_tt(dat, digits = 1, num_suffix = TRUE)\n\n a b c\n1 Burger 1 99T\n2 Halloumi 201 7B\n3 Tofu 0.1 29M\n4 Beans 0.003 94K", "crumbs": [ "Tutorial (PDF)", "Tutorial", @@ -1082,7 +1082,7 @@ "href": "man/group_tt.html", "title": "tinytable", "section": "", - "text": "Spanning labels to identify groups of rows or columns\n\n\n\ngroup_tt(x, i = NULL, j = NULL, indent = 1, ...)\n\n\n\n\n\n\n\nx\n\n\nA data frame or data table to be rendered as a table.\n\n\n\n\ni\n\n\nA vector of labels with length equal to the number of rows in x, or a named list of row indices to group. The names of the list will be used as labels. The indices represent the position where labels should be inserted in the original table. For example,\n\n\ni=list(“Hello”=5): insert the \"Hello\" label after the 4th row in the original table.\n\n\ni=list(“Hello”=2, “World”=2): insert the two labels consecutively after the 1st row in the original table.\n\n\ni=list(“Foo Bar”=0): insert the label in the first row after the header.\n\n\n\n\n\n\nj\n\n\nA named list of column indices to group. The names of the list will be used as labels. See examples below. Note: empty labels must be a space: \" \".\n\n\n\n\nindent\n\n\ninteger number of pt to use when indenting the non-labelled rows.\n\n\n\n\n…\n\n\nOther arguments are ignored.\n\n\n\n\n\n\nWarning: The style_tt() can normally be used to style the group headers, as expected, but that feature is not available for Markdown and Word tables.\n\n\n\nAn object of class tt representing the table.\n\n\n\n\nlibrary(\"tinytable\")\n\n\n# vector of row labels\ndat <- data.frame(\n label = c(\"a\", \"a\", \"a\", \"b\", \"b\", \"c\", \"a\", \"a\"),\n x1 = rnorm(8),\n x2 = rnorm(8))\ntt(dat[, 2:3]) |> group_tt(i = dat$label)\n\n\n\n \n\n \n \n \n \n \n \n x1\n x2\n \n \n \n \n \n -1.0078862\n 0.4352756\n \n \n 1.4752168\n 0.9104151\n \n \n -0.8107267\n -0.2365799\n \n \n -1.2232999\n 0.1458874\n \n \n 0.9005819\n -0.6132735\n \n \n -0.1360992\n -1.1905177\n \n \n -0.6259448\n -1.0824529\n \n \n 0.6234085\n 0.3027523\n \n \n \n \n\n\n# named lists of labels\ntt(mtcars[1:10, 1:5]) |>\n group_tt(\n i = list(\n \"Hello\" = 3,\n \"World\" = 8),\n j = list(\n \"Foo\" = 2:3,\n \"Bar\" = 4:5))\n\n\n\n \n\n \n \n \n \n\n \nFoo\nBar\n\n \n \n mpg\n cyl\n disp\n hp\n drat\n \n \n \n \n \n 21.0\n 6\n 160.0\n 110\n 3.90\n \n \n 21.0\n 6\n 160.0\n 110\n 3.90\n \n \n 22.8\n 4\n 108.0\n 93\n 3.85\n \n \n 21.4\n 6\n 258.0\n 110\n 3.08\n \n \n 18.7\n 8\n 360.0\n 175\n 3.15\n \n \n 18.1\n 6\n 225.0\n 105\n 2.76\n \n \n 14.3\n 8\n 360.0\n 245\n 3.21\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n \n \n 19.2\n 6\n 167.6\n 123\n 3.92\n \n \n \n \n\n\ndat <- mtcars[1:9, 1:8]\ntt(dat) |>\n group_tt(i = list(\n \"I like (fake) hamburgers\" = 3,\n \"She prefers halloumi\" = 4,\n \"They love tofu\" = 7))\n\n\n\n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n qsec\n vs\n \n \n \n \n \n 21.0\n 6\n 160.0\n 110\n 3.90\n 2.620\n 16.46\n 0\n \n \n 21.0\n 6\n 160.0\n 110\n 3.90\n 2.875\n 17.02\n 0\n \n \n 22.8\n 4\n 108.0\n 93\n 3.85\n 2.320\n 18.61\n 1\n \n \n 21.4\n 6\n 258.0\n 110\n 3.08\n 3.215\n 19.44\n 1\n \n \n 18.7\n 8\n 360.0\n 175\n 3.15\n 3.440\n 17.02\n 0\n \n \n 18.1\n 6\n 225.0\n 105\n 2.76\n 3.460\n 20.22\n 1\n \n \n 14.3\n 8\n 360.0\n 245\n 3.21\n 3.570\n 15.84\n 0\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n 3.190\n 20.00\n 1\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n 3.150\n 22.90\n 1\n \n \n \n \n\n\ntt(dat) |>\n group_tt(\n j = list(\n \"Hamburgers\" = 1:3,\n \"Halloumi\" = 4:5,\n \"Tofu\" = 7))\n\n\n\n \n\n \n \n \n \n\nHamburgers\nHalloumi\n \nTofu\n \n\n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n qsec\n vs\n \n \n \n \n \n 21.0\n 6\n 160.0\n 110\n 3.90\n 2.620\n 16.46\n 0\n \n \n 21.0\n 6\n 160.0\n 110\n 3.90\n 2.875\n 17.02\n 0\n \n \n 22.8\n 4\n 108.0\n 93\n 3.85\n 2.320\n 18.61\n 1\n \n \n 21.4\n 6\n 258.0\n 110\n 3.08\n 3.215\n 19.44\n 1\n \n \n 18.7\n 8\n 360.0\n 175\n 3.15\n 3.440\n 17.02\n 0\n \n \n 18.1\n 6\n 225.0\n 105\n 2.76\n 3.460\n 20.22\n 1\n \n \n 14.3\n 8\n 360.0\n 245\n 3.21\n 3.570\n 15.84\n 0\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n 3.190\n 20.00\n 1\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n 3.150\n 22.90\n 1\n \n \n \n \n\n\nx <- mtcars[1:5, 1:6]\ntt(x) |>\n group_tt(j = list(\"Hello\" = 1:2, \"World\" = 3:4, \"Hello\" = 5:6)) |>\n group_tt(j = list(\"Foo\" = 1:3, \"Bar\" = 4:6))\n\n\n\n \n\n \n \n \n \n\nFoo\nBar\n\n\nHello\nWorld\nHello\n\n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21.0\n 6\n 160\n 110\n 3.90\n 2.620\n \n \n 21.0\n 6\n 160\n 110\n 3.90\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.320\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n 3.215\n \n \n 18.7\n 8\n 360\n 175\n 3.15\n 3.440", + "text": "Spanning labels to identify groups of rows or columns\n\n\n\ngroup_tt(x, i = NULL, j = NULL, indent = 1, ...)\n\n\n\n\n\n\n\nx\n\n\nA data frame or data table to be rendered as a table.\n\n\n\n\ni\n\n\nA vector of labels with length equal to the number of rows in x, or a named list of row indices to group. The names of the list will be used as labels. The indices represent the position where labels should be inserted in the original table. For example,\n\n\ni=list(“Hello”=5): insert the \"Hello\" label after the 4th row in the original table.\n\n\ni=list(“Hello”=2, “World”=2): insert the two labels consecutively after the 1st row in the original table.\n\n\ni=list(“Foo Bar”=0): insert the label in the first row after the header.\n\n\n\n\n\n\nj\n\n\nA named list of column indices to group. The names of the list will be used as labels. See examples below. Note: empty labels must be a space: \" \".\n\n\n\n\nindent\n\n\ninteger number of pt to use when indenting the non-labelled rows.\n\n\n\n\n…\n\n\nOther arguments are ignored.\n\n\n\n\n\n\nWarning: The style_tt() can normally be used to style the group headers, as expected, but that feature is not available for Markdown and Word tables.\n\n\n\nAn object of class tt representing the table.\n\n\n\n\nlibrary(\"tinytable\")\n\n\n# vector of row labels\ndat <- data.frame(\n label = c(\"a\", \"a\", \"a\", \"b\", \"b\", \"c\", \"a\", \"a\"),\n x1 = rnorm(8),\n x2 = rnorm(8))\ntt(dat[, 2:3]) |> group_tt(i = dat$label)\n\n\n\n \n\n \n \n \n \n \n \n x1\n x2\n \n \n \n \n \n -1.2928994\n 0.3438932\n \n \n -0.2131877\n 0.9079434\n \n \n -1.0560067\n 0.8225227\n \n \n 1.0793180\n -1.9694722\n \n \n -0.0945106\n 0.5980063\n \n \n 1.8215610\n 0.2414946\n \n \n 1.1239596\n 1.0194036\n \n \n -1.6838725\n -1.0095785\n \n \n \n \n\n\n# named lists of labels\ntt(mtcars[1:10, 1:5]) |>\n group_tt(\n i = list(\n \"Hello\" = 3,\n \"World\" = 8),\n j = list(\n \"Foo\" = 2:3,\n \"Bar\" = 4:5))\n\n\n\n \n\n \n \n \n \n\n \nFoo\nBar\n\n \n \n mpg\n cyl\n disp\n hp\n drat\n \n \n \n \n \n 21.0\n 6\n 160.0\n 110\n 3.90\n \n \n 21.0\n 6\n 160.0\n 110\n 3.90\n \n \n 22.8\n 4\n 108.0\n 93\n 3.85\n \n \n 21.4\n 6\n 258.0\n 110\n 3.08\n \n \n 18.7\n 8\n 360.0\n 175\n 3.15\n \n \n 18.1\n 6\n 225.0\n 105\n 2.76\n \n \n 14.3\n 8\n 360.0\n 245\n 3.21\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n \n \n 19.2\n 6\n 167.6\n 123\n 3.92\n \n \n \n \n\n\ndat <- mtcars[1:9, 1:8]\ntt(dat) |>\n group_tt(i = list(\n \"I like (fake) hamburgers\" = 3,\n \"She prefers halloumi\" = 4,\n \"They love tofu\" = 7))\n\n\n\n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n qsec\n vs\n \n \n \n \n \n 21.0\n 6\n 160.0\n 110\n 3.90\n 2.620\n 16.46\n 0\n \n \n 21.0\n 6\n 160.0\n 110\n 3.90\n 2.875\n 17.02\n 0\n \n \n 22.8\n 4\n 108.0\n 93\n 3.85\n 2.320\n 18.61\n 1\n \n \n 21.4\n 6\n 258.0\n 110\n 3.08\n 3.215\n 19.44\n 1\n \n \n 18.7\n 8\n 360.0\n 175\n 3.15\n 3.440\n 17.02\n 0\n \n \n 18.1\n 6\n 225.0\n 105\n 2.76\n 3.460\n 20.22\n 1\n \n \n 14.3\n 8\n 360.0\n 245\n 3.21\n 3.570\n 15.84\n 0\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n 3.190\n 20.00\n 1\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n 3.150\n 22.90\n 1\n \n \n \n \n\n\ntt(dat) |>\n group_tt(\n j = list(\n \"Hamburgers\" = 1:3,\n \"Halloumi\" = 4:5,\n \"Tofu\" = 7))\n\n\n\n \n\n \n \n \n \n\nHamburgers\nHalloumi\n \nTofu\n \n\n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n qsec\n vs\n \n \n \n \n \n 21.0\n 6\n 160.0\n 110\n 3.90\n 2.620\n 16.46\n 0\n \n \n 21.0\n 6\n 160.0\n 110\n 3.90\n 2.875\n 17.02\n 0\n \n \n 22.8\n 4\n 108.0\n 93\n 3.85\n 2.320\n 18.61\n 1\n \n \n 21.4\n 6\n 258.0\n 110\n 3.08\n 3.215\n 19.44\n 1\n \n \n 18.7\n 8\n 360.0\n 175\n 3.15\n 3.440\n 17.02\n 0\n \n \n 18.1\n 6\n 225.0\n 105\n 2.76\n 3.460\n 20.22\n 1\n \n \n 14.3\n 8\n 360.0\n 245\n 3.21\n 3.570\n 15.84\n 0\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n 3.190\n 20.00\n 1\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n 3.150\n 22.90\n 1\n \n \n \n \n\n\nx <- mtcars[1:5, 1:6]\ntt(x) |>\n group_tt(j = list(\"Hello\" = 1:2, \"World\" = 3:4, \"Hello\" = 5:6)) |>\n group_tt(j = list(\"Foo\" = 1:3, \"Bar\" = 4:6))\n\n\n\n \n\n \n \n \n \n\nFoo\nBar\n\n\nHello\nWorld\nHello\n\n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21.0\n 6\n 160\n 110\n 3.90\n 2.620\n \n \n 21.0\n 6\n 160\n 110\n 3.90\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.320\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n 3.215\n \n \n 18.7\n 8\n 360\n 175\n 3.15\n 3.440", "crumbs": [ "Tutorial (PDF)", "Functions", @@ -1094,7 +1094,7 @@ "href": "man/group_tt.html#spanning-labels-to-identify-groups-of-rows-or-columns", "title": "tinytable", "section": "", - "text": "Spanning labels to identify groups of rows or columns\n\n\n\ngroup_tt(x, i = NULL, j = NULL, indent = 1, ...)\n\n\n\n\n\n\n\nx\n\n\nA data frame or data table to be rendered as a table.\n\n\n\n\ni\n\n\nA vector of labels with length equal to the number of rows in x, or a named list of row indices to group. The names of the list will be used as labels. The indices represent the position where labels should be inserted in the original table. For example,\n\n\ni=list(“Hello”=5): insert the \"Hello\" label after the 4th row in the original table.\n\n\ni=list(“Hello”=2, “World”=2): insert the two labels consecutively after the 1st row in the original table.\n\n\ni=list(“Foo Bar”=0): insert the label in the first row after the header.\n\n\n\n\n\n\nj\n\n\nA named list of column indices to group. The names of the list will be used as labels. See examples below. Note: empty labels must be a space: \" \".\n\n\n\n\nindent\n\n\ninteger number of pt to use when indenting the non-labelled rows.\n\n\n\n\n…\n\n\nOther arguments are ignored.\n\n\n\n\n\n\nWarning: The style_tt() can normally be used to style the group headers, as expected, but that feature is not available for Markdown and Word tables.\n\n\n\nAn object of class tt representing the table.\n\n\n\n\nlibrary(\"tinytable\")\n\n\n# vector of row labels\ndat <- data.frame(\n label = c(\"a\", \"a\", \"a\", \"b\", \"b\", \"c\", \"a\", \"a\"),\n x1 = rnorm(8),\n x2 = rnorm(8))\ntt(dat[, 2:3]) |> group_tt(i = dat$label)\n\n\n\n \n\n \n \n \n \n \n \n x1\n x2\n \n \n \n \n \n -1.0078862\n 0.4352756\n \n \n 1.4752168\n 0.9104151\n \n \n -0.8107267\n -0.2365799\n \n \n -1.2232999\n 0.1458874\n \n \n 0.9005819\n -0.6132735\n \n \n -0.1360992\n -1.1905177\n \n \n -0.6259448\n -1.0824529\n \n \n 0.6234085\n 0.3027523\n \n \n \n \n\n\n# named lists of labels\ntt(mtcars[1:10, 1:5]) |>\n group_tt(\n i = list(\n \"Hello\" = 3,\n \"World\" = 8),\n j = list(\n \"Foo\" = 2:3,\n \"Bar\" = 4:5))\n\n\n\n \n\n \n \n \n \n\n \nFoo\nBar\n\n \n \n mpg\n cyl\n disp\n hp\n drat\n \n \n \n \n \n 21.0\n 6\n 160.0\n 110\n 3.90\n \n \n 21.0\n 6\n 160.0\n 110\n 3.90\n \n \n 22.8\n 4\n 108.0\n 93\n 3.85\n \n \n 21.4\n 6\n 258.0\n 110\n 3.08\n \n \n 18.7\n 8\n 360.0\n 175\n 3.15\n \n \n 18.1\n 6\n 225.0\n 105\n 2.76\n \n \n 14.3\n 8\n 360.0\n 245\n 3.21\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n \n \n 19.2\n 6\n 167.6\n 123\n 3.92\n \n \n \n \n\n\ndat <- mtcars[1:9, 1:8]\ntt(dat) |>\n group_tt(i = list(\n \"I like (fake) hamburgers\" = 3,\n \"She prefers halloumi\" = 4,\n \"They love tofu\" = 7))\n\n\n\n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n qsec\n vs\n \n \n \n \n \n 21.0\n 6\n 160.0\n 110\n 3.90\n 2.620\n 16.46\n 0\n \n \n 21.0\n 6\n 160.0\n 110\n 3.90\n 2.875\n 17.02\n 0\n \n \n 22.8\n 4\n 108.0\n 93\n 3.85\n 2.320\n 18.61\n 1\n \n \n 21.4\n 6\n 258.0\n 110\n 3.08\n 3.215\n 19.44\n 1\n \n \n 18.7\n 8\n 360.0\n 175\n 3.15\n 3.440\n 17.02\n 0\n \n \n 18.1\n 6\n 225.0\n 105\n 2.76\n 3.460\n 20.22\n 1\n \n \n 14.3\n 8\n 360.0\n 245\n 3.21\n 3.570\n 15.84\n 0\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n 3.190\n 20.00\n 1\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n 3.150\n 22.90\n 1\n \n \n \n \n\n\ntt(dat) |>\n group_tt(\n j = list(\n \"Hamburgers\" = 1:3,\n \"Halloumi\" = 4:5,\n \"Tofu\" = 7))\n\n\n\n \n\n \n \n \n \n\nHamburgers\nHalloumi\n \nTofu\n \n\n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n qsec\n vs\n \n \n \n \n \n 21.0\n 6\n 160.0\n 110\n 3.90\n 2.620\n 16.46\n 0\n \n \n 21.0\n 6\n 160.0\n 110\n 3.90\n 2.875\n 17.02\n 0\n \n \n 22.8\n 4\n 108.0\n 93\n 3.85\n 2.320\n 18.61\n 1\n \n \n 21.4\n 6\n 258.0\n 110\n 3.08\n 3.215\n 19.44\n 1\n \n \n 18.7\n 8\n 360.0\n 175\n 3.15\n 3.440\n 17.02\n 0\n \n \n 18.1\n 6\n 225.0\n 105\n 2.76\n 3.460\n 20.22\n 1\n \n \n 14.3\n 8\n 360.0\n 245\n 3.21\n 3.570\n 15.84\n 0\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n 3.190\n 20.00\n 1\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n 3.150\n 22.90\n 1\n \n \n \n \n\n\nx <- mtcars[1:5, 1:6]\ntt(x) |>\n group_tt(j = list(\"Hello\" = 1:2, \"World\" = 3:4, \"Hello\" = 5:6)) |>\n group_tt(j = list(\"Foo\" = 1:3, \"Bar\" = 4:6))\n\n\n\n \n\n \n \n \n \n\nFoo\nBar\n\n\nHello\nWorld\nHello\n\n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21.0\n 6\n 160\n 110\n 3.90\n 2.620\n \n \n 21.0\n 6\n 160\n 110\n 3.90\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.320\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n 3.215\n \n \n 18.7\n 8\n 360\n 175\n 3.15\n 3.440", + "text": "Spanning labels to identify groups of rows or columns\n\n\n\ngroup_tt(x, i = NULL, j = NULL, indent = 1, ...)\n\n\n\n\n\n\n\nx\n\n\nA data frame or data table to be rendered as a table.\n\n\n\n\ni\n\n\nA vector of labels with length equal to the number of rows in x, or a named list of row indices to group. The names of the list will be used as labels. The indices represent the position where labels should be inserted in the original table. For example,\n\n\ni=list(“Hello”=5): insert the \"Hello\" label after the 4th row in the original table.\n\n\ni=list(“Hello”=2, “World”=2): insert the two labels consecutively after the 1st row in the original table.\n\n\ni=list(“Foo Bar”=0): insert the label in the first row after the header.\n\n\n\n\n\n\nj\n\n\nA named list of column indices to group. The names of the list will be used as labels. See examples below. Note: empty labels must be a space: \" \".\n\n\n\n\nindent\n\n\ninteger number of pt to use when indenting the non-labelled rows.\n\n\n\n\n…\n\n\nOther arguments are ignored.\n\n\n\n\n\n\nWarning: The style_tt() can normally be used to style the group headers, as expected, but that feature is not available for Markdown and Word tables.\n\n\n\nAn object of class tt representing the table.\n\n\n\n\nlibrary(\"tinytable\")\n\n\n# vector of row labels\ndat <- data.frame(\n label = c(\"a\", \"a\", \"a\", \"b\", \"b\", \"c\", \"a\", \"a\"),\n x1 = rnorm(8),\n x2 = rnorm(8))\ntt(dat[, 2:3]) |> group_tt(i = dat$label)\n\n\n\n \n\n \n \n \n \n \n \n x1\n x2\n \n \n \n \n \n -1.2928994\n 0.3438932\n \n \n -0.2131877\n 0.9079434\n \n \n -1.0560067\n 0.8225227\n \n \n 1.0793180\n -1.9694722\n \n \n -0.0945106\n 0.5980063\n \n \n 1.8215610\n 0.2414946\n \n \n 1.1239596\n 1.0194036\n \n \n -1.6838725\n -1.0095785\n \n \n \n \n\n\n# named lists of labels\ntt(mtcars[1:10, 1:5]) |>\n group_tt(\n i = list(\n \"Hello\" = 3,\n \"World\" = 8),\n j = list(\n \"Foo\" = 2:3,\n \"Bar\" = 4:5))\n\n\n\n \n\n \n \n \n \n\n \nFoo\nBar\n\n \n \n mpg\n cyl\n disp\n hp\n drat\n \n \n \n \n \n 21.0\n 6\n 160.0\n 110\n 3.90\n \n \n 21.0\n 6\n 160.0\n 110\n 3.90\n \n \n 22.8\n 4\n 108.0\n 93\n 3.85\n \n \n 21.4\n 6\n 258.0\n 110\n 3.08\n \n \n 18.7\n 8\n 360.0\n 175\n 3.15\n \n \n 18.1\n 6\n 225.0\n 105\n 2.76\n \n \n 14.3\n 8\n 360.0\n 245\n 3.21\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n \n \n 19.2\n 6\n 167.6\n 123\n 3.92\n \n \n \n \n\n\ndat <- mtcars[1:9, 1:8]\ntt(dat) |>\n group_tt(i = list(\n \"I like (fake) hamburgers\" = 3,\n \"She prefers halloumi\" = 4,\n \"They love tofu\" = 7))\n\n\n\n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n qsec\n vs\n \n \n \n \n \n 21.0\n 6\n 160.0\n 110\n 3.90\n 2.620\n 16.46\n 0\n \n \n 21.0\n 6\n 160.0\n 110\n 3.90\n 2.875\n 17.02\n 0\n \n \n 22.8\n 4\n 108.0\n 93\n 3.85\n 2.320\n 18.61\n 1\n \n \n 21.4\n 6\n 258.0\n 110\n 3.08\n 3.215\n 19.44\n 1\n \n \n 18.7\n 8\n 360.0\n 175\n 3.15\n 3.440\n 17.02\n 0\n \n \n 18.1\n 6\n 225.0\n 105\n 2.76\n 3.460\n 20.22\n 1\n \n \n 14.3\n 8\n 360.0\n 245\n 3.21\n 3.570\n 15.84\n 0\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n 3.190\n 20.00\n 1\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n 3.150\n 22.90\n 1\n \n \n \n \n\n\ntt(dat) |>\n group_tt(\n j = list(\n \"Hamburgers\" = 1:3,\n \"Halloumi\" = 4:5,\n \"Tofu\" = 7))\n\n\n\n \n\n \n \n \n \n\nHamburgers\nHalloumi\n \nTofu\n \n\n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n qsec\n vs\n \n \n \n \n \n 21.0\n 6\n 160.0\n 110\n 3.90\n 2.620\n 16.46\n 0\n \n \n 21.0\n 6\n 160.0\n 110\n 3.90\n 2.875\n 17.02\n 0\n \n \n 22.8\n 4\n 108.0\n 93\n 3.85\n 2.320\n 18.61\n 1\n \n \n 21.4\n 6\n 258.0\n 110\n 3.08\n 3.215\n 19.44\n 1\n \n \n 18.7\n 8\n 360.0\n 175\n 3.15\n 3.440\n 17.02\n 0\n \n \n 18.1\n 6\n 225.0\n 105\n 2.76\n 3.460\n 20.22\n 1\n \n \n 14.3\n 8\n 360.0\n 245\n 3.21\n 3.570\n 15.84\n 0\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n 3.190\n 20.00\n 1\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n 3.150\n 22.90\n 1\n \n \n \n \n\n\nx <- mtcars[1:5, 1:6]\ntt(x) |>\n group_tt(j = list(\"Hello\" = 1:2, \"World\" = 3:4, \"Hello\" = 5:6)) |>\n group_tt(j = list(\"Foo\" = 1:3, \"Bar\" = 4:6))\n\n\n\n \n\n \n \n \n \n\nFoo\nBar\n\n\nHello\nWorld\nHello\n\n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21.0\n 6\n 160\n 110\n 3.90\n 2.620\n \n \n 21.0\n 6\n 160\n 110\n 3.90\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.320\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n 3.215\n \n \n 18.7\n 8\n 360\n 175\n 3.15\n 3.440", "crumbs": [ "Tutorial (PDF)", "Functions", diff --git a/vignettes/custom.html b/vignettes/custom.html index fd76549b..9553fcb5 100644 --- a/vignettes/custom.html +++ b/vignettes/custom.html @@ -427,12 +427,12 @@

Bootstrap classes

-
+
@@ -532,12 +532,12 @@

Bootstrap classes

-
+
@@ -638,12 +638,12 @@

Bootstrap classes

-
+
@@ -747,12 +747,12 @@

CSS declarations

-
+
@@ -898,12 +898,12 @@

CSS rules

-
+
@@ -1067,12 +1067,12 @@

CSS rules

-
+
diff --git a/vignettes/format.html b/vignettes/format.html index edc3f701..aa80cc50 100644 --- a/vignettes/format.html +++ b/vignettes/format.html @@ -446,12 +446,12 @@

Numbers, dates,
-

+
@@ -511,19 +511,19 @@

Numbers, dates,

- + - + - + @@ -549,12 +549,12 @@

Numbers, dates,
-

143002 1.431971-03-081971-10-17 True
201399 201.4 1970-08-161970-12-24 True
100188 0.131971-09-161971-12-13 False
+
@@ -614,19 +614,19 @@

Numbers, dates,

- + - + - + @@ -649,12 +649,12 @@

Numbers, dates,
-

143 002,21 1.4March 08 1971October 17 1971 True
201 399,18 201.4August 16 1970December 24 1970 True
100 188,39 0.1September 16 1971December 13 1971 False
+
@@ -761,12 +761,12 @@

Significan
-

+
@@ -836,12 +836,12 @@

Significan
-

+
@@ -913,12 +913,12 @@

Significan
-

+
@@ -1013,12 +1013,12 @@

Math

-
+
@@ -1109,12 +1109,12 @@

Math

-
+
@@ -1203,12 +1203,12 @@

Replacement

-
+
@@ -1297,12 +1297,12 @@

Replacement

-
+
@@ -1391,12 +1391,12 @@

Replacement

-
+
@@ -1490,12 +1490,12 @@

Replacement

-
+
@@ -1603,12 +1603,12 @@

Escape special c
-

+
@@ -1717,12 +1717,12 @@

Markdown

-
+
@@ -1839,12 +1839,12 @@

Markdown

-
+

Vincent sometimes contributes to these R packages.

@@ -1973,12 +1973,12 @@

Custom functions

-

Vincent sometimes contributes to these R packages.

+
@@ -2107,12 +2107,12 @@

Custom functions

-
+
@@ -2232,12 +2232,12 @@

Quarto data process
-

+
@@ -2324,12 +2324,12 @@

Quarto data process
-

Thing
+
@@ -2419,12 +2419,12 @@

Quarto data process
-

Thing
+
diff --git a/vignettes/group.html b/vignettes/group.html index 2fcb585b..3f444828 100644 --- a/vignettes/group.html +++ b/vignettes/group.html @@ -423,12 +423,12 @@

Rows

-
mpg
+
@@ -619,12 +619,12 @@

Rows

-
+
@@ -753,12 +753,12 @@

Rows

-
+
@@ -886,12 +886,12 @@

Rows

-
+
@@ -1030,12 +1030,12 @@

Rows

-
+
@@ -1259,12 +1259,12 @@

Automatic row groups<
-

+
@@ -1512,12 +1512,12 @@

Columns

-
+
@@ -1716,12 +1716,12 @@

Columns

-
Hamburgers
+
@@ -1946,12 +1946,12 @@

Columns

-
Hamburgers
+
diff --git a/vignettes/plot.html b/vignettes/plot.html index eee42e28..e3f28fe3 100644 --- a/vignettes/plot.html +++ b/vignettes/plot.html @@ -431,12 +431,12 @@

Inserting image
-

Hello
+
@@ -514,12 +514,12 @@

Inserting image
-

+
@@ -618,12 +618,12 @@

Built-in plots

-
+
@@ -698,24 +698,24 @@

Built-in plots

- - - - + + + + - - - - + + + + - - - - + + + +
mpg
hp
qsec
@@ -744,12 +744,12 @@

Custom plots: Base
- +
@@ -804,15 +804,15 @@

Custom plots: Base

- + - + - +
mpg
hp
qsec
@@ -845,12 +845,12 @@

Custom plots: g
- +
@@ -905,15 +905,15 @@

Custom plots: g

- + - + - +
mpg
hp
qsec
@@ -962,12 +962,12 @@

Custom plots: g
- +
@@ -1037,21 +1037,21 @@

Custom plots: g

- - - + + + - - - + + + - - - + + +
Adelie
Chinstrap
Gentoo
@@ -1073,12 +1073,12 @@

Fontawesome

- +
diff --git a/vignettes/style.html b/vignettes/style.html index ce7709d7..0aa51a81 100644 --- a/vignettes/style.html +++ b/vignettes/style.html @@ -449,12 +449,12 @@

Cells, rows, columns
-

+
@@ -561,12 +561,12 @@

Cells, rows, columns
-

+
@@ -673,12 +673,12 @@

Cells, rows, columns
-

+
@@ -799,12 +799,12 @@

Cells, rows, columns
-

+
@@ -915,12 +915,12 @@

Cells, rows, columns
-

+
@@ -1030,12 +1030,12 @@

Cells, rows, columns
-

+
@@ -1142,12 +1142,12 @@

Cells, rows, columns
-

+
@@ -1257,12 +1257,12 @@

Cells, rows, columns
-

+
@@ -1378,12 +1378,12 @@

Cells, rows, columns
-

+
@@ -1505,12 +1505,12 @@

Colors

-
+
@@ -1624,12 +1624,12 @@

Alignment

-
+
@@ -1719,12 +1719,12 @@

Alignment

-
+
@@ -1824,12 +1824,12 @@

Alignment

-
+
@@ -1913,12 +1913,12 @@

Font size

-
+
@@ -2039,12 +2039,12 @@

Spanning cell
-

+
@@ -2147,12 +2147,12 @@

Spanning cell
-

+
@@ -2265,12 +2265,12 @@

Spanning cell
-

+
@@ -2378,12 +2378,12 @@

Spanning cell
-

+
@@ -2459,12 +2459,12 @@

Spanning cell
-

+
@@ -2544,12 +2544,12 @@

Headers

-
+
@@ -2642,12 +2642,12 @@

Headers

-
+
@@ -2747,12 +2747,12 @@

Headers

-
+
@@ -2871,12 +2871,12 @@

Conditional styling
-

+
@@ -3006,12 +3006,12 @@

Conditional styling
-

+
@@ -3138,12 +3138,12 @@

Vectorized sty
-

+
@@ -3271,12 +3271,12 @@

Vectorized sty
-

+
@@ -3407,12 +3407,12 @@

Vectorized sty
-

+
@@ -3561,12 +3561,12 @@

Lines (borders)

-
+
@@ -3676,12 +3676,12 @@

Lines (borders)

-
+
@@ -3792,12 +3792,12 @@

Lines (borders)

-
+
@@ -3883,12 +3883,12 @@

Cell padding
-

+
diff --git a/vignettes/theme.html b/vignettes/theme.html index 87f407db..d64bb8bc 100644 --- a/vignettes/theme.html +++ b/vignettes/theme.html @@ -423,12 +423,12 @@

Visual themes

-
+
@@ -623,12 +623,12 @@

Visual themes

-
+
@@ -915,12 +915,12 @@

Custom themes

-
Always use the same caption.
+
diff --git a/vignettes/tinytable.html b/vignettes/tinytable.html index 44b9a565..36d23c47 100644 --- a/vignettes/tinytable.html +++ b/vignettes/tinytable.html @@ -423,12 +423,12 @@

Tiny Tables

-
Always use the same caption.
+
@@ -530,12 +530,12 @@

Width

-
+
@@ -634,12 +634,12 @@

Width

-
+
@@ -739,12 +739,12 @@

Width

-
+
@@ -867,12 +867,12 @@

Width

-
+
@@ -1002,12 +1002,12 @@

Width

-
+
@@ -1082,12 +1082,12 @@

Footnotes

-
+

A full-width table with wrapped text in cells and a footnote.

@@ -1160,12 +1160,12 @@

Footnotes

-

A full-width table with wrapped text in cells and a footnote.

+
@@ -1276,12 +1276,12 @@

Footnotes

-
+
@@ -1408,12 +1408,12 @@

Captions and
-

+
@@ -1527,12 +1527,12 @@

Line breaks
-

+
@@ -1681,12 +1681,12 @@

Combination an
-

+
@@ -1779,12 +1779,12 @@

Combination an
-

+
@@ -1895,12 +1895,12 @@

Combination an
-

Combine two tiny tables.
+
@@ -2015,12 +2015,12 @@

Combination an
-

Combine two tiny tables.
+
@@ -2127,12 +2127,12 @@

Combination an
-

Combine two tiny tables.
+
@@ -2235,12 +2235,12 @@

Renaming columns

-
Combine two tiny tables.
+
@@ -2316,12 +2316,12 @@

Renaming columns

-
+
diff --git a/vignettes/tinytable_assets/id17n7yfbiqokvefn8xa31.png b/vignettes/tinytable_assets/id17n7yfbiqokvefn8xa31.png new file mode 100644 index 0000000000000000000000000000000000000000..0ba387fc3e1135765e809dcc4044514a6a01b861 GIT binary patch literal 2564 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 MEvX;@{$?2Te^F4R`v3p{ literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/id3l4nfzts9g8wt53tttu9.png b/vignettes/tinytable_assets/id3l4nfzts9g8wt53tttu9.png new file mode 100644 index 0000000000000000000000000000000000000000..8eaafeb9f170fad97d9a846acb7cba6bebb3dc7e GIT binary patch literal 1829 zcmeAS@N?(olHy`uVBq!ia0y~yV1B{C!05}t3=~;nymb+fG6?Vqan+J$aMWUO(P8lR z_6`gTtgf!^?Ck97>Y6cQ#>|;B=chBgd-v|kJceJte*Is{@c;k+H5-4$F)*-g@N{tu zshIQj^66aBKn9nChBuxi^ZZQrX39VKDB|+7FxLw~uVd;P{@*M8&hX$dr!1dBiABSO zhYU{b%p7Q(g1r|j_y6{*c(ZF?KxNfF5bM{^*{9a8FTc;(&uObt5;jVVhQVk$7|jNw zMZpLv31hE|Yx$oC)d8{jCHLO%6PDZkPL83*X5nGR7Cv?XD;b9u1q|q%b=T$RA3Xhi sxA>p#_xk1fKh)RTy|0;ce*a(AU-N@4Wt=(#f%P7Pr>mdKI;Vst0K#MNOaK4? literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/id4a1spfe8hlrg31iy8zts.png b/vignettes/tinytable_assets/id4a1spfe8hlrg31iy8zts.png new file mode 100644 index 0000000000000000000000000000000000000000..5f1e6473044bd1b6291d02ab49d447586fdcca56 GIT binary patch literal 11898 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 literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/id4fqz0fpq2h2ilb50ustb.png b/vignettes/tinytable_assets/id4fqz0fpq2h2ilb50ustb.png new file mode 100644 index 0000000000000000000000000000000000000000..5e33c88b48ac9fae9fd4c33a022920566f8e8e3a GIT binary patch literal 512 zcmeAS@N?(olHy`uVBq!ia0y~yVAKJ!Q#hD`B=`NlpMaD~fKP}kkp92--2X#o{vSB` z|G=sL2TuRre;P!B(3$@Sf#RoqIh8H|)$x=B`2{n`8(F6I%~^i-$*ceAS7nw0#W@Q+ zB8wRq^pruEv0|xx8PK*YPZ!6KiaBpD-Sj&Yz~CCF=J@6R|8Nt-s--;AQb{Fm)i2#C zx;0f#taw}9-Wyeq?wrideA{JR7rMcTTv#ug{eSJ%z4d0w*G~TkS^f9l3s3oe)7N); zBL4D4Y)IJ4uFXOg{L;U1n*aRV`TV)ZdApad?ESpk{@&wx jZM{cVI?A$Ze_`t@uzfh`w8l0s?}9f+8X! zIyySW#>OTlCbqV=c6N3S4i1ivj!sTaE-o&Gg@xtiXU?2IfBuRUE7q=E zyMF!pUAuPe-@pIRp+jfRoH=*y+=UAlZrr$W>(;HickkZ2ckllF`_G;|d-3AMyLazC zeE9J5=g;52fB*ga_us#N|NsA2eJV16fq{eF)5S5QV$R#kFE8bW^0r-E+@VpX(JR|j z74qZVe>UB}vabSG&YU}Srs2ATbzh%VerJn$AN!rTp~|V9wS|wHLsm?{N=Kn2!r{e+ zh6{;|3lB4aB<6ja|Go9!-M^)GTwi4FuMK}O{cim6SfH@8u2J#z-7YpENmTXrt2|K>Zl zzU;h{$BWEjXZ@?T+={!GaN1rOr5Ell|9Skp-MY_#TqacV{{8?(M!1zrMQIsrG1vQKkt6GI)26Pc^qHg zf6DxxS`_l#R`At**B9k4_o+Mm1zMkGnYw?P-Jg5} zZ;IWY*N3Km7q&_lo!52YbIZBN*5yiHY!()WJzU9Q>;Ga-XoZ&3`C%;mXa0q3&bjUa zRk{m5b2zP6Es=A4v9;x#GRNL&7b;m6UKg_JSNIa;^jxqd&ijQ;6ZI7Dul>I7g8nY{ zw*P{^Zj0ZQcCcKyzxLi<#wo(PE<`%Ka7t%f$UT>}MXy9mfJy=ny6vz3tS&t+uTrA% zef6t8dyf|Z?=C}VKa?s9wJtm0Ul;p)vOTBlyYD+MJgmc8*`ex0ss-sUabV|#{crw> zJZP_})cLag`vK#>uiaJuJa%Gt6UI_YBf0Ovej9%lBlp#e&A>(pgQu&X%Q~loCIH|} B8%qEH literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/id5d3wqwrami515dglx2xz.png b/vignettes/tinytable_assets/id5d3wqwrami515dglx2xz.png new file mode 100644 index 0000000000000000000000000000000000000000..04b900e8601a1a502d7058bd6be142b47df7e9ee GIT binary patch literal 548 zcmeAS@N?(olHy`uVBq!ia0y~yVAKJ!Q#hD`B=`NlpMaElfKP}kkp92_%KyFR{vSH? z|G>%r2TuJzaQgp&Gye|)(P-?4p)qZ08?j3!!ZS8&cwfTF_)v{}|V1-{4BK*%Uo_EgrspE!qpJ#6P_h-s({xA-5 z;kESBUspU`xLi77`L+AiT-?{*B(&m&dIx9ix?A<<*z3{_>xx%@>jCns%;$c;|8M?= zb!HM_5GZK7<4xtbGO4{kV=5RquG#sE#Yzjy23%U+RScf4elF{r5}E+Z C(&yj+ literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/id6w2suf70inl6t15zanqv.png b/vignettes/tinytable_assets/id6w2suf70inl6t15zanqv.png new file mode 100644 index 0000000000000000000000000000000000000000..b6cc9f629224963722c35431d023f15477b01514 GIT binary patch literal 1846 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%0D>T%HcifTWP{|cLV9I z3d-?HLTi%SXI`g#cDS0(Tefl8fymx>O>U_eHv9Rk&Q<3CZ`9UkBC53|_eMF^riySy zA<8?0zc+#(cD$WX=0{HMr}$2vi|(l(=hfNr3$8;Q zNCkJV@%_|N68$QjD7zX`eGBWOl=>8+OpF7y!44;NpfAiVPOlW@Z_#Tp#wroSsqL(nE$Dn)p zdGM^)JuA#_M=Vww3_e@G7;zKsnYMaMpIM4U_zwZ`oAcfIJH6jrpC!~f2A4!*m4A7^ zN|YY|{%*y)s6m9jFjb_JLgwz{HV(-1GBU^PIhr)Yn~yp$&tkW*x(S}2=61D^99R{zj@kf`~taqa&-`40m>7HgC|Jt}&)1!T6 zau!k*td3l~t&-|Vh0h$>lC)}7=yfHZk8~0=TO_v|6lG$okPa&r^vjr|5VIJjVN6oD zU2f_WG(DQqj!(SqerEUk-43)(piF0t{`I4R$6{YJ{-CCCBdM$+W4B3q(#BtS+0v-+ z9vG~z+wE*6N8V^xt>YpkbmwE1F)KUqb5u9WYSjDxKK*m^Q64srwkP;KRowchf@jp8 zBN)(IjY*8v5W+5_pu_2fQKSFbL*ASEyLa8SaN%1t8E+*i9~Q3239=2O9;*Z-2(6Kw z=BC8j>*l64$6MFM(5y2)GzO%!^2Tc4#*7Y`9aw~U{(jfXb(K5B#HiJtv%0dXOR>oB zVr?}u|J3SROqW~}Ux|fbWlax%6=35CKC3e4IR;Wi1XlIAba|OC&c1`zti!u07fmEG z;k&o4n{M<@zk|4Y9OfVWd0kw8j`K^Z2*+xVfG%gWX52rC(c5#aw*|i(vi_booeMf- z8kF{)TZ-xyIQ=g3h)>wFGEY9`Hw{09Ds8z(Qm)Q9;T+5mSsx3cKX!taH8r`uu+g%vjQhz>la4#(!u9=? z=as21>gC-t!JY}c36n3J<2k2lkEO3(3OQ}?oBrChokh1zlUrII8eI}Ao*Lzl1b`6%ikj+TvU9E8i1!zi=eSOx=7_$1KT6@LC8 z`;~8JTBEPnaW4X@uJQBMQfxh0C)3N&d-bA<8<7mB^vw+$xIGX%ZT=^DTqYfzbNM(~ z-5?B}rS)^aIXxtQY1w9(Mem_hz};8dI0h!9 zVa8o^Y}sl^%!N}{`m9{XoYv-JW(HC}jd{dl&qe+l3m;4ujw6)n$)$OoE zqdxZI2YQ^bVG0KouWI+oqfc*1$0$1BG|*LHU)>c}{FEeH4g2Vk#^~-M4K-|{=z&ug z^hc;R6)m}4)ddZ>p;aQizyj=Qq3Pece-a7u@Z_p}@z|S3$(t(c z7w=63IWmDX=^3||k(+#vE>DeR8|RsKce6raQ{DUtqWh)@kJrMZy0U)_|FDhKZC=s| z$9%tY{fCH@d~Z<&Rg9sKmF7wMpGX|LuR_H1AvfGb?JFpJk?w%_P=QS$xPF zo8nWkGswI)hK?ey%hy;}iv8Hy{y6A*xHj&$sTpWR;NCuN^}m;n6HU#@44;Xm-wnxw zW;C9TBYM%M9X{Uu!ByW?ApJ2@3qscN5BsT565<6(>0#YHKcKpbSxY@;x)$SsQLKs$ z6G?N>NR<8{-yHF6=A+1clXDZbB#y4?nb`BYPI*RIDpjjR)A^?n=LPB)oVVU{Jz$89 zy|7m!*alutpEFBo6bhvE&NJtU5n7$0`rykP|}l|d*(Zl@Bp5k z*OE}!=k5WlfIuGq(*570&Cg%#*=|RjvkES>hAcb@B?;<8JR-U%a&|qMLDQkI7o4iN z1IG(?PJp&-w@W9u&o^Qu^3lF;hGUZaM9g@wV$^?K%q}bWrk`kb zI@Jct%%{Y|D5wLTHHpd;;XizlLD}>#6w_Y|4Re11=bmkv-j$D0{&Ff#&UVB%2j{X$ z?*3sU8l06f$ZM1}m$M?MV(FnBAUXVru@Z*vN_dKY+$VBSD-JHdKG~pVsWE!|vky!0 zCs{X4fzX{OrvXN9g2$Nha^?!X-Mq@?1BV@A6GyPbH%98jWAGYgs%D(NqBoJ!_$dE+ zWAsC;V4I7D?yu^||K8oSP`ML>X(qj96$BNH36 zoSq?}J3^hl9eU7o5ygO1SbA0Y16&903rX0<-%lFteQoNhZpfi!gh0Q7dr+rfboQnz zA5*MOu!6!Gxx6puba~KVu0~c=#jj>iEO>1yRrjWt#=ERBa}v-g)W%kKm=f8dV3EEH zx0{V0^g>>jO8c-r9P^-r3S9|!PR;G<9YUgPQwU*19NE1{xSaU@-0i0!HB+bbR}|6_ z7nJGr5rPqE2d5HDGOiV3CTC}*kdQ^fydoxWm~Gn{M^#ig5qe-S)`bou-?e&v&T28J zJcXPEb7P2O_~JY>g?@w2zRh;KY$S9OQZs#x)o6%*$z5OCA9GaZ0btfy?LQ>5igF{iU-*E6w`lw*+bYA*qihG>_0Hyh4M?Dsf zcovcXGgsNgnPxx47pO%AMwPTx@VQd@=Io(a+pU>Yu|8UodZI&xSPI`PCew6K@)gVRnk=fu~Ka$z2>v3G9XefkUppFH}j6+;8>; zcIusI;o79eTUvqK(T+wK=Dp`E@Z2>`ueVHuhpTL}kJsrUUeH8RN5+67+imryi&99F zuNPnEVtbFE?56{jyvuR_cF1GBZbUtv9jl`B%7>2n2!oe$_rg)^WJnl?UunVvXvfd) zJUWB-r%Bcxq?JE|f1*myuH^EBDCk99Sab{7U5_{qf8OiQ@;4>073Ov}E?O_OZ2Nvq zLA7-^eWW%CQ>d*}we_UGf_Eb*ciAQ{xiJ87LhS-chOr4H{@5Wl-t0dQ9hDH$Sex=T z9oHp4B@Kp$9)C}^d}*)Ysi#-xd|^TxQB^l&6w?Xcsun+w6d$gwd-0is*2kY}ykCX; zw@qIA(YVrL><#tMCcTXl;Y_m%+QofVLsg3 z4EgVov&>d$?-J`Kd9%;z!81^185E>3aFU1qboX*Y5#HcKThZr%%8sC|{)q|?Iwq5V>$ zcO6b~lWdhBdW$dO#ezb>pgyF*>>$KDKx3Hlv;_0>>W_fp4iC{R0pZ4fJkfNKrf<*9 zpcQEMA47#!=FbnC2+bN#Ui_|My-POD#Xi6741fHX;;fQ)H48j9G(Yih)|0`Rc1uha zE0`+$l1FRI!#Il5a(3nw2gKX^F#V{+T6xxCwV0V8wb}z1i4xcMc_8-M0ZUUZ&J)}7 zL2N6#j;$Rn-1Z+EWXBgnnr6clc)Ki4C<9YYADbN?BwZDYalR%xw2oY6Y58I|8n9ff zhB(6Pw%8GOA}O(RBjsD?B3^yQvm4}Jb0h?fuN)LvA!#wd9<;9jqjB@xIxX{V*N;Kez`bng!#v#us0i_g?$17le4 zpSXwLCg1AI^F95r=FOhGo3;Y?Yd$aE`cy%I^ufCD%y#H3^-vi$pZ1PQ3+8JCY=)%s zoML`8pKXg~hnVQ4G_S#t{MXFmVf&p8z=7vHCxwj6u47nY!bPvP!48d{`|5WBYjfjva+^+=(qiIN3M;%10 z_3iu?{FG$N8U(}d(v5X|ZxNmr`0m^Aau9lXwtJSYvg0yx@I~e4&AtJe=SL4ouT*xA z{pQvVJJx+4@OAy3i49dFq8_xc%3e`?;>Ik@AS0~bhha*$Yc6am+Y7L5cOpKAQ||Y1 zQ|xOPH8|653vvhxPhrL|*R74Vv9bF1T5+rt@@z7kzHR@MG&FWvmO5X)tl)pot#d9- zJHOX2wLe+yL;QUj>9NzgPj=hHshqJ8(jBGkSkU>-R`k7P^Zz117U#51@R9FN@$6mo z&7@Zk@fbJvx}>qB6xzLt+2L1wRCdMQoAH1v@{eU7qZOoJ)C1DgYe`q`!1c7+qo;2D zhhmtYs5jke5A*cjhFDbVx{zlnb#OMidDJChTSLmt+ix!(TY=%|QRCe!L1gp2G z(&|dJ5SML3*<5`-M72*Xg##>}x;~rY4{@smha@-s@T^d}=Uy?`kU)1@DmmSiGMYm^ zm3XpsBRkJgiAsvWHJJNiUm-=GI>q~c3csx!Sic>6zW-MJvBcM~h*wrr&@J=<{|Ij6 z=Va66rq(Bw48r`PxxIlbJ{+t2B6lY5JB_pdA4p)0gm|v4dUtf*e#JUBtnqs>c&u zoe_?U=?i-ua_$r=$5s8@{pLl@yw4>~=dEw+7itpA_LzDu1@L#}&m2hvd&91kVmi-y z(C?lZGRmbg%l7&Jw|3??cKy*OTNmaGUSaJp7V2fYyvDrAiCp@5wZ)YP@lsG18b$0w zotclJt2Y~!vbRsT4tLI@7iD$ZXT13Wel^#GhLHHFxw|i4;Ci;QS5H1{ z@UBopbZ_{~CY$G&O2g@qM9SGdAh>jJd`9A+|PVoo~} zS!{>RBMbm?RW9(5R ztI{%T)yy-8!N>*cfd5E&zjKD_Rs``kwbKNl0AlT$g+2&q#-ul}e$doBd^>Npfqu>q zcDqVvnxl(42Hx;H5gRc=yXJREc>k~)ZMspIxXtX54 zh;WLmYLIgQ1L{6c$>`YxF?Xu)1#DG$HFrJ1Nf7bjs@3tr(a-kse+Np z+!NenG$q(b`a&suqT@QIMC_TCB-MfU$tw%y^TX0ZbM{kvTy#8jC)Du>--MD)Z{ScW zvk%)~Oia5Ctvd5n=&$SK8@O}k==A1>?cEz3V$)n*;;Y9}C=Yl*7hl6jsTfVCHo0s*$HnP0QXd3BUqIwP`EDlBRS{qP#x zOf~2sJT+~cNt~^b$)ybDrfyg;j=nG!wq(Jv9&AZ$P1ty}O1SKuesKg98&~w43e?0f zp}Q>JXi`Qd9GXY-K0g+HfRd0LnI3bl)_#zb zk(>-wrn%nI0&|N?Qz)gxabF0bLX)8@+hj;+q2vh4Lf`HqhtK>o+#U*UXJlfgYBlM@3?;4YcfIjLC7=tKWiBtNZNh3FPpu$H$!9ATCkoRUa|*{`}*&e{}= z-+EZ@#^Z6(k{L14&A(H8F*NAPD{-MD!y&U1x2j%(9YObz0MF?0K}@-r=X}k{4$*09 zCK9ZubitO<5!=mvOapO9GR>}re*Z=2=1pl)lVqf6WOjK3vl=1f zAf$~Fg6)VpD7e%i-Q}d-K|5pvg*=Q(Lx>wCgxC|a(C|&v5&j$(ose&8&+S?mdyZ>5 zLe!{v?iJ21nsVwgr5lv^mGO`9>UX6s3mr4`0ejr$(l7rhH}u`vDI` zF=?*X18E@Pww!+Rf{=$a8;eU9%&Hcu)o(Av*A=i@+0G2PkTf^wjWpjT>#caz8FL(V zDuiXuAeiSFyF;9apHXlbxLSl9-G!7d(2^yBm2)>NvNYp8Eu}Crg&aHE&xR1YxX_8yM#IbNz43|MDL3x$>*T@My@UGL%Eguz zx^S>MwZAcQaJ&(BN&xj*D=etWidq72E#)xH)yjfy7KnS2b;2femXK|eI>6&)QNot>Ti{rwXrOqe-y=B!z>R;*aDa^=eP>(_7H zx^?^Z?Pt!Mxq9{LqeqY4zJ2@d-MbGTK79N3?Z=NFfB*jd_wV2T|NrM^d`f3v;0*J0 zaSW-L^Y-%ftw+toTn@^;UwbV2sr*wHg#h{Ie)1neSsBcBZ1}AEp(>M~!A}1zJ5=l{m;{Tt=+5c>>)oxp2+n~7rEc>5j zF!n!}7yGmBcPVD_Cv;q}^r&WVZaL?8i&;Xcgzu8v0fB|Z6TUIDam;Pr!fxR5LI$MW z>AAvNMjk;c_E9aPAvVYo%OlM4XaRVQe|<1*IX7qjwt0n7^84B@%vAoewdI`5!u6^p&p2vz7aF_2$mX1D=@jq%;*8+0 zD5vzk3)h9Lid*(g8z`mc-d*^A=b!C?@}Hk0UessAv;NSl7qHqh|H4CV0jnBDr*?gZ z7av$TWcM*FJS?tI@`I^`FTMdovSH_i{h1)W_j_9Zy|w=_>)$=O1B>hH*0=1Be{tX{ g&Q=cArqFMBi-6_IXFQEo0~>M-p00i_>zopr0PGWpYXATM literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/id9z5czsduiy3mo1elogly.png b/vignettes/tinytable_assets/id9z5czsduiy3mo1elogly.png new file mode 100644 index 0000000000000000000000000000000000000000..3ce82825e755ef77a5aae22a83f323b43a1d7fb5 GIT binary patch literal 2077 zcmeAS@N?(olHy`uVBq!ia0y~yV1B{C!05}t3=~;nymb+f3J>rJaRt&sLPCm)igtE( zE-o&9etsb#A<@y%X=!OiMMcx6PoFt+=KT5dmn~biV#SJ;D_5>tw{HFV^&2*9c=qhs zt5>hyy?gim{re9eKK%Uo^Y`!HfB*jd_wV2T|No757V0uEus3?TIEGZrd3!5-QiM5= ztE1%!%k;=w|E=~i`b_Pb#~n~{S6hK`p8dX`3~Rop{bF#Kci|yp3m?BiNd?2g!^|AA zat<#(FgUfd3s~7SfTZSqIzNB=uk0$5FTz!)!t>XCef%XSL;cH??Uyb0ziEGY^Mce6L{I69$iia5h08hSc5~RezKC%dRZ3C_h_~0R zU%!0&wrRj1t$XnH%e8Alz!2sKg{7vGy#g?Fmvj7W07}kN`oav1fl*0n1;U4)=G%XL z`}?K&S3M|jWAFLeulVl{4E6i2FQ&BY>%O4LSu4IUSm>9Y({hzBu`Pa{FLraxophmG z&`NdTd!-VuQHAsho?lDq_y715Hs5!@Pu$cC>U(F$+50Pg@pM|=c|o0XuA0+)m6BN; zwUaJnDvb&b&j7h!Tfh3g{W6h-hnK&7-mmHU;zOn|wDtm5Yz^1B|NaG5V#!q}4Bmcq z`k(qs>wtHh{+Id7)-&yKL9Ooi_&-!F{BKn&`apI6-l!My%l;o_(Ess!vCzLG`wuY5 hJEN<{s5gJ`=Py*$3fz{=3#{iEJYD@<);T3K0RTp-m~;RD literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/iddm56rt5xpq0p02qr769o.png b/vignettes/tinytable_assets/iddm56rt5xpq0p02qr769o.png new file mode 100644 index 0000000000000000000000000000000000000000..51ac33e121545a4b551927b2fe78037fdd3f6ce7 GIT binary patch literal 15240 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%0AdNbE50x{a@ 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 literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/ideb5evek0fzucidbgtufe.png b/vignettes/tinytable_assets/ideb5evek0fzucidbgtufe.png new file mode 100644 index 0000000000000000000000000000000000000000..4e1ff0a72c3081fd6daa5eed5888dce5ffbea85b GIT binary patch literal 2214 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 Mvs$tp%;)`GJvDKNu!L4?vsdGbu z64A{6t*!r^>gO!h*S{`fn}2`TH{t)i_rLcf#~;6ZGjPWJU$?&5DzDj4(7z#pH1s%v z`T2`}o%!2irdO|%R{wH(bMWuV5Bt`ZOYSx6`kH!Qdrf2fUk|t6`<|}8b5&gIODk(_ zqGNo-1tOW+Yf@`DYzzA8R2J7pf4{hO?VDG#^HMDm9qkyB9&WlMCBJ$;FwPh}UHx3v IIVCg!00q9^&;S4c literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/idig180gixsumh4j09pwft.png b/vignettes/tinytable_assets/idig180gixsumh4j09pwft.png new file mode 100644 index 0000000000000000000000000000000000000000..5e2927f987468f0422573b4de9faa09fdf1ea03a GIT binary patch literal 2444 zcmeAS@N?(olHy`uVBq!ia0y~yV1B{C!05}t3=~;nymb+fIuPI!;>ya##>&Rd#ly?P zFCZW+Dj)(xVnX7Q(n=~a%4#wyYO4B1YHDhlCKg(z7TRW3Iu_Qt7B;$;HhNaJ`quWQ zPHqkk4$dKwE-o&vuC6}useV9^m=OpBso8;PIjMDRY4zt=%zm z|LIu=&(5Def5FLX3r}5NeCFozi+5M7Sg~^D%2ih%t-bMV{rdGAHf%U{?AXbZC(oQY zbL-ZvckkYP`0(N5$B$pWeEItI>+j#c|NQy$|Ns9zj^(o%7&zKJT^vIy=DfWeeJM3m z(Cwm=qoAn1>OEJM5C@Sxix+&^AHL_|<<1|)?8af!s(Zw0Hin%`pU?dN`@Few3}0IK z%oR#@FfKgI%ORWR@S=d(sa;yY>Q2LjhipKp4~yFWy;P5`t@@Supg!)yh5x@leO|lo z&-vS{9^YRs&%RIPOV@=+mlvW7H+Njnc1jmq7~XPD$!R^uT-TO3 zL91?#y-Fowf>o|Bbd>0$(4Xt?=K7qkWXupV+&B4h||1anJg?~OF z-^%B&Kp(dZU@(j6mEZmF9F%#C%87tRX-GoZe}uSj54{l)5J z?>#6re-Lf^H$8m5{@1_L{efOx`hG6ZtLE|6z>@L(yT9ks?LlQ^`2Sy1TmSu3Kj8Pj pD(H|uw`|2iPArWB)OJHW!(#8#(;CA=8iCC#22WQ%mvv4FO#pePX9EBL literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/idirk1jpynxzxbzj0p3i4t.png b/vignettes/tinytable_assets/idirk1jpynxzxbzj0p3i4t.png new file mode 100644 index 0000000000000000000000000000000000000000..fa8a2afc91a3e2ce3e185da6c19afe23505011ed GIT binary patch literal 1728 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 literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/idmgaww9nw3gzx0013bee5.png b/vignettes/tinytable_assets/idmgaww9nw3gzx0013bee5.png new file mode 100644 index 0000000000000000000000000000000000000000..80279d32d61766aace7757c19c30139e2ae503e5 GIT binary patch literal 2072 zcmeAS@N?(olHy`uVBq!ia0y~yV1B{C!05}t3=~;nymb+fstE82aRt%}3JQjXhDJt4 zwzjtR_Vx}A4lXV(-rnARetsb#A>rZSIXOAGxw%C}MWv;s<>lpFU0pprJu_#{T(M%s z%9ShEuV24m!-g$ewwyV0=F+80w{G2f@ZiCV7cbttdGq$|+jsBYy?_7y!-o&wzJ2@o z^XIQ$zkdJz{r~@eosU5=3=Hhio-U3d6?5KRW}hVBF5nWFB6y-&-=XjK{Q&V5y%DTW ze1iVoV_mje{r}|a2dezv*)dE|FR^I2@Q}f&otZhD<=F1M*K z>fQbRr1e3+pn05g<;o^0m2}PtF#s0;Wu*FCq(rU0#4(bRoFKPjKOKU>bGu z7qoJ1nFmb09Ja16L`J&8CkHP4udVF#f0y@p?XM5B+H5NW;pVOj=}zgQ3(vQl({h^6IXAS$PS|QS9TiT^cKZKzb@rcMGY$h?7$f}4 zU;OT~-^XR#Ud(YH4DLe-n%@r>2_IIyS6$W0uea-Lf4=UQ>-sgTe~DWM4f`Ztzz literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/idmsriaso1rrih0xzgxpeb.png b/vignettes/tinytable_assets/idmsriaso1rrih0xzgxpeb.png new file mode 100644 index 0000000000000000000000000000000000000000..0981e71f874c51f262122c8085ceea6b8a4a0e7b GIT binary patch literal 5057 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 literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/idqqh4krbsglt7ignvcvna.png b/vignettes/tinytable_assets/idqqh4krbsglt7ignvcvna.png new file mode 100644 index 0000000000000000000000000000000000000000..8ec24e8df6a4ef7a451ef82070c67811f1038972 GIT binary patch literal 2191 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 K$0o%2^#1{gI{m-^ literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/idv9ohq0qtlp5rbik738mz.png b/vignettes/tinytable_assets/idv9ohq0qtlp5rbik738mz.png new file mode 100644 index 0000000000000000000000000000000000000000..e677d3efdb331f0743be1de69bc447012d5ca717 GIT binary patch literal 12175 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 G@cswhABV^Q delta 42557 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%0DZDne=^hqVyOn7MWK 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