From d47b3d56262262997b88a24882b82c968cdab85d Mon Sep 17 00:00:00 2001 From: vincentarelbundock Date: Sat, 10 Feb 2024 15:15:57 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20vincenta?= =?UTF-8?q?relbundock/tinytable@1698a049db810dbb1317fed752d1c96e0c598a4d?= =?UTF-8?q?=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- freeze.rds | Bin 385 -> 383 bytes man/format_tt.html | 26 +- man/group_tt.html | 80 +- man/style_tt.html | 328 +- man/tt.html | 102 +- search.json | 80 +- .../id14ykfb8qacxjxcutel3c.png | Bin 0 -> 12160 bytes .../id3dpj1xlpy2r0ar6otrl4.png | Bin 0 -> 2072 bytes .../id5tuorfqsinywfmmza0jf.png | Bin 0 -> 11912 bytes .../id96k9x8mlj2qxqixn3txx.png | Bin 0 -> 5090 bytes .../idarz0muuv376jlfg1mx9r.png | Bin 0 -> 12212 bytes .../idc3o0qzhqxqr5yg6bo6oi.png | Bin 0 -> 11908 bytes .../idc59pdgtr1mw8a64187jq.png | Bin 0 -> 529 bytes .../idc5ar7amygy1gez234g64.png | Bin 0 -> 8399 bytes .../idesgz06hmtsr9pul67cou.png | Bin 0 -> 548 bytes .../idgnn2b1ln9is3fwf869dm.png | Bin 0 -> 1127 bytes .../idjhqoh87409p0dv0evb78.png | Bin 0 -> 2564 bytes .../idkemim41insngwc3ze6q6.png | Bin 0 -> 1846 bytes .../idkj0p7zbhxgvdz9c30f6z.png | Bin 0 -> 2214 bytes .../idl3t05uqymk21gc81gtj9.png | Bin 0 -> 2077 bytes .../idn1jajmrxxxpwn3f6282s.png | Bin 0 -> 2191 bytes .../idnyh9o8kiol3r5495wn84.png | Bin 0 -> 2558 bytes .../ido1lisp7q9vgo7ke2nlds.png | Bin 0 -> 512 bytes .../idsqfn38eohik8tho37ykx.png | Bin 0 -> 2250 bytes .../idtf2c51zodlzn18b5900w.png | Bin 0 -> 1829 bytes .../idtlwjltkot1ca75hdio5c.png | Bin 0 -> 5107 bytes .../idu0c52pba1cx8scwzl7mb.png | Bin 0 -> 10160 bytes .../idudkuq3qo6cw34zarokwf.png | Bin 0 -> 15240 bytes .../idv6h0i7eqbdbsp2cufqnt.png | Bin 0 -> 2444 bytes .../idw4ci617og7pz7p54kb0i.png | Bin 0 -> 1728 bytes .../idx10zbzx4be2reprfs0dv.png | Bin 0 -> 5067 bytes .../idylvd00xop8hec9rc9yok.png | Bin 0 -> 11922 bytes .../idzycsfwllhlebx1wb025e.png | Bin 0 -> 9816 bytes vignettes/tutorial.html | 3295 +++++++++-------- vignettes/tutorial.pdf | Bin 1734443 -> 1735831 bytes 35 files changed, 1978 insertions(+), 1933 deletions(-) create mode 100644 vignettes/tinytable_assets/id14ykfb8qacxjxcutel3c.png create mode 100644 vignettes/tinytable_assets/id3dpj1xlpy2r0ar6otrl4.png create mode 100644 vignettes/tinytable_assets/id5tuorfqsinywfmmza0jf.png create mode 100644 vignettes/tinytable_assets/id96k9x8mlj2qxqixn3txx.png create mode 100644 vignettes/tinytable_assets/idarz0muuv376jlfg1mx9r.png create mode 100644 vignettes/tinytable_assets/idc3o0qzhqxqr5yg6bo6oi.png create mode 100644 vignettes/tinytable_assets/idc59pdgtr1mw8a64187jq.png create mode 100644 vignettes/tinytable_assets/idc5ar7amygy1gez234g64.png create mode 100644 vignettes/tinytable_assets/idesgz06hmtsr9pul67cou.png create mode 100644 vignettes/tinytable_assets/idgnn2b1ln9is3fwf869dm.png create mode 100644 vignettes/tinytable_assets/idjhqoh87409p0dv0evb78.png create mode 100644 vignettes/tinytable_assets/idkemim41insngwc3ze6q6.png create mode 100644 vignettes/tinytable_assets/idkj0p7zbhxgvdz9c30f6z.png create mode 100644 vignettes/tinytable_assets/idl3t05uqymk21gc81gtj9.png create mode 100644 vignettes/tinytable_assets/idn1jajmrxxxpwn3f6282s.png create mode 100644 vignettes/tinytable_assets/idnyh9o8kiol3r5495wn84.png create mode 100644 vignettes/tinytable_assets/ido1lisp7q9vgo7ke2nlds.png create mode 100644 vignettes/tinytable_assets/idsqfn38eohik8tho37ykx.png create mode 100644 vignettes/tinytable_assets/idtf2c51zodlzn18b5900w.png create mode 100644 vignettes/tinytable_assets/idtlwjltkot1ca75hdio5c.png create mode 100644 vignettes/tinytable_assets/idu0c52pba1cx8scwzl7mb.png create mode 100644 vignettes/tinytable_assets/idudkuq3qo6cw34zarokwf.png create mode 100644 vignettes/tinytable_assets/idv6h0i7eqbdbsp2cufqnt.png create mode 100644 vignettes/tinytable_assets/idw4ci617og7pz7p54kb0i.png create mode 100644 vignettes/tinytable_assets/idx10zbzx4be2reprfs0dv.png create mode 100644 vignettes/tinytable_assets/idylvd00xop8hec9rc9yok.png create mode 100644 vignettes/tinytable_assets/idzycsfwllhlebx1wb025e.png diff --git a/freeze.rds b/freeze.rds index caa7f86a4a6bb90b5b9af24dc9f4d0627eac8055..5d84fc7f2c3567e44ea31b1bdf805172b53acf7f 100644 GIT binary patch literal 383 zcmV-_0f7D=iwFP!0000017(rRZj><$M#Eed?E<>0Sn>iL5<539ktn-vsv@yNwv$v9 zbL-3xQePgC8TGF^bP>rpKA&SLKhBLYQ!|@R%yiyMGyi_~?J65Hx#*WOGwa8gPXTNr zCz*1_>OmBP_a#HhO;{R^UJSum-jnN4k4h4~yYp{WP#F>wlR&|EX^u*bh(3Q~dFO dUxr+5S%2~Ut6^uy{xM+8-+u~ASp9nf005TDxCj6M literal 385 zcmV-{0e=1;iwFP!0000017(p*Z&Wc1M#DT7?E<<&EcpYS=Eiy0OC-v!n~F;8knK2C z#k`ogAob59?u>dz9auziPR{2z%C}4B+|KYhNtUHn|t7jm`Y^-bIC zR@{H@`^Ejp-yQhlZu4tExamples - tinytable_s46yy9dfy2q52tpxmdl0 + tinytable_labmyqc6bz0i4ajg7dc7 @@ -481,7 +481,7 @@

Examples

- +
@@ -496,24 +496,24 @@

Examples

- - + + - - + +
10 001
9 999 9 99910 00110 000
10 002 9 99910 00010 001
diff --git a/man/group_tt.html b/man/group_tt.html index 9c091e7c..e88a76c0 100644 --- a/man/group_tt.html +++ b/man/group_tt.html @@ -369,13 +369,13 @@

Examples

- tinytable_afygyy2qhh32uv77cbgj + tinytable_81min4hzkm8zj2ctli3a @@ -393,7 +393,7 @@

Examples

- +
@@ -486,12 +486,12 @@

Examples

diff --git a/man/style_tt.html b/man/style_tt.html index ccb02514..aef32b7d 100644 --- a/man/style_tt.html +++ b/man/style_tt.html @@ -598,7 +598,7 @@

Arguments

Details

This function applies styling to a table created by tt(). It allows customization of text style (bold, italic, monospace), text and background colors, font size, cell width, text alignment, column span, and indentation. The function also supports passing native instructions to LaTeX (tabularray) and HTML (bootstrap) formats.

-

Warning: Markdown and Word formats are limited to these styles: italic, bold, strikeout. This is because there is no markdown syntax for the other options, and because we create Word documents by converting a markdown table to .docx via the Pandoc software.

+

Note: Markdown and Word tables only support these styles: italic, bold, strikeout. Moreover, the style_tt() function cannot be used to style headers inserted by the group_tt() function; instead, you should style the headers directly in the header definition using markdown syntax: group_tt(i = list(“italic header” = 2)). These limitations are due to the fact that there is no markdown syntax for the other options, and that we create Word documents by converting a markdown table to .docx via the Pandoc software.

Value

@@ -637,12 +637,12 @@

Examples

- tinytable_sngfm0ckdf784tgl2f8n + tinytable_s8547uizxl596g84sosz @@ -660,7 +660,7 @@

Examples

-
+
@@ -719,12 +719,12 @@

Examples

@@ -800,10 +800,10 @@

Examples

- tinytable_wb780cn9yr0f41hpe73k + tinytable_hkzz3d2axxcie286nw4n @@ -821,7 +821,7 @@

Examples

-
+
@@ -880,12 +880,12 @@

Examples

@@ -943,9 +943,9 @@

Examples

- tinytable_4syw5h96misfd7y0u3zk + tinytable_5imrmc1d6pudpr4w5he7 @@ -963,7 +963,7 @@

Examples

-
+
@@ -1022,12 +1022,12 @@

Examples

@@ -1076,10 +1076,10 @@

Examples

- tinytable_liug83ut34nu58cw0uu4 + tinytable_wc8ufc2nnugbfxn3w2fn @@ -1097,7 +1097,7 @@

Examples

-
+
@@ -1156,12 +1156,12 @@

Examples

@@ -1219,10 +1219,10 @@

Examples

- tinytable_e3gjn8ry6uik6et34bks + tinytable_5lnhwvkzq7mjgw27n0ni @@ -1240,7 +1240,7 @@

Examples

-
+
@@ -1299,12 +1299,12 @@

Examples

@@ -1362,10 +1362,10 @@

Examples

- tinytable_r06zkcjlxt3yaqsof3by + tinytable_px0g2kzxmntlcv9zer3j @@ -1383,7 +1383,7 @@

Examples

-
+
@@ -1442,12 +1442,12 @@

Examples

diff --git a/man/tt.html b/man/tt.html index 0b0872d6..d9db55ca 100644 --- a/man/tt.html +++ b/man/tt.html @@ -433,9 +433,9 @@

Examples

- tinytable_inwywy5xsikpd1sox76b + tinytable_8k2mjmyuxdr6jqd447hv @@ -453,7 +453,7 @@

Examples

-
+
@@ -499,12 +499,12 @@

Examples

@@ -552,9 +552,9 @@

Examples

- tinytable_vzzwxtmh81a8kc3gvkbl + tinytable_ytgokxejtfrna90zdmw9 @@ -572,7 +572,7 @@

Examples

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

Examples

@@ -683,9 +683,9 @@

Examples

- tinytable_j43raqf36ac2lnqii07y + tinytable_odv84z8424kubl4e8lve @@ -703,7 +703,7 @@

Examples

-
Data about cars.
+
@@ -749,12 +749,12 @@

Examples

diff --git a/search.json b/search.json index 7276fbcd..b7cb06a4 100644 --- a/search.json +++ b/search.json @@ -59,7 +59,7 @@ "href": "man/style_tt.html", "title": "tinytable", "section": "", - "text": "Style a Tiny Table\n\n\n\nstyle_tt(\n x,\n i = NULL,\n j = NULL,\n bold = FALSE,\n italic = FALSE,\n monospace = FALSE,\n underline = FALSE,\n strikeout = FALSE,\n color = NULL,\n background = NULL,\n fontsize = NULL,\n width = NULL,\n align = NULL,\n alignv = NULL,\n colspan = NULL,\n rowspan = NULL,\n indent = 0,\n line = NULL,\n line_color = \"black\",\n line_width = 0.1,\n tabularray_inner = NULL,\n tabularray_outer = NULL,\n bootstrap_class = NULL,\n bootstrap_css = NULL,\n bootstrap_css_rule = NULL,\n ...\n)\n\n\n\n\n\n\n\nx\n\n\nA table object created by tt().\n\n\n\n\ni\n\n\nRow indices where the styling should be applied. Can be a single value or a vector. i=0 is the header, and negative values are higher level headers. If colspan is used, i must be of length 1.\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\nbold\n\n\nLogical; if TRUE, text is styled in bold.\n\n\n\n\nitalic\n\n\nLogical; if TRUE, text is styled in italic.\n\n\n\n\nmonospace\n\n\nLogical; if TRUE, text is styled in monospace font.\n\n\n\n\nunderline\n\n\nLogical; if TRUE, text is underlined.\n\n\n\n\nstrikeout\n\n\nLogical; if TRUE, text has a strike through line.\n\n\n\n\ncolor\n\n\nText color. There are several ways to specify colors, depending on the output format.\n\n\nHTML:\n\n\nHex code composed of # and 6 characters, ex: #CC79A7.\n\n\nKeywords: black, silver, gray, white, maroon, red, purple, fuchsia, green, lime, olive, yellow, navy, blue, teal, aqua\n\n\n\n\nLaTeX:\n\n\nHex code composed of # and 6 characters, ex: \"#CC79A7\". See the section below for instructions to add in LaTeX preambles.\n\n\nKeywords: black, blue, brown, cyan, darkgray, gray, green, lightgray, lime, magenta, olive, orange, pink, purple, red, teal, violet, white, yellow.\n\n\nColor blending using xcolor, ex: white!80!blue, green!20!red’.\n\n\nColor names with luminance levels from the ninecolors package (ex: \"azure4\", \"magenta8\", \"teal2\", \"gray1\", \"olive3\").\n\n\n\n\n\n\n\n\nbackground\n\n\nBackground color. Specified as a color name or hexadecimal code. Can be NULL for default color.\n\n\n\n\nfontsize\n\n\nInteger Font size in pt units.\n\n\n\n\nwidth\n\n\nWidth of column in em units. Can be NULL for default width.\n\n\n\n\nalign\n\n\nA single character or a string with a number of characters equal to the number of columns in j. Valid characters include ‘c’ (center), ‘l’ (left), or ‘r’ (right).\n\n\n\n\nalignv\n\n\nA single character specifying vertical alignment. Valid characters include ‘t’ (top), ‘m’ (middle), ‘b’ (bottom).\n\n\n\n\ncolspan\n\n\nNumber of columns a cell should span. i and j must be of length 1.\n\n\n\n\nrowspan\n\n\nNumber of rows a cell should span. i and j must be of length 1.\n\n\n\n\nindent\n\n\nText indentation in em units. Positive values only.\n\n\n\n\nline\n\n\nString determines if solid lines (rules or borders) should be drawn around the cell, row, or column.\n\n\n\"t\": top\n\n\n\"b\": bottom\n\n\n\"l\": left\n\n\n\"r\": right\n\n\nCan be combined such as: \"lbt\" to draw borders at the left, bottom, and top.\n\n\n\n\n\n\nline_color\n\n\nColor of the line. See the color argument for details.\n\n\n\n\nline_width\n\n\nWidth of the line in em units (default: 0.1).\n\n\n\n\ntabularray_inner\n\n\nA string that specifies the \"inner\" settings of a tabularray LaTeX table.\n\n\n\n\ntabularray_outer\n\n\nA string that specifies the \"outer\" settings of a tabularray LaTeX table.\n\n\n\n\nbootstrap_class\n\n\nString. A Bootstrap table class such as “table”, “table table-dark” or “table table-dark table-hover”. See the bootstrap documentation.\n\n\n\n\nbootstrap_css\n\n\nA vector of CSS style declarations to be applied (ex: “font-weight: bold”). Each element corresponds to a cell defined by i and j.\n\n\n\n\nbootstrap_css_rule\n\n\nA string with complete CSS rules that apply to the table class specified using the theme argument of the tt() function.\n\n\n\n\n…\n\n\nextra arguments are ignored\n\n\n\n\n\n\nThis function applies styling to a table created by tt(). It allows customization of text style (bold, italic, monospace), text and background colors, font size, cell width, text alignment, column span, and indentation. The function also supports passing native instructions to LaTeX (tabularray) and HTML (bootstrap) formats.\nWarning: Markdown and Word formats are limited to these styles: italic, bold, strikeout. This is because there is no markdown syntax for the other options, and because we create Word documents by converting a markdown table to .docx via the Pandoc software.\n\n\n\nAn object of class tt representing the table.\n\n\n\nWhen rendering Quarto and Rmarkdown documents, tinytable will populate the LaTeX preamble automatically with all the required packages. For standalone LaTeX packages, these commands should be inserted in the preamble:\n\n\\usepackage{tabularray}\n\\usepackage{float}\n\\usepackage{graphicx}\n\\usepackage{codehigh}\n\\usepackage[normalem]{ulem}\n\\UseTblrLibrary{booktabs}\n\\newcommand{\\tinytableTabularrayUnderline}[1]{\\underline{#1}}\n\\newcommand{\\tinytableTabularrayStrikeout}[1]{\\sout{#1}}\n\\NewTableCommand{\\tinytableDefineColor}[3]{\\definecolor{#1}{#2}{#3}}\n\n\n\n\n\n\nlibrary(tinytable)\n\nlibrary(tinytable)\nx <- mtcars[1:5, 1:6]\ntab <- tt(x)\n\n# Alignment\nstyle_tt(tab, j = 1:5, align = \"lcccr\")\n\n \n\n \n \n \n tinytable_sngfm0ckdf784tgl2f8n\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\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.44\n \n \n \n \n\n \n\n \n\n\n\nstyle_tt(tab, i = 2:3, background = \"black\", color = \"orange\", bold = TRUE)\n\n \n\n \n \n \n tinytable_wb780cn9yr0f41hpe73k\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\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.44\n \n \n \n \n\n \n\n \n\n\n\ntab\n\n \n\n \n \n \n tinytable_4syw5h96misfd7y0u3zk\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\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.44\n \n \n \n \n\n \n\n \n\n\n\n# column selection with `j``\nx <- mtcars[1:5, 1:6]\ntab <- tt(x)\nstyle_tt(tab, j = 5:6, background = \"pink\")\n\n \n\n \n \n \n tinytable_liug83ut34nu58cw0uu4\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\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.44\n \n \n \n \n\n \n\n \n\n\n\nstyle_tt(tab, j = \"drat|wt\", background = \"pink\")\n\n \n\n \n \n \n tinytable_e3gjn8ry6uik6et34bks\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\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.44\n \n \n \n \n\n \n\n \n\n\n\nstyle_tt(tab, j = c(\"drat\", \"wt\"), background = \"pink\")\n\n \n\n \n \n \n tinytable_r06zkcjlxt3yaqsof3by\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\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.44", + "text": "Style a Tiny Table\n\n\n\nstyle_tt(\n x,\n i = NULL,\n j = NULL,\n bold = FALSE,\n italic = FALSE,\n monospace = FALSE,\n underline = FALSE,\n strikeout = FALSE,\n color = NULL,\n background = NULL,\n fontsize = NULL,\n width = NULL,\n align = NULL,\n alignv = NULL,\n colspan = NULL,\n rowspan = NULL,\n indent = 0,\n line = NULL,\n line_color = \"black\",\n line_width = 0.1,\n tabularray_inner = NULL,\n tabularray_outer = NULL,\n bootstrap_class = NULL,\n bootstrap_css = NULL,\n bootstrap_css_rule = NULL,\n ...\n)\n\n\n\n\n\n\n\nx\n\n\nA table object created by tt().\n\n\n\n\ni\n\n\nRow indices where the styling should be applied. Can be a single value or a vector. i=0 is the header, and negative values are higher level headers. If colspan is used, i must be of length 1.\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\nbold\n\n\nLogical; if TRUE, text is styled in bold.\n\n\n\n\nitalic\n\n\nLogical; if TRUE, text is styled in italic.\n\n\n\n\nmonospace\n\n\nLogical; if TRUE, text is styled in monospace font.\n\n\n\n\nunderline\n\n\nLogical; if TRUE, text is underlined.\n\n\n\n\nstrikeout\n\n\nLogical; if TRUE, text has a strike through line.\n\n\n\n\ncolor\n\n\nText color. There are several ways to specify colors, depending on the output format.\n\n\nHTML:\n\n\nHex code composed of # and 6 characters, ex: #CC79A7.\n\n\nKeywords: black, silver, gray, white, maroon, red, purple, fuchsia, green, lime, olive, yellow, navy, blue, teal, aqua\n\n\n\n\nLaTeX:\n\n\nHex code composed of # and 6 characters, ex: \"#CC79A7\". See the section below for instructions to add in LaTeX preambles.\n\n\nKeywords: black, blue, brown, cyan, darkgray, gray, green, lightgray, lime, magenta, olive, orange, pink, purple, red, teal, violet, white, yellow.\n\n\nColor blending using xcolor, ex: white!80!blue, green!20!red’.\n\n\nColor names with luminance levels from the ninecolors package (ex: \"azure4\", \"magenta8\", \"teal2\", \"gray1\", \"olive3\").\n\n\n\n\n\n\n\n\nbackground\n\n\nBackground color. Specified as a color name or hexadecimal code. Can be NULL for default color.\n\n\n\n\nfontsize\n\n\nInteger Font size in pt units.\n\n\n\n\nwidth\n\n\nWidth of column in em units. Can be NULL for default width.\n\n\n\n\nalign\n\n\nA single character or a string with a number of characters equal to the number of columns in j. Valid characters include ‘c’ (center), ‘l’ (left), or ‘r’ (right).\n\n\n\n\nalignv\n\n\nA single character specifying vertical alignment. Valid characters include ‘t’ (top), ‘m’ (middle), ‘b’ (bottom).\n\n\n\n\ncolspan\n\n\nNumber of columns a cell should span. i and j must be of length 1.\n\n\n\n\nrowspan\n\n\nNumber of rows a cell should span. i and j must be of length 1.\n\n\n\n\nindent\n\n\nText indentation in em units. Positive values only.\n\n\n\n\nline\n\n\nString determines if solid lines (rules or borders) should be drawn around the cell, row, or column.\n\n\n\"t\": top\n\n\n\"b\": bottom\n\n\n\"l\": left\n\n\n\"r\": right\n\n\nCan be combined such as: \"lbt\" to draw borders at the left, bottom, and top.\n\n\n\n\n\n\nline_color\n\n\nColor of the line. See the color argument for details.\n\n\n\n\nline_width\n\n\nWidth of the line in em units (default: 0.1).\n\n\n\n\ntabularray_inner\n\n\nA string that specifies the \"inner\" settings of a tabularray LaTeX table.\n\n\n\n\ntabularray_outer\n\n\nA string that specifies the \"outer\" settings of a tabularray LaTeX table.\n\n\n\n\nbootstrap_class\n\n\nString. A Bootstrap table class such as “table”, “table table-dark” or “table table-dark table-hover”. See the bootstrap documentation.\n\n\n\n\nbootstrap_css\n\n\nA vector of CSS style declarations to be applied (ex: “font-weight: bold”). Each element corresponds to a cell defined by i and j.\n\n\n\n\nbootstrap_css_rule\n\n\nA string with complete CSS rules that apply to the table class specified using the theme argument of the tt() function.\n\n\n\n\n…\n\n\nextra arguments are ignored\n\n\n\n\n\n\nThis function applies styling to a table created by tt(). It allows customization of text style (bold, italic, monospace), text and background colors, font size, cell width, text alignment, column span, and indentation. The function also supports passing native instructions to LaTeX (tabularray) and HTML (bootstrap) formats.\nNote: Markdown and Word tables only support these styles: italic, bold, strikeout. Moreover, the style_tt() function cannot be used to style headers inserted by the group_tt() function; instead, you should style the headers directly in the header definition using markdown syntax: group_tt(i = list(“italic header” = 2)). These limitations are due to the fact that there is no markdown syntax for the other options, and that we create Word documents by converting a markdown table to .docx via the Pandoc software.\n\n\n\nAn object of class tt representing the table.\n\n\n\nWhen rendering Quarto and Rmarkdown documents, tinytable will populate the LaTeX preamble automatically with all the required packages. For standalone LaTeX packages, these commands should be inserted in the preamble:\n\n\\usepackage{tabularray}\n\\usepackage{float}\n\\usepackage{graphicx}\n\\usepackage{codehigh}\n\\usepackage[normalem]{ulem}\n\\UseTblrLibrary{booktabs}\n\\newcommand{\\tinytableTabularrayUnderline}[1]{\\underline{#1}}\n\\newcommand{\\tinytableTabularrayStrikeout}[1]{\\sout{#1}}\n\\NewTableCommand{\\tinytableDefineColor}[3]{\\definecolor{#1}{#2}{#3}}\n\n\n\n\n\n\nlibrary(tinytable)\n\nlibrary(tinytable)\nx <- mtcars[1:5, 1:6]\ntab <- tt(x)\n\n# Alignment\nstyle_tt(tab, j = 1:5, align = \"lcccr\")\n\n \n\n \n \n \n tinytable_s8547uizxl596g84sosz\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\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.44\n \n \n \n \n\n \n\n \n\n\n\nstyle_tt(tab, i = 2:3, background = \"black\", color = \"orange\", bold = TRUE)\n\n \n\n \n \n \n tinytable_hkzz3d2axxcie286nw4n\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\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.44\n \n \n \n \n\n \n\n \n\n\n\ntab\n\n \n\n \n \n \n tinytable_5imrmc1d6pudpr4w5he7\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\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.44\n \n \n \n \n\n \n\n \n\n\n\n# column selection with `j``\nx <- mtcars[1:5, 1:6]\ntab <- tt(x)\nstyle_tt(tab, j = 5:6, background = \"pink\")\n\n \n\n \n \n \n tinytable_wc8ufc2nnugbfxn3w2fn\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\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.44\n \n \n \n \n\n \n\n \n\n\n\nstyle_tt(tab, j = \"drat|wt\", background = \"pink\")\n\n \n\n \n \n \n tinytable_5lnhwvkzq7mjgw27n0ni\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\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.44\n \n \n \n \n\n \n\n \n\n\n\nstyle_tt(tab, j = c(\"drat\", \"wt\"), background = \"pink\")\n\n \n\n \n \n \n tinytable_px0g2kzxmntlcv9zer3j\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\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.44", "crumbs": [ "Tutorial (HTML)", "Functions", @@ -71,7 +71,7 @@ "href": "man/style_tt.html#style-a-tiny-table", "title": "tinytable", "section": "", - "text": "Style a Tiny Table\n\n\n\nstyle_tt(\n x,\n i = NULL,\n j = NULL,\n bold = FALSE,\n italic = FALSE,\n monospace = FALSE,\n underline = FALSE,\n strikeout = FALSE,\n color = NULL,\n background = NULL,\n fontsize = NULL,\n width = NULL,\n align = NULL,\n alignv = NULL,\n colspan = NULL,\n rowspan = NULL,\n indent = 0,\n line = NULL,\n line_color = \"black\",\n line_width = 0.1,\n tabularray_inner = NULL,\n tabularray_outer = NULL,\n bootstrap_class = NULL,\n bootstrap_css = NULL,\n bootstrap_css_rule = NULL,\n ...\n)\n\n\n\n\n\n\n\nx\n\n\nA table object created by tt().\n\n\n\n\ni\n\n\nRow indices where the styling should be applied. Can be a single value or a vector. i=0 is the header, and negative values are higher level headers. If colspan is used, i must be of length 1.\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\nbold\n\n\nLogical; if TRUE, text is styled in bold.\n\n\n\n\nitalic\n\n\nLogical; if TRUE, text is styled in italic.\n\n\n\n\nmonospace\n\n\nLogical; if TRUE, text is styled in monospace font.\n\n\n\n\nunderline\n\n\nLogical; if TRUE, text is underlined.\n\n\n\n\nstrikeout\n\n\nLogical; if TRUE, text has a strike through line.\n\n\n\n\ncolor\n\n\nText color. There are several ways to specify colors, depending on the output format.\n\n\nHTML:\n\n\nHex code composed of # and 6 characters, ex: #CC79A7.\n\n\nKeywords: black, silver, gray, white, maroon, red, purple, fuchsia, green, lime, olive, yellow, navy, blue, teal, aqua\n\n\n\n\nLaTeX:\n\n\nHex code composed of # and 6 characters, ex: \"#CC79A7\". See the section below for instructions to add in LaTeX preambles.\n\n\nKeywords: black, blue, brown, cyan, darkgray, gray, green, lightgray, lime, magenta, olive, orange, pink, purple, red, teal, violet, white, yellow.\n\n\nColor blending using xcolor, ex: white!80!blue, green!20!red’.\n\n\nColor names with luminance levels from the ninecolors package (ex: \"azure4\", \"magenta8\", \"teal2\", \"gray1\", \"olive3\").\n\n\n\n\n\n\n\n\nbackground\n\n\nBackground color. Specified as a color name or hexadecimal code. Can be NULL for default color.\n\n\n\n\nfontsize\n\n\nInteger Font size in pt units.\n\n\n\n\nwidth\n\n\nWidth of column in em units. Can be NULL for default width.\n\n\n\n\nalign\n\n\nA single character or a string with a number of characters equal to the number of columns in j. Valid characters include ‘c’ (center), ‘l’ (left), or ‘r’ (right).\n\n\n\n\nalignv\n\n\nA single character specifying vertical alignment. Valid characters include ‘t’ (top), ‘m’ (middle), ‘b’ (bottom).\n\n\n\n\ncolspan\n\n\nNumber of columns a cell should span. i and j must be of length 1.\n\n\n\n\nrowspan\n\n\nNumber of rows a cell should span. i and j must be of length 1.\n\n\n\n\nindent\n\n\nText indentation in em units. Positive values only.\n\n\n\n\nline\n\n\nString determines if solid lines (rules or borders) should be drawn around the cell, row, or column.\n\n\n\"t\": top\n\n\n\"b\": bottom\n\n\n\"l\": left\n\n\n\"r\": right\n\n\nCan be combined such as: \"lbt\" to draw borders at the left, bottom, and top.\n\n\n\n\n\n\nline_color\n\n\nColor of the line. See the color argument for details.\n\n\n\n\nline_width\n\n\nWidth of the line in em units (default: 0.1).\n\n\n\n\ntabularray_inner\n\n\nA string that specifies the \"inner\" settings of a tabularray LaTeX table.\n\n\n\n\ntabularray_outer\n\n\nA string that specifies the \"outer\" settings of a tabularray LaTeX table.\n\n\n\n\nbootstrap_class\n\n\nString. A Bootstrap table class such as “table”, “table table-dark” or “table table-dark table-hover”. See the bootstrap documentation.\n\n\n\n\nbootstrap_css\n\n\nA vector of CSS style declarations to be applied (ex: “font-weight: bold”). Each element corresponds to a cell defined by i and j.\n\n\n\n\nbootstrap_css_rule\n\n\nA string with complete CSS rules that apply to the table class specified using the theme argument of the tt() function.\n\n\n\n\n…\n\n\nextra arguments are ignored\n\n\n\n\n\n\nThis function applies styling to a table created by tt(). It allows customization of text style (bold, italic, monospace), text and background colors, font size, cell width, text alignment, column span, and indentation. The function also supports passing native instructions to LaTeX (tabularray) and HTML (bootstrap) formats.\nWarning: Markdown and Word formats are limited to these styles: italic, bold, strikeout. This is because there is no markdown syntax for the other options, and because we create Word documents by converting a markdown table to .docx via the Pandoc software.\n\n\n\nAn object of class tt representing the table.\n\n\n\nWhen rendering Quarto and Rmarkdown documents, tinytable will populate the LaTeX preamble automatically with all the required packages. For standalone LaTeX packages, these commands should be inserted in the preamble:\n\n\\usepackage{tabularray}\n\\usepackage{float}\n\\usepackage{graphicx}\n\\usepackage{codehigh}\n\\usepackage[normalem]{ulem}\n\\UseTblrLibrary{booktabs}\n\\newcommand{\\tinytableTabularrayUnderline}[1]{\\underline{#1}}\n\\newcommand{\\tinytableTabularrayStrikeout}[1]{\\sout{#1}}\n\\NewTableCommand{\\tinytableDefineColor}[3]{\\definecolor{#1}{#2}{#3}}\n\n\n\n\n\n\nlibrary(tinytable)\n\nlibrary(tinytable)\nx <- mtcars[1:5, 1:6]\ntab <- tt(x)\n\n# Alignment\nstyle_tt(tab, j = 1:5, align = \"lcccr\")\n\n \n\n \n \n \n tinytable_sngfm0ckdf784tgl2f8n\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\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.44\n \n \n \n \n\n \n\n \n\n\n\nstyle_tt(tab, i = 2:3, background = \"black\", color = \"orange\", bold = TRUE)\n\n \n\n \n \n \n tinytable_wb780cn9yr0f41hpe73k\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\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.44\n \n \n \n \n\n \n\n \n\n\n\ntab\n\n \n\n \n \n \n tinytable_4syw5h96misfd7y0u3zk\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\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.44\n \n \n \n \n\n \n\n \n\n\n\n# column selection with `j``\nx <- mtcars[1:5, 1:6]\ntab <- tt(x)\nstyle_tt(tab, j = 5:6, background = \"pink\")\n\n \n\n \n \n \n tinytable_liug83ut34nu58cw0uu4\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\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.44\n \n \n \n \n\n \n\n \n\n\n\nstyle_tt(tab, j = \"drat|wt\", background = \"pink\")\n\n \n\n \n \n \n tinytable_e3gjn8ry6uik6et34bks\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\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.44\n \n \n \n \n\n \n\n \n\n\n\nstyle_tt(tab, j = c(\"drat\", \"wt\"), background = \"pink\")\n\n \n\n \n \n \n tinytable_r06zkcjlxt3yaqsof3by\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\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.44", + "text": "Style a Tiny Table\n\n\n\nstyle_tt(\n x,\n i = NULL,\n j = NULL,\n bold = FALSE,\n italic = FALSE,\n monospace = FALSE,\n underline = FALSE,\n strikeout = FALSE,\n color = NULL,\n background = NULL,\n fontsize = NULL,\n width = NULL,\n align = NULL,\n alignv = NULL,\n colspan = NULL,\n rowspan = NULL,\n indent = 0,\n line = NULL,\n line_color = \"black\",\n line_width = 0.1,\n tabularray_inner = NULL,\n tabularray_outer = NULL,\n bootstrap_class = NULL,\n bootstrap_css = NULL,\n bootstrap_css_rule = NULL,\n ...\n)\n\n\n\n\n\n\n\nx\n\n\nA table object created by tt().\n\n\n\n\ni\n\n\nRow indices where the styling should be applied. Can be a single value or a vector. i=0 is the header, and negative values are higher level headers. If colspan is used, i must be of length 1.\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\nbold\n\n\nLogical; if TRUE, text is styled in bold.\n\n\n\n\nitalic\n\n\nLogical; if TRUE, text is styled in italic.\n\n\n\n\nmonospace\n\n\nLogical; if TRUE, text is styled in monospace font.\n\n\n\n\nunderline\n\n\nLogical; if TRUE, text is underlined.\n\n\n\n\nstrikeout\n\n\nLogical; if TRUE, text has a strike through line.\n\n\n\n\ncolor\n\n\nText color. There are several ways to specify colors, depending on the output format.\n\n\nHTML:\n\n\nHex code composed of # and 6 characters, ex: #CC79A7.\n\n\nKeywords: black, silver, gray, white, maroon, red, purple, fuchsia, green, lime, olive, yellow, navy, blue, teal, aqua\n\n\n\n\nLaTeX:\n\n\nHex code composed of # and 6 characters, ex: \"#CC79A7\". See the section below for instructions to add in LaTeX preambles.\n\n\nKeywords: black, blue, brown, cyan, darkgray, gray, green, lightgray, lime, magenta, olive, orange, pink, purple, red, teal, violet, white, yellow.\n\n\nColor blending using xcolor, ex: white!80!blue, green!20!red’.\n\n\nColor names with luminance levels from the ninecolors package (ex: \"azure4\", \"magenta8\", \"teal2\", \"gray1\", \"olive3\").\n\n\n\n\n\n\n\n\nbackground\n\n\nBackground color. Specified as a color name or hexadecimal code. Can be NULL for default color.\n\n\n\n\nfontsize\n\n\nInteger Font size in pt units.\n\n\n\n\nwidth\n\n\nWidth of column in em units. Can be NULL for default width.\n\n\n\n\nalign\n\n\nA single character or a string with a number of characters equal to the number of columns in j. Valid characters include ‘c’ (center), ‘l’ (left), or ‘r’ (right).\n\n\n\n\nalignv\n\n\nA single character specifying vertical alignment. Valid characters include ‘t’ (top), ‘m’ (middle), ‘b’ (bottom).\n\n\n\n\ncolspan\n\n\nNumber of columns a cell should span. i and j must be of length 1.\n\n\n\n\nrowspan\n\n\nNumber of rows a cell should span. i and j must be of length 1.\n\n\n\n\nindent\n\n\nText indentation in em units. Positive values only.\n\n\n\n\nline\n\n\nString determines if solid lines (rules or borders) should be drawn around the cell, row, or column.\n\n\n\"t\": top\n\n\n\"b\": bottom\n\n\n\"l\": left\n\n\n\"r\": right\n\n\nCan be combined such as: \"lbt\" to draw borders at the left, bottom, and top.\n\n\n\n\n\n\nline_color\n\n\nColor of the line. See the color argument for details.\n\n\n\n\nline_width\n\n\nWidth of the line in em units (default: 0.1).\n\n\n\n\ntabularray_inner\n\n\nA string that specifies the \"inner\" settings of a tabularray LaTeX table.\n\n\n\n\ntabularray_outer\n\n\nA string that specifies the \"outer\" settings of a tabularray LaTeX table.\n\n\n\n\nbootstrap_class\n\n\nString. A Bootstrap table class such as “table”, “table table-dark” or “table table-dark table-hover”. See the bootstrap documentation.\n\n\n\n\nbootstrap_css\n\n\nA vector of CSS style declarations to be applied (ex: “font-weight: bold”). Each element corresponds to a cell defined by i and j.\n\n\n\n\nbootstrap_css_rule\n\n\nA string with complete CSS rules that apply to the table class specified using the theme argument of the tt() function.\n\n\n\n\n…\n\n\nextra arguments are ignored\n\n\n\n\n\n\nThis function applies styling to a table created by tt(). It allows customization of text style (bold, italic, monospace), text and background colors, font size, cell width, text alignment, column span, and indentation. The function also supports passing native instructions to LaTeX (tabularray) and HTML (bootstrap) formats.\nNote: Markdown and Word tables only support these styles: italic, bold, strikeout. Moreover, the style_tt() function cannot be used to style headers inserted by the group_tt() function; instead, you should style the headers directly in the header definition using markdown syntax: group_tt(i = list(“italic header” = 2)). These limitations are due to the fact that there is no markdown syntax for the other options, and that we create Word documents by converting a markdown table to .docx via the Pandoc software.\n\n\n\nAn object of class tt representing the table.\n\n\n\nWhen rendering Quarto and Rmarkdown documents, tinytable will populate the LaTeX preamble automatically with all the required packages. For standalone LaTeX packages, these commands should be inserted in the preamble:\n\n\\usepackage{tabularray}\n\\usepackage{float}\n\\usepackage{graphicx}\n\\usepackage{codehigh}\n\\usepackage[normalem]{ulem}\n\\UseTblrLibrary{booktabs}\n\\newcommand{\\tinytableTabularrayUnderline}[1]{\\underline{#1}}\n\\newcommand{\\tinytableTabularrayStrikeout}[1]{\\sout{#1}}\n\\NewTableCommand{\\tinytableDefineColor}[3]{\\definecolor{#1}{#2}{#3}}\n\n\n\n\n\n\nlibrary(tinytable)\n\nlibrary(tinytable)\nx <- mtcars[1:5, 1:6]\ntab <- tt(x)\n\n# Alignment\nstyle_tt(tab, j = 1:5, align = \"lcccr\")\n\n \n\n \n \n \n tinytable_s8547uizxl596g84sosz\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\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.44\n \n \n \n \n\n \n\n \n\n\n\nstyle_tt(tab, i = 2:3, background = \"black\", color = \"orange\", bold = TRUE)\n\n \n\n \n \n \n tinytable_hkzz3d2axxcie286nw4n\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\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.44\n \n \n \n \n\n \n\n \n\n\n\ntab\n\n \n\n \n \n \n tinytable_5imrmc1d6pudpr4w5he7\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\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.44\n \n \n \n \n\n \n\n \n\n\n\n# column selection with `j``\nx <- mtcars[1:5, 1:6]\ntab <- tt(x)\nstyle_tt(tab, j = 5:6, background = \"pink\")\n\n \n\n \n \n \n tinytable_wc8ufc2nnugbfxn3w2fn\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\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.44\n \n \n \n \n\n \n\n \n\n\n\nstyle_tt(tab, j = \"drat|wt\", background = \"pink\")\n\n \n\n \n \n \n tinytable_5lnhwvkzq7mjgw27n0ni\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\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.44\n \n \n \n \n\n \n\n \n\n\n\nstyle_tt(tab, j = c(\"drat\", \"wt\"), background = \"pink\")\n\n \n\n \n \n \n tinytable_px0g2kzxmntlcv9zer3j\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\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.44", "crumbs": [ "Tutorial (HTML)", "Functions", @@ -83,7 +83,7 @@ "href": "man/tt.html", "title": "tinytable", "section": "", - "text": "The tt function renders a table in different formats with various styling options: HTML, Markdown, LaTeX, Word, PDF, PNG, or Typst. The table can be customized with additional functions:\n\n\nstyle_tt() to style fonts, colors, alignment, etc.\n\n\nformat_tt() to format numbers, dates, strings, etc.\n\n\ngroup_tt() for row or column group labels.\n\n\nsave_tt() to save the table to a file or return the table as a string.\n\n\nprint() to print to a specific format, ex: print(x, “latex”)\n\n\ntinytable attempts to determine the appropriate way to print the table based on interactive use, RStudio availability, and output format in RMarkdown or Quarto documents. Users can call print(x, output=“markdown”) to print the table in a specific format. Alternatively, they can set a global option: options(“tinytable_print_output”=“markdown”)\n\n\n\ntt(\n x,\n digits = NULL,\n caption = NULL,\n width = NULL,\n notes = NULL,\n theme = \"default\",\n placement = getOption(\"tinytable_tabularray_placement\", default = NULL)\n)\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\ndigits\n\n\nNumber of significant digits to keep for numeric variables. When digits is an integer, tt() calls format_tt(x, digits = digits) before proceeding to draw the table. Users who need more control can use the format_tt() function.\n\n\n\n\ncaption\n\n\nA string that will be used as the caption of the table.\n\n\n\n\nwidth\n\n\nA numeric value between 0 and 1 indicating the proportion of the line width that the table should cover.\n\n\n\n\nnotes\n\n\nNotes to append to the bottom of the table. This argument accepts several different inputs:\n\n\nSingle string insert a single note: “blah blah”\n\n\nMultiple strings insert multiple notes sequentially: list(“Hello world”, “Foo bar”)\n\n\nA named list inserts a list with the name as superscript: list(“a” = list(“Hello World”))\n\n\nA named list with positions inserts markers as superscripts inside table cells: list(“a” = list(i = 0:1, j = 2, text = “Hello World”))\n\n\n\n\n\n\ntheme\n\n\nThe theme to apply to the table: \"default\", \"striped\", \"bootstrap\", \"void\", or \"grid\".\n\n\n\n\nplacement\n\n\nA string to control the position of tables in LaTeX. Will be inserted in square brackets like: \\begin{table}[H]\n\n\n\n\n\n\nAn object of class tt representing the table.\nThe table object has an attribute which holds information about the structure of the table. This metadata can be accessed with attr(x,“tinytable_meta”). In general, modifying the content of this attribute is not recommended, but it can be useful to some developers, such as those who want to force print to a specific output format without calling print().\n\n\n\nWhen rendering Quarto and Rmarkdown documents, tinytable will populate the LaTeX preamble automatically with all the required packages. For standalone LaTeX packages, these commands should be inserted in the preamble:\n\n\\usepackage{tabularray}\n\\usepackage{float}\n\\usepackage{graphicx}\n\\usepackage{codehigh}\n\\usepackage[normalem]{ulem}\n\\UseTblrLibrary{booktabs}\n\\newcommand{\\tinytableTabularrayUnderline}[1]{\\underline{#1}}\n\\newcommand{\\tinytableTabularrayStrikeout}[1]{\\sout{#1}}\n\\NewTableCommand{\\tinytableDefineColor}[3]{\\definecolor{#1}{#2}{#3}}\n\n\n\n\n\n\nlibrary(tinytable)\n\nlibrary(tinytable)\nx <- mtcars[1:4, 1:5]\n\ntt(x)\n\n \n\n \n \n \n tinytable_inwywy5xsikpd1sox76b\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\ntt(x,\n theme = \"striped\",\n width = 0.5,\n caption = \"Data about cars.\")\n\n \n\n \n \n \n tinytable_vzzwxtmh81a8kc3gvkbl\n \n \n \n \n \n\n \n \n \n \n Data about cars.\n \n mpg\n cyl\n disp\n hp\n drat\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\ntt(x, notes = \"Hello World!\")\n\n \n\n \n \n \n tinytable_j43raqf36ac2lnqii07y\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 Hello World!\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\nfn <- list(i = 0:1, j = 2, text = \"Hello World!\")\ntab <- tt(x, notes = list(\"*\" = fn))\nprint(tab, \"latex\")\n\n\n\\begin{table}\n\\centering\n\\begin{talltblr}[ %% tabularray outer open\nentry=none,label=none,\nnote{*}={Hello World!},\n] %% tabularray outer close\n{ %% tabularray inner open\ncolspec={Q[]Q[]Q[]Q[]Q[]},\n} %% tabularray inner close\n\\toprule\nmpg & cyl\\textsuperscript{*} & disp & hp & drat \\\\ \\midrule %% TinyTableHeader\n21.0 & 6\\textsuperscript{*} & 160 & 110 & 3.90 \\\\\n21.0 & 6 & 160 & 110 & 3.90 \\\\\n22.8 & 4 & 108 & 93 & 3.85 \\\\\n21.4 & 6 & 258 & 110 & 3.08 \\\\\n\\bottomrule\n\\end{talltblr}\n\\end{table}", + "text": "The tt function renders a table in different formats with various styling options: HTML, Markdown, LaTeX, Word, PDF, PNG, or Typst. The table can be customized with additional functions:\n\n\nstyle_tt() to style fonts, colors, alignment, etc.\n\n\nformat_tt() to format numbers, dates, strings, etc.\n\n\ngroup_tt() for row or column group labels.\n\n\nsave_tt() to save the table to a file or return the table as a string.\n\n\nprint() to print to a specific format, ex: print(x, “latex”)\n\n\ntinytable attempts to determine the appropriate way to print the table based on interactive use, RStudio availability, and output format in RMarkdown or Quarto documents. Users can call print(x, output=“markdown”) to print the table in a specific format. Alternatively, they can set a global option: options(“tinytable_print_output”=“markdown”)\n\n\n\ntt(\n x,\n digits = NULL,\n caption = NULL,\n width = NULL,\n notes = NULL,\n theme = \"default\",\n placement = getOption(\"tinytable_tabularray_placement\", default = NULL)\n)\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\ndigits\n\n\nNumber of significant digits to keep for numeric variables. When digits is an integer, tt() calls format_tt(x, digits = digits) before proceeding to draw the table. Users who need more control can use the format_tt() function.\n\n\n\n\ncaption\n\n\nA string that will be used as the caption of the table.\n\n\n\n\nwidth\n\n\nA numeric value between 0 and 1 indicating the proportion of the line width that the table should cover.\n\n\n\n\nnotes\n\n\nNotes to append to the bottom of the table. This argument accepts several different inputs:\n\n\nSingle string insert a single note: “blah blah”\n\n\nMultiple strings insert multiple notes sequentially: list(“Hello world”, “Foo bar”)\n\n\nA named list inserts a list with the name as superscript: list(“a” = list(“Hello World”))\n\n\nA named list with positions inserts markers as superscripts inside table cells: list(“a” = list(i = 0:1, j = 2, text = “Hello World”))\n\n\n\n\n\n\ntheme\n\n\nThe theme to apply to the table: \"default\", \"striped\", \"bootstrap\", \"void\", or \"grid\".\n\n\n\n\nplacement\n\n\nA string to control the position of tables in LaTeX. Will be inserted in square brackets like: \\begin{table}[H]\n\n\n\n\n\n\nAn object of class tt representing the table.\nThe table object has an attribute which holds information about the structure of the table. This metadata can be accessed with attr(x,“tinytable_meta”). In general, modifying the content of this attribute is not recommended, but it can be useful to some developers, such as those who want to force print to a specific output format without calling print().\n\n\n\nWhen rendering Quarto and Rmarkdown documents, tinytable will populate the LaTeX preamble automatically with all the required packages. For standalone LaTeX packages, these commands should be inserted in the preamble:\n\n\\usepackage{tabularray}\n\\usepackage{float}\n\\usepackage{graphicx}\n\\usepackage{codehigh}\n\\usepackage[normalem]{ulem}\n\\UseTblrLibrary{booktabs}\n\\newcommand{\\tinytableTabularrayUnderline}[1]{\\underline{#1}}\n\\newcommand{\\tinytableTabularrayStrikeout}[1]{\\sout{#1}}\n\\NewTableCommand{\\tinytableDefineColor}[3]{\\definecolor{#1}{#2}{#3}}\n\n\n\n\n\n\nlibrary(tinytable)\n\nlibrary(tinytable)\nx <- mtcars[1:4, 1:5]\n\ntt(x)\n\n \n\n \n \n \n tinytable_8k2mjmyuxdr6jqd447hv\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\ntt(x,\n theme = \"striped\",\n width = 0.5,\n caption = \"Data about cars.\")\n\n \n\n \n \n \n tinytable_ytgokxejtfrna90zdmw9\n \n \n \n \n \n\n \n \n \n \n Data about cars.\n \n mpg\n cyl\n disp\n hp\n drat\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\ntt(x, notes = \"Hello World!\")\n\n \n\n \n \n \n tinytable_odv84z8424kubl4e8lve\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 Hello World!\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\nfn <- list(i = 0:1, j = 2, text = \"Hello World!\")\ntab <- tt(x, notes = list(\"*\" = fn))\nprint(tab, \"latex\")\n\n\n\\begin{table}\n\\centering\n\\begin{talltblr}[ %% tabularray outer open\nentry=none,label=none,\nnote{*}={Hello World!},\n] %% tabularray outer close\n{ %% tabularray inner open\ncolspec={Q[]Q[]Q[]Q[]Q[]},\n} %% tabularray inner close\n\\toprule\nmpg & cyl\\textsuperscript{*} & disp & hp & drat \\\\ \\midrule %% TinyTableHeader\n21.0 & 6\\textsuperscript{*} & 160 & 110 & 3.90 \\\\\n21.0 & 6 & 160 & 110 & 3.90 \\\\\n22.8 & 4 & 108 & 93 & 3.85 \\\\\n21.4 & 6 & 258 & 110 & 3.08 \\\\\n\\bottomrule\n\\end{talltblr}\n\\end{table}", "crumbs": [ "Tutorial (HTML)", "Functions", @@ -95,7 +95,7 @@ "href": "man/tt.html#draw-a-tiny-table", "title": "tinytable", "section": "", - "text": "The tt function renders a table in different formats with various styling options: HTML, Markdown, LaTeX, Word, PDF, PNG, or Typst. The table can be customized with additional functions:\n\n\nstyle_tt() to style fonts, colors, alignment, etc.\n\n\nformat_tt() to format numbers, dates, strings, etc.\n\n\ngroup_tt() for row or column group labels.\n\n\nsave_tt() to save the table to a file or return the table as a string.\n\n\nprint() to print to a specific format, ex: print(x, “latex”)\n\n\ntinytable attempts to determine the appropriate way to print the table based on interactive use, RStudio availability, and output format in RMarkdown or Quarto documents. Users can call print(x, output=“markdown”) to print the table in a specific format. Alternatively, they can set a global option: options(“tinytable_print_output”=“markdown”)\n\n\n\ntt(\n x,\n digits = NULL,\n caption = NULL,\n width = NULL,\n notes = NULL,\n theme = \"default\",\n placement = getOption(\"tinytable_tabularray_placement\", default = NULL)\n)\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\ndigits\n\n\nNumber of significant digits to keep for numeric variables. When digits is an integer, tt() calls format_tt(x, digits = digits) before proceeding to draw the table. Users who need more control can use the format_tt() function.\n\n\n\n\ncaption\n\n\nA string that will be used as the caption of the table.\n\n\n\n\nwidth\n\n\nA numeric value between 0 and 1 indicating the proportion of the line width that the table should cover.\n\n\n\n\nnotes\n\n\nNotes to append to the bottom of the table. This argument accepts several different inputs:\n\n\nSingle string insert a single note: “blah blah”\n\n\nMultiple strings insert multiple notes sequentially: list(“Hello world”, “Foo bar”)\n\n\nA named list inserts a list with the name as superscript: list(“a” = list(“Hello World”))\n\n\nA named list with positions inserts markers as superscripts inside table cells: list(“a” = list(i = 0:1, j = 2, text = “Hello World”))\n\n\n\n\n\n\ntheme\n\n\nThe theme to apply to the table: \"default\", \"striped\", \"bootstrap\", \"void\", or \"grid\".\n\n\n\n\nplacement\n\n\nA string to control the position of tables in LaTeX. Will be inserted in square brackets like: \\begin{table}[H]\n\n\n\n\n\n\nAn object of class tt representing the table.\nThe table object has an attribute which holds information about the structure of the table. This metadata can be accessed with attr(x,“tinytable_meta”). In general, modifying the content of this attribute is not recommended, but it can be useful to some developers, such as those who want to force print to a specific output format without calling print().\n\n\n\nWhen rendering Quarto and Rmarkdown documents, tinytable will populate the LaTeX preamble automatically with all the required packages. For standalone LaTeX packages, these commands should be inserted in the preamble:\n\n\\usepackage{tabularray}\n\\usepackage{float}\n\\usepackage{graphicx}\n\\usepackage{codehigh}\n\\usepackage[normalem]{ulem}\n\\UseTblrLibrary{booktabs}\n\\newcommand{\\tinytableTabularrayUnderline}[1]{\\underline{#1}}\n\\newcommand{\\tinytableTabularrayStrikeout}[1]{\\sout{#1}}\n\\NewTableCommand{\\tinytableDefineColor}[3]{\\definecolor{#1}{#2}{#3}}\n\n\n\n\n\n\nlibrary(tinytable)\n\nlibrary(tinytable)\nx <- mtcars[1:4, 1:5]\n\ntt(x)\n\n \n\n \n \n \n tinytable_inwywy5xsikpd1sox76b\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\ntt(x,\n theme = \"striped\",\n width = 0.5,\n caption = \"Data about cars.\")\n\n \n\n \n \n \n tinytable_vzzwxtmh81a8kc3gvkbl\n \n \n \n \n \n\n \n \n \n \n Data about cars.\n \n mpg\n cyl\n disp\n hp\n drat\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\ntt(x, notes = \"Hello World!\")\n\n \n\n \n \n \n tinytable_j43raqf36ac2lnqii07y\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 Hello World!\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\nfn <- list(i = 0:1, j = 2, text = \"Hello World!\")\ntab <- tt(x, notes = list(\"*\" = fn))\nprint(tab, \"latex\")\n\n\n\\begin{table}\n\\centering\n\\begin{talltblr}[ %% tabularray outer open\nentry=none,label=none,\nnote{*}={Hello World!},\n] %% tabularray outer close\n{ %% tabularray inner open\ncolspec={Q[]Q[]Q[]Q[]Q[]},\n} %% tabularray inner close\n\\toprule\nmpg & cyl\\textsuperscript{*} & disp & hp & drat \\\\ \\midrule %% TinyTableHeader\n21.0 & 6\\textsuperscript{*} & 160 & 110 & 3.90 \\\\\n21.0 & 6 & 160 & 110 & 3.90 \\\\\n22.8 & 4 & 108 & 93 & 3.85 \\\\\n21.4 & 6 & 258 & 110 & 3.08 \\\\\n\\bottomrule\n\\end{talltblr}\n\\end{table}", + "text": "The tt function renders a table in different formats with various styling options: HTML, Markdown, LaTeX, Word, PDF, PNG, or Typst. The table can be customized with additional functions:\n\n\nstyle_tt() to style fonts, colors, alignment, etc.\n\n\nformat_tt() to format numbers, dates, strings, etc.\n\n\ngroup_tt() for row or column group labels.\n\n\nsave_tt() to save the table to a file or return the table as a string.\n\n\nprint() to print to a specific format, ex: print(x, “latex”)\n\n\ntinytable attempts to determine the appropriate way to print the table based on interactive use, RStudio availability, and output format in RMarkdown or Quarto documents. Users can call print(x, output=“markdown”) to print the table in a specific format. Alternatively, they can set a global option: options(“tinytable_print_output”=“markdown”)\n\n\n\ntt(\n x,\n digits = NULL,\n caption = NULL,\n width = NULL,\n notes = NULL,\n theme = \"default\",\n placement = getOption(\"tinytable_tabularray_placement\", default = NULL)\n)\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\ndigits\n\n\nNumber of significant digits to keep for numeric variables. When digits is an integer, tt() calls format_tt(x, digits = digits) before proceeding to draw the table. Users who need more control can use the format_tt() function.\n\n\n\n\ncaption\n\n\nA string that will be used as the caption of the table.\n\n\n\n\nwidth\n\n\nA numeric value between 0 and 1 indicating the proportion of the line width that the table should cover.\n\n\n\n\nnotes\n\n\nNotes to append to the bottom of the table. This argument accepts several different inputs:\n\n\nSingle string insert a single note: “blah blah”\n\n\nMultiple strings insert multiple notes sequentially: list(“Hello world”, “Foo bar”)\n\n\nA named list inserts a list with the name as superscript: list(“a” = list(“Hello World”))\n\n\nA named list with positions inserts markers as superscripts inside table cells: list(“a” = list(i = 0:1, j = 2, text = “Hello World”))\n\n\n\n\n\n\ntheme\n\n\nThe theme to apply to the table: \"default\", \"striped\", \"bootstrap\", \"void\", or \"grid\".\n\n\n\n\nplacement\n\n\nA string to control the position of tables in LaTeX. Will be inserted in square brackets like: \\begin{table}[H]\n\n\n\n\n\n\nAn object of class tt representing the table.\nThe table object has an attribute which holds information about the structure of the table. This metadata can be accessed with attr(x,“tinytable_meta”). In general, modifying the content of this attribute is not recommended, but it can be useful to some developers, such as those who want to force print to a specific output format without calling print().\n\n\n\nWhen rendering Quarto and Rmarkdown documents, tinytable will populate the LaTeX preamble automatically with all the required packages. For standalone LaTeX packages, these commands should be inserted in the preamble:\n\n\\usepackage{tabularray}\n\\usepackage{float}\n\\usepackage{graphicx}\n\\usepackage{codehigh}\n\\usepackage[normalem]{ulem}\n\\UseTblrLibrary{booktabs}\n\\newcommand{\\tinytableTabularrayUnderline}[1]{\\underline{#1}}\n\\newcommand{\\tinytableTabularrayStrikeout}[1]{\\sout{#1}}\n\\NewTableCommand{\\tinytableDefineColor}[3]{\\definecolor{#1}{#2}{#3}}\n\n\n\n\n\n\nlibrary(tinytable)\n\nlibrary(tinytable)\nx <- mtcars[1:4, 1:5]\n\ntt(x)\n\n \n\n \n \n \n tinytable_8k2mjmyuxdr6jqd447hv\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\ntt(x,\n theme = \"striped\",\n width = 0.5,\n caption = \"Data about cars.\")\n\n \n\n \n \n \n tinytable_ytgokxejtfrna90zdmw9\n \n \n \n \n \n\n \n \n \n \n Data about cars.\n \n mpg\n cyl\n disp\n hp\n drat\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\ntt(x, notes = \"Hello World!\")\n\n \n\n \n \n \n tinytable_odv84z8424kubl4e8lve\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 Hello World!\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\nfn <- list(i = 0:1, j = 2, text = \"Hello World!\")\ntab <- tt(x, notes = list(\"*\" = fn))\nprint(tab, \"latex\")\n\n\n\\begin{table}\n\\centering\n\\begin{talltblr}[ %% tabularray outer open\nentry=none,label=none,\nnote{*}={Hello World!},\n] %% tabularray outer close\n{ %% tabularray inner open\ncolspec={Q[]Q[]Q[]Q[]Q[]},\n} %% tabularray inner close\n\\toprule\nmpg & cyl\\textsuperscript{*} & disp & hp & drat \\\\ \\midrule %% TinyTableHeader\n21.0 & 6\\textsuperscript{*} & 160 & 110 & 3.90 \\\\\n21.0 & 6 & 160 & 110 & 3.90 \\\\\n22.8 & 4 & 108 & 93 & 3.85 \\\\\n21.4 & 6 & 258 & 110 & 3.08 \\\\\n\\bottomrule\n\\end{talltblr}\n\\end{table}", "crumbs": [ "Tutorial (HTML)", "Functions", @@ -131,7 +131,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.\n\n\n\nformat_tt(\n x,\n j = NULL,\n digits = getOption(\"digits\"),\n num_fmt = \"significant\",\n num_zero = TRUE,\n num_suffix = FALSE,\n num_mark_big = \"\",\n num_mark_dec = getOption(\"OutDec\", default = \".\"),\n date = \"%Y-%m-%d\",\n bool = function(column) tools::toTitleCase(tolower(column)),\n other = as.character,\n escape = FALSE,\n markdown = FALSE,\n sprintf = NULL\n)\n\n\n\n\n\n\n\nx\n\n\nA data frame or a vector to be formatted.\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’, ‘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\nother\n\n\nA function to format columns of other types. Defaults to as.character().\n\n\n\n\nescape\n\n\nLogical or String; if TRUE, escape special characters to display them as text in the format of the output of a tt() table. If format_tt() is called as a standalone function instead of on a tt() table, the escape argument accepts strings to specify the escaping method: \"latex\" or \"html\".\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\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\nA data frame with formatted columns.\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 tinytable_s46yy9dfy2q52tpxmdl0\n \n \n \n \n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n 10 000\n 10 001\n \n \n 9 999\n 9 999\n \n \n 10 002\n 9 999", + "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.\n\n\n\nformat_tt(\n x,\n j = NULL,\n digits = getOption(\"digits\"),\n num_fmt = \"significant\",\n num_zero = TRUE,\n num_suffix = FALSE,\n num_mark_big = \"\",\n num_mark_dec = getOption(\"OutDec\", default = \".\"),\n date = \"%Y-%m-%d\",\n bool = function(column) tools::toTitleCase(tolower(column)),\n other = as.character,\n escape = FALSE,\n markdown = FALSE,\n sprintf = NULL\n)\n\n\n\n\n\n\n\nx\n\n\nA data frame or a vector to be formatted.\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’, ‘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\nother\n\n\nA function to format columns of other types. Defaults to as.character().\n\n\n\n\nescape\n\n\nLogical or String; if TRUE, escape special characters to display them as text in the format of the output of a tt() table. If format_tt() is called as a standalone function instead of on a tt() table, the escape argument accepts strings to specify the escaping method: \"latex\" or \"html\".\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\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\nA data frame with formatted columns.\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 tinytable_labmyqc6bz0i4ajg7dc7\n \n \n \n \n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n 10 000\n 10 001\n \n \n 10 001\n 10 000\n \n \n 10 000\n 10 001", "crumbs": [ "Tutorial (HTML)", "Functions", @@ -143,7 +143,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.\n\n\n\nformat_tt(\n x,\n j = NULL,\n digits = getOption(\"digits\"),\n num_fmt = \"significant\",\n num_zero = TRUE,\n num_suffix = FALSE,\n num_mark_big = \"\",\n num_mark_dec = getOption(\"OutDec\", default = \".\"),\n date = \"%Y-%m-%d\",\n bool = function(column) tools::toTitleCase(tolower(column)),\n other = as.character,\n escape = FALSE,\n markdown = FALSE,\n sprintf = NULL\n)\n\n\n\n\n\n\n\nx\n\n\nA data frame or a vector to be formatted.\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’, ‘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\nother\n\n\nA function to format columns of other types. Defaults to as.character().\n\n\n\n\nescape\n\n\nLogical or String; if TRUE, escape special characters to display them as text in the format of the output of a tt() table. If format_tt() is called as a standalone function instead of on a tt() table, the escape argument accepts strings to specify the escaping method: \"latex\" or \"html\".\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\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\nA data frame with formatted columns.\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 tinytable_s46yy9dfy2q52tpxmdl0\n \n \n \n \n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n 10 000\n 10 001\n \n \n 9 999\n 9 999\n \n \n 10 002\n 9 999", + "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.\n\n\n\nformat_tt(\n x,\n j = NULL,\n digits = getOption(\"digits\"),\n num_fmt = \"significant\",\n num_zero = TRUE,\n num_suffix = FALSE,\n num_mark_big = \"\",\n num_mark_dec = getOption(\"OutDec\", default = \".\"),\n date = \"%Y-%m-%d\",\n bool = function(column) tools::toTitleCase(tolower(column)),\n other = as.character,\n escape = FALSE,\n markdown = FALSE,\n sprintf = NULL\n)\n\n\n\n\n\n\n\nx\n\n\nA data frame or a vector to be formatted.\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’, ‘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\nother\n\n\nA function to format columns of other types. Defaults to as.character().\n\n\n\n\nescape\n\n\nLogical or String; if TRUE, escape special characters to display them as text in the format of the output of a tt() table. If format_tt() is called as a standalone function instead of on a tt() table, the escape argument accepts strings to specify the escaping method: \"latex\" or \"html\".\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\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\nA data frame with formatted columns.\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 tinytable_labmyqc6bz0i4ajg7dc7\n \n \n \n \n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n 10 000\n 10 001\n \n \n 10 001\n 10 000\n \n \n 10 000\n 10 001", "crumbs": [ "Tutorial (HTML)", "Functions", @@ -286,7 +286,7 @@ "href": "vignettes/tutorial.html#themes", "title": "tinytable", "section": "Themes", - "text": "Themes\ntinytable offers a few basic themes out of the box: “default”, “striped”, “bootstrap”, “grid”, “void.” Those themes can be applied with the theme argument of the tt() function. As we will see below, it is easy to go much beyond those basic settings to customize your own tables. Here we only illustrate a few of the simplest settings:\n\ntt(x, theme = \"striped\")\n\n \n\n \n \n \n tinytable_bqljszh8qmw3eof00ylh\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\n\ntt(x, theme = \"grid\")\n\n \n\n \n \n \n tinytable_hpqqjj6i7wtjp5eaf3ai\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\n\ntt(x, theme = \"bootstrap\")\n\n \n\n \n \n \n tinytable_1umvkqzj3edhpj1w4vps\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08", + "text": "Themes\ntinytable offers a few basic themes out of the box: “default”, “striped”, “bootstrap”, “grid”, “void.” Those themes can be applied with the theme argument of the tt() function. As we will see below, it is easy to go much beyond those basic settings to customize your own tables. Here we only illustrate a few of the simplest settings:\n\ntt(x, theme = \"striped\")\n\n \n\n \n \n \n tinytable_eqdyk2upn5mahyplznte\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\n\ntt(x, theme = \"grid\")\n\n \n\n \n \n \n tinytable_vsaj8o08nfgvxoohf3b4\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\n\ntt(x, theme = \"bootstrap\")\n\n \n\n \n \n \n tinytable_zjw9k8ezqfwzy4w4ushp\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08", "crumbs": [ "Tutorial (HTML)" ] @@ -296,7 +296,7 @@ "href": "vignettes/tutorial.html#width", "title": "tinytable", "section": "Width", - "text": "Width\nThe width arguments accepts a number between 0 and 1, indicating what proportion of the linewidth the table should cover:\n\ntt(x, width = 0.5)\n\n \n\n \n \n \n tinytable_gx1u4c8wi8tsdlcf9m26\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\n\ntt(x, width = 1)\n\n \n\n \n \n \n tinytable_6y3is4ck09p42a2ugncs\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08", + "text": "Width\nThe width arguments accepts a number between 0 and 1, indicating what proportion of the linewidth the table should cover:\n\ntt(x, width = 0.5)\n\n \n\n \n \n \n tinytable_h9y7vb0xdh7x2u1gcx1z\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\n\ntt(x, width = 1)\n\n \n\n \n \n \n tinytable_i4jt8s0k1ltxy0vbtpef\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08", "crumbs": [ "Tutorial (HTML)" ] @@ -306,7 +306,7 @@ "href": "vignettes/tutorial.html#captions-and-cross-references", "title": "tinytable", "section": "Captions and cross-references", - "text": "Captions and cross-references\nIn Quarto, one can specify captions and use cross-references using code like this:\n@tbl-blah shows that...\n\n```{r}\n#| label: tbl-blah\n#| tbl-cap: \"Blah blah blah\"\nlibrary(tinytable)\ntt(mtcars[1:4, 1:4])\n```\nAnd here is the rendered version of the code chunk above:\nTable 1 shows that…\n\nlibrary(tinytable)\ntt(mtcars[1:4, 1:4], placement = NULL)\n\n\n\nTable 1: Blah blah blah\n\n\n\n \n\n \n \n \n tinytable_6sdx3xfomm5dkstcxaia\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n \n \n \n \n \n 21\n 6\n 160\n 110\n \n \n 21\n 6\n 160\n 110\n \n \n 22.8\n 4\n 108\n 93\n \n \n 21.4\n 6\n 258\n 110\n \n \n \n \n\n \n\n \n\n\n\n\n\n\n\nFor standalone LaTeX tables, you can use the caption argument like so:\n\ntt(x, caption = \"Blah blah.\\\\label{tbl-blah}\")\n\nBe aware that this more approach may not work well in Quarto or Rmarkdown documents.", + "text": "Captions and cross-references\nIn Quarto, one can specify captions and use cross-references using code like this:\n@tbl-blah shows that...\n\n```{r}\n#| label: tbl-blah\n#| tbl-cap: \"Blah blah blah\"\nlibrary(tinytable)\ntt(mtcars[1:4, 1:4])\n```\nAnd here is the rendered version of the code chunk above:\nTable 1 shows that…\n\nlibrary(tinytable)\ntt(mtcars[1:4, 1:4], placement = NULL)\n\n\n\nTable 1: Blah blah blah\n\n\n\n \n\n \n \n \n tinytable_5glbbr71tfu5zdlh66h4\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n \n \n \n \n \n 21\n 6\n 160\n 110\n \n \n 21\n 6\n 160\n 110\n \n \n 22.8\n 4\n 108\n 93\n \n \n 21.4\n 6\n 258\n 110\n \n \n \n \n\n \n\n \n\n\n\n\n\n\n\nFor standalone LaTeX tables, you can use the caption argument like so:\n\ntt(x, caption = \"Blah blah.\\\\label{tbl-blah}\")\n\nBe aware that this more approach may not work well in Quarto or Rmarkdown documents.", "crumbs": [ "Tutorial (HTML)" ] @@ -316,7 +316,7 @@ "href": "vignettes/tutorial.html#footnotes", "title": "tinytable", "section": "Footnotes", - "text": "Footnotes\nThe notes argument accepts single strings or named lists of strings:\n\nn <- \"Fusce id ipsum consequat ante pellentesque iaculis eu a ipsum. Mauris id ex in nulla consectetur aliquam. In nec tempus diam. Aliquam arcu nibh, dapibus id ex vestibulum, feugiat consequat erat. Morbi feugiat dapibus malesuada. Quisque vel ullamcorper felis. Aenean a sem at nisi tempor pretium sit amet quis lacus.\"\n\nlorem <- data.frame(\n Lorem = \"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.\",\n Ipsum = \" Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos.\"\n)\n\ntt(lorem, width = 3/4)\n\n \n\n \n \n \n tinytable_k6391u9rjpqmhdhbwkn1\n \n \n \n \n \n\n \n \n \n \n \n \n Lorem\n Ipsum\n \n \n \n \n \n Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.\n Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos.\n \n \n \n \n\n \n\n \n\n\n\ntt(lorem, notes = n, width = 1)\n\n \n\n \n \n \n tinytable_wcuhlve4eloxys2ah1j4\n \n \n \n \n \n\n \n \n \n \n \n \n Lorem\n Ipsum\n \n \n Fusce id ipsum consequat ante pellentesque iaculis eu a ipsum. Mauris id ex in nulla consectetur aliquam. In nec tempus diam. Aliquam arcu nibh, dapibus id ex vestibulum, feugiat consequat erat. Morbi feugiat dapibus malesuada. Quisque vel ullamcorper felis. Aenean a sem at nisi tempor pretium sit amet quis lacus.\n \n \n Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.\n Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos.\n \n \n \n \n\n \n\n \n\n\n\nA full-width table with wrapped text in cells and a footnote.\n\nWhen notes is a named list, the names are used as identifiers and displayed as superscripts:\n\ntt(x, notes = list(a = \"Blah.\", b = \"Blah blah.\"))\n\n \n\n \n \n \n tinytable_8lw47t2jkzx9f919gxxy\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 a Blah.\nb Blah blah.\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nWe can also add markers in individual cells by providing coordinates:\n\ntt(x, notes = list(\n a = list(i = 0:1, j = 1, text = \"Blah.\"),\n b = \"Blah blah.\"\n )\n)\n\n \n\n \n \n \n tinytable_j5mrbr2mpewcdiaruz4l\n \n \n \n \n \n\n \n \n \n \n \n \n mpga\n cyl\n disp\n hp\n drat\n \n \n a Blah.\nb Blah blah.\n \n \n 21a\n 6\n 160\n 110\n 3.90\n \n \n 21\n 6\n 160\n 110\n 3.90\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08", + "text": "Footnotes\nThe notes argument accepts single strings or named lists of strings:\n\nn <- \"Fusce id ipsum consequat ante pellentesque iaculis eu a ipsum. Mauris id ex in nulla consectetur aliquam. In nec tempus diam. Aliquam arcu nibh, dapibus id ex vestibulum, feugiat consequat erat. Morbi feugiat dapibus malesuada. Quisque vel ullamcorper felis. Aenean a sem at nisi tempor pretium sit amet quis lacus.\"\n\nlorem <- data.frame(\n Lorem = \"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.\",\n Ipsum = \" Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos.\"\n)\n\ntt(lorem, width = 3/4)\n\n \n\n \n \n \n tinytable_p9vlwqkw7f9fk3yqsl7z\n \n \n \n \n \n\n \n \n \n \n \n \n Lorem\n Ipsum\n \n \n \n \n \n Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.\n Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos.\n \n \n \n \n\n \n\n \n\n\n\ntt(lorem, notes = n, width = 1)\n\n \n\n \n \n \n tinytable_6kalsh8afexo4bjo98k7\n \n \n \n \n \n\n \n \n \n \n \n \n Lorem\n Ipsum\n \n \n Fusce id ipsum consequat ante pellentesque iaculis eu a ipsum. Mauris id ex in nulla consectetur aliquam. In nec tempus diam. Aliquam arcu nibh, dapibus id ex vestibulum, feugiat consequat erat. Morbi feugiat dapibus malesuada. Quisque vel ullamcorper felis. Aenean a sem at nisi tempor pretium sit amet quis lacus.\n \n \n Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.\n Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos.\n \n \n \n \n\n \n\n \n\n\n\nA full-width table with wrapped text in cells and a footnote.\n\nWhen notes is a named list, the names are used as identifiers and displayed as superscripts:\n\ntt(x, notes = list(a = \"Blah.\", b = \"Blah blah.\"))\n\n \n\n \n \n \n tinytable_ss7lsw2awaivng5h63r6\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 a Blah.\nb Blah blah.\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nWe can also add markers in individual cells by providing coordinates:\n\ntt(x, notes = list(\n a = list(i = 0:1, j = 1, text = \"Blah.\"),\n b = \"Blah blah.\"\n )\n)\n\n \n\n \n \n \n tinytable_nk3oxmolqo9x137mzs61\n \n \n \n \n \n\n \n \n \n \n \n \n mpga\n cyl\n disp\n hp\n drat\n \n \n a Blah.\nb Blah blah.\n \n \n 21a\n 6\n 160\n 110\n 3.90\n \n \n 21\n 6\n 160\n 110\n 3.90\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08", "crumbs": [ "Tutorial (HTML)" ] @@ -326,7 +326,7 @@ "href": "vignettes/tutorial.html#line-breaks-and-text-wrapping", "title": "tinytable", "section": "Line breaks and text wrapping", - "text": "Line breaks and text wrapping\nWhen the width argument is specified and a cell includes long text, the text is automatically wrapped to match the table.\n\ntt(lorem, width = 3/4)\n\n \n\n \n \n \n tinytable_unhqa6o8gs3euqtysfdy\n \n \n \n \n \n\n \n \n A full width table with wrapped text.\n \n \n \n Lorem\n Ipsum\n \n \n \n \n \n Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.\n Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos.\n \n \n \n \n\n \n\n \n\n\n\n\nManual line breaks work sligthly different in LaTeX (PDF) or HTML. This table shows the two strategies. For HTML, we insert a <br> tag. For LaTeX, we wrap the string in curly braces {}, and then insert two (escaped) backslashes: \\\\\\\\\n\nd <- data.frame(\n \"{Sed ut \\\\\\\\ perspiciatis unde}\",\n \"dicta sunt<br> explicabo. Nemo\"\n) |> setNames(c(\"LaTeX line break\", \"HTML line break\"))\ntt(d, width = 1)\n\n \n\n \n \n \n tinytable_60juirekbnx31r1zmu8x\n \n \n \n \n \n\n \n \n \n \n \n \n LaTeX line break\n HTML line break\n \n \n \n \n \n {Sed ut \\\\ perspiciatis unde}\n dicta sunt explicabo. Nemo", + "text": "Line breaks and text wrapping\nWhen the width argument is specified and a cell includes long text, the text is automatically wrapped to match the table.\n\ntt(lorem, width = 3/4)\n\n \n\n \n \n \n tinytable_n7oscn0wros58trtqdk0\n \n \n \n \n \n\n \n \n A full width table with wrapped text.\n \n \n \n Lorem\n Ipsum\n \n \n \n \n \n Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.\n Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos.\n \n \n \n \n\n \n\n \n\n\n\n\nManual line breaks work sligthly different in LaTeX (PDF) or HTML. This table shows the two strategies. For HTML, we insert a <br> tag. For LaTeX, we wrap the string in curly braces {}, and then insert two (escaped) backslashes: \\\\\\\\\n\nd <- data.frame(\n \"{Sed ut \\\\\\\\ perspiciatis unde}\",\n \"dicta sunt<br> explicabo. Nemo\"\n) |> setNames(c(\"LaTeX line break\", \"HTML line break\"))\ntt(d, width = 1)\n\n \n\n \n \n \n tinytable_tpija6dl7817iavsz7fk\n \n \n \n \n \n\n \n \n \n \n \n \n LaTeX line break\n HTML line break\n \n \n \n \n \n {Sed ut \\\\ perspiciatis unde}\n dicta sunt explicabo. Nemo", "crumbs": [ "Tutorial (HTML)" ] @@ -336,7 +336,7 @@ "href": "vignettes/tutorial.html#math", "title": "tinytable", "section": "Math", - "text": "Math\nTo insert LaTeX-style mathematical expressions in a tinytable, we enclose the expression in dollar signs: $...$. The expression will then rendered as a mathematical expression by MathJax (for HTML), LaTeX, or Pandoc. Do not forget to double escape any backslashes.\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 tinytable_pjtbbzi8zo1al51j0k71\n \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}$", + "text": "Math\nTo insert LaTeX-style mathematical expressions in a tinytable, we enclose the expression in dollar signs: $...$. The expression will then rendered as a mathematical expression by MathJax (for HTML), LaTeX, or Pandoc. Do not forget to double escape any backslashes.\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 tinytable_yc0oa3kc5fbsesqmk2bu\n \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}$", "crumbs": [ "Tutorial (HTML)" ] @@ -346,7 +346,7 @@ "href": "vignettes/tutorial.html#line-breaks-and-text-wrapping-1", "title": "tinytable", "section": "Line breaks and text wrapping", - "text": "Line breaks and text wrapping\nWhen the width argument is specified and a cell includes long text, the text is automatically wrapped to match the table.\n\ntt(lorem, width = 3/4)\n\n \n\n \n \n \n tinytable_6duficf1dzyehovqidwm\n \n \n \n \n \n\n \n \n A full width table with wrapped text.\n \n \n \n Lorem\n Ipsum\n \n \n \n \n \n Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.\n Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos.\n \n \n \n \n\n \n\n \n\n\n\n\nManual line breaks work sligthly different in LaTeX (PDF) or HTML. This table shows the two strategies. For HTML, we insert a <br> tag. For LaTeX, we wrap the string in curly braces {}, and then insert two (escaped) backslashes: \\\\\\\\\n\nd <- data.frame(\n \"{Sed ut \\\\\\\\ perspiciatis unde}\",\n \"dicta sunt<br> explicabo. Nemo\"\n) |> setNames(c(\"LaTeX line break\", \"HTML line break\"))\ntt(d, width = 1)\n\n \n\n \n \n \n tinytable_p4lp602l9fui5kwpt7hn\n \n \n \n \n \n\n \n \n \n \n \n \n LaTeX line break\n HTML line break\n \n \n \n \n \n {Sed ut \\\\ perspiciatis unde}\n dicta sunt explicabo. Nemo", + "text": "Line breaks and text wrapping\nWhen the width argument is specified and a cell includes long text, the text is automatically wrapped to match the table.\n\ntt(lorem, width = 3/4)\n\n \n\n \n \n \n tinytable_15fvb0sw14njphjlsvp6\n \n \n \n \n \n\n \n \n A full width table with wrapped text.\n \n \n \n Lorem\n Ipsum\n \n \n \n \n \n Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.\n Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos.\n \n \n \n \n\n \n\n \n\n\n\n\nManual line breaks work sligthly different in LaTeX (PDF) or HTML. This table shows the two strategies. For HTML, we insert a <br> tag. For LaTeX, we wrap the string in curly braces {}, and then insert two (escaped) backslashes: \\\\\\\\\n\nd <- data.frame(\n \"{Sed ut \\\\\\\\ perspiciatis unde}\",\n \"dicta sunt<br> explicabo. Nemo\"\n) |> setNames(c(\"LaTeX line break\", \"HTML line break\"))\ntt(d, width = 1)\n\n \n\n \n \n \n tinytable_xwkmetcuzu328miggzct\n \n \n \n \n \n\n \n \n \n \n \n \n LaTeX line break\n HTML line break\n \n \n \n \n \n {Sed ut \\\\ perspiciatis unde}\n dicta sunt explicabo. Nemo", "crumbs": [ "Tutorial (HTML)" ] @@ -356,7 +356,7 @@ "href": "vignettes/tutorial.html#numbers-dates-strings-etc.", "title": "tinytable", "section": "Numbers, dates, strings, etc.", - "text": "Numbers, dates, strings, etc.\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)),\n z = c(TRUE, TRUE, FALSE))\n\ntt(dat, digits = 2)\n\n \n\n \n \n \n tinytable_cudz8wi6bzrh8fdpokpn\n \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 1970-02-13\n True\n \n \n 201399\n 201.40\n 1970-12-26\n True\n \n \n 100188\n 0.13\n 1970-02-15\n False\n \n \n \n \n\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 tinytable_a0lixg912josbya4hnhw\n \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 February 13 1970\n True\n \n \n 201 399,18\n 201.4\n December 26 1970\n True\n \n \n 100 188,39\n 0.1\n February 15 1970\n False\n \n \n \n \n\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 tinytable_ceph7mzo79sngk9rdmbt\n \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 98.94T\n \n \n Food: Halloumi\n 201.399\n 7.29B\n \n \n Food: Tofu\n 0.146\n 29.11M\n \n \n Food: Beans\n 0.003\n 93.94K\n \n \n \n \n\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.4 98.9T\n2 Halloumi 201.4 7.3B\n3 Tofu 0.1 29.1M\n4 Beans 0.0 93.9K", + "text": "Numbers, dates, strings, etc.\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)),\n z = c(TRUE, TRUE, FALSE))\n\ntt(dat, digits = 2)\n\n \n\n \n \n \n tinytable_8ng9i7xheuga6fxoyc8a\n \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 1972-09-23\n True\n \n \n 201399\n 201.40\n 1972-05-25\n True\n \n \n 100188\n 0.13\n 1970-04-27\n False\n \n \n \n \n\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 tinytable_z74jqmxj4z6uzmwhjfxc\n \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 September 23 1972\n True\n \n \n 201 399,18\n 201.4\n May 25 1972\n True\n \n \n 100 188,39\n 0.1\n April 27 1970\n False\n \n \n \n \n\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 tinytable_0tevyke8emqbm5kphdqy\n \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 98.94T\n \n \n Food: Halloumi\n 201.399\n 7.29B\n \n \n Food: Tofu\n 0.146\n 29.11M\n \n \n Food: Beans\n 0.003\n 93.94K\n \n \n \n \n\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.4 98.9T\n2 Halloumi 201.4 7.3B\n3 Tofu 0.1 29.1M\n4 Beans 0.0 93.9K", "crumbs": [ "Tutorial (HTML)" ] @@ -366,7 +366,7 @@ "href": "vignettes/tutorial.html#escape-special-characters", "title": "tinytable", "section": "Escape special characters", - "text": "Escape special characters\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 tinytable_m295tpwmg3nfy0g14uel\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\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 \\\\$\"", + "text": "Escape special characters\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 tinytable_jo0pot1sdp7kmvywtril\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\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 \\\\$\"", "crumbs": [ "Tutorial (HTML)" ] @@ -376,7 +376,7 @@ "href": "vignettes/tutorial.html#markdown", "title": "tinytable", "section": "Markdown", - "text": "Markdown\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 tinytable_jz5fv5mbzcprthc5skbp\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\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 \"[`plot2`](https://grantmcdermott.com/plot2/)\",\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 tinytable_gx8eg147skgepmykk4cw\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 plot2\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", + "text": "Markdown\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 tinytable_cbthy0hmsb07gqso7v6v\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\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 \"[`plot2`](https://grantmcdermott.com/plot2/)\",\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 tinytable_1sskv64b2qdz2kngx133\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 plot2\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", "crumbs": [ "Tutorial (HTML)" ] @@ -386,7 +386,7 @@ "href": "vignettes/tutorial.html#cells-rows-columns", "title": "tinytable", "section": "Cells, rows, columns", - "text": "Cells, rows, columns\nTo style individual cells, we use the style_cell() function. The first two arguments—i and j—identify the cells of interest, by row and column numbers respectively. To style a cell in the 2nd row and 3rd column, we can do:\n\ntt(x) |>\n style_tt(\n i = 2,\n j = 3,\n background = \"black\",\n color = \"white\")\n\n \n\n \n \n \n tinytable_955hx7ih4tk2oyuszluh\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nThe i and j accept vectors of integers to modify several cells at once:\n\ntt(x) |>\n style_tt(\n i = 2:3,\n j = c(1, 3, 4),\n italic = TRUE,\n color = \"orange\")\n\n \n\n \n \n \n tinytable_4nohi9892mphq2d96rng\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nWe can style all cells in a table by omitting both the i and j arguments:\n\ntt(x) |> style_tt(color = \"orange\")\n\n \n\n \n \n \n tinytable_wn9idqanqlvbfm6e1n16\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nWe can style entire rows by omitting the j argument:\n\ntt(x) |> style_tt(i = 1:2, color = \"orange\")\n\n \n\n \n \n \n tinytable_qinffm7jkn5k1o6r2wee\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nWe can style entire columns by omitting the i argument:\n\ntt(x) |> style_tt(j = c(2, 4), bold = TRUE)\n\n \n\n \n \n \n tinytable_yqpx9pgwsgi7uhdaomqm\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nThe j argument accepts integer vectors, character vectors, but also a string with a Perl-style regular expression, which makes it easier to select columns by name:\n\ntt(x) |> style_tt(j = c(\"mpg\", \"drat\"), color = \"orange\")\n\n \n\n \n \n \n tinytable_vlnn9hfgxubml1tljjai\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\ntt(x) |> style_tt(j = \"mpg|drat\", color = \"orange\")\n\n \n\n \n \n \n tinytable_edo9g6w6jmj7goncxgtw\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nHere we use a “negative lookahead” to exclude certain columns:\n\ntt(x) |> style_tt(j = \"^(?!drat|mpg)\", color = \"orange\")\n\n \n\n \n \n \n tinytable_nodt5zjaz12zapcscnqc\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nOf course, we can also call the style_tt() function several times to apply different styles to different parts of the table:\n\ntt(x) |> \n style_tt(i = 1, j = 1:2, color = \"orange\") |>\n style_tt(i = 1, j = 3:4, color = \"green\")\n\n \n\n \n \n \n tinytable_7j0i6q1crsozr6nsjqha\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08", + "text": "Cells, rows, columns\nTo style individual cells, we use the style_cell() function. The first two arguments—i and j—identify the cells of interest, by row and column numbers respectively. To style a cell in the 2nd row and 3rd column, we can do:\n\ntt(x) |>\n style_tt(\n i = 2,\n j = 3,\n background = \"black\",\n color = \"white\")\n\n \n\n \n \n \n tinytable_dxpyf1iblh40km3pendm\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nThe i and j accept vectors of integers to modify several cells at once:\n\ntt(x) |>\n style_tt(\n i = 2:3,\n j = c(1, 3, 4),\n italic = TRUE,\n color = \"orange\")\n\n \n\n \n \n \n tinytable_780wjykr8xhrz5og26df\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nWe can style all cells in a table by omitting both the i and j arguments:\n\ntt(x) |> style_tt(color = \"orange\")\n\n \n\n \n \n \n tinytable_beskgscra6tekpvcab3a\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nWe can style entire rows by omitting the j argument:\n\ntt(x) |> style_tt(i = 1:2, color = \"orange\")\n\n \n\n \n \n \n tinytable_ul90qrcxgsy3jbobzu94\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nWe can style entire columns by omitting the i argument:\n\ntt(x) |> style_tt(j = c(2, 4), bold = TRUE)\n\n \n\n \n \n \n tinytable_6eni1rrb9a9pvhm3diyz\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nThe j argument accepts integer vectors, character vectors, but also a string with a Perl-style regular expression, which makes it easier to select columns by name:\n\ntt(x) |> style_tt(j = c(\"mpg\", \"drat\"), color = \"orange\")\n\n \n\n \n \n \n tinytable_tb4priaj37hg79ivr5bs\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\ntt(x) |> style_tt(j = \"mpg|drat\", color = \"orange\")\n\n \n\n \n \n \n tinytable_kjyltc3gac65ygn8s8ir\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nHere we use a “negative lookahead” to exclude certain columns:\n\ntt(x) |> style_tt(j = \"^(?!drat|mpg)\", color = \"orange\")\n\n \n\n \n \n \n tinytable_p1mto43xkmvcvdpvy7hx\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nOf course, we can also call the style_tt() function several times to apply different styles to different parts of the table:\n\ntt(x) |> \n style_tt(i = 1, j = 1:2, color = \"orange\") |>\n style_tt(i = 1, j = 3:4, color = \"green\")\n\n \n\n \n \n \n tinytable_dkurpma9q457as7e3162\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08", "crumbs": [ "Tutorial (HTML)" ] @@ -396,7 +396,7 @@ "href": "vignettes/tutorial.html#colors", "title": "tinytable", "section": "Colors", - "text": "Colors\nThe color and background arguments in the style_tt() function are used for specifying the text color and the background color for cells of a table created by the tt() function. This argument plays a crucial role in enhancing the visual appeal and readability of the table, whether it’s rendered in LaTeX or HTML format. The way we specify colors differs slightly between the two formats:\nFor HTML Output:\n\nHex Codes: You can specify colors using hexadecimal codes, which consist of a # followed by 6 characters (e.g., #CC79A7). This allows for a wide range of colors.\nKeywords: There’s also the option to use color keywords for convenience. The supported keywords are basic color names like black, red, blue, etc.\n\nFor LaTeX Output:\n\nHexadecimal Codes: Similar to HTML, you can use hexadecimal codes. However, in LaTeX, you need to include these codes as strings (e.g., \"#CC79A7\").\nKeywords: LaTeX supports a different set of color keywords, which include standard colors like black, red, blue, as well as additional ones like cyan, darkgray, lightgray, etc.\nColor Blending: An advanced feature in LaTeX is color blending, which can be achieved using the xcolor package. You can blend colors by specifying ratios (e.g., white!80!blue or green!20!red).\nLuminance Levels: The ninecolors package in LaTeX offers colors with predefined luminance levels, allowing for more nuanced color choices (e.g., “azure4”, “magenta8”).\n\nNote that the keywords used in LaTeX and HTML are slightly different.\n\ntt(x) |> style_tt(i = 1:4, j = 1, color = \"#FF5733\")\n\n \n\n \n \n \n tinytable_6ggvak3ks8msum8y4fbm\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nNote that when using Hex codes in a LaTeX table, we need extra declarations in the LaTeX preamble. See ?tt for details.", + "text": "Colors\nThe color and background arguments in the style_tt() function are used for specifying the text color and the background color for cells of a table created by the tt() function. This argument plays a crucial role in enhancing the visual appeal and readability of the table, whether it’s rendered in LaTeX or HTML format. The way we specify colors differs slightly between the two formats:\nFor HTML Output:\n\nHex Codes: You can specify colors using hexadecimal codes, which consist of a # followed by 6 characters (e.g., #CC79A7). This allows for a wide range of colors.\nKeywords: There’s also the option to use color keywords for convenience. The supported keywords are basic color names like black, red, blue, etc.\n\nFor LaTeX Output:\n\nHexadecimal Codes: Similar to HTML, you can use hexadecimal codes. However, in LaTeX, you need to include these codes as strings (e.g., \"#CC79A7\").\nKeywords: LaTeX supports a different set of color keywords, which include standard colors like black, red, blue, as well as additional ones like cyan, darkgray, lightgray, etc.\nColor Blending: An advanced feature in LaTeX is color blending, which can be achieved using the xcolor package. You can blend colors by specifying ratios (e.g., white!80!blue or green!20!red).\nLuminance Levels: The ninecolors package in LaTeX offers colors with predefined luminance levels, allowing for more nuanced color choices (e.g., “azure4”, “magenta8”).\n\nNote that the keywords used in LaTeX and HTML are slightly different.\n\ntt(x) |> style_tt(i = 1:4, j = 1, color = \"#FF5733\")\n\n \n\n \n \n \n tinytable_79kmnwtw2voomn36m7g0\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nNote that when using Hex codes in a LaTeX table, we need extra declarations in the LaTeX preamble. See ?tt for details.", "crumbs": [ "Tutorial (HTML)" ] @@ -406,7 +406,7 @@ "href": "vignettes/tutorial.html#alignment", "title": "tinytable", "section": "Alignment", - "text": "Alignment\nTo align columns, we use a single character, or a string where each letter represents a column:\n\ndat <- data.frame(\n a = c(\"a\", \"aa\", \"aaa\"),\n b = c(\"b\", \"bb\", \"bbb\"),\n c = c(\"c\", \"cc\", \"ccc\"))\n\ntt(dat) |> style_tt(j = 1:3, align = \"c\")\n\n \n\n \n \n \n tinytable_v59qxd8kef3gl2sz2wjk\n \n \n \n \n \n\n \n \n \n \n \n \n a\n b\n c\n \n \n \n \n \n a\n b\n c\n \n \n aa\n bb\n cc\n \n \n aaa\n bbb\n ccc\n \n \n \n \n\n \n\n \n\n\n\ntt(dat) |> style_tt(j = 1:3, align = \"lcr\")\n\n \n\n \n \n \n tinytable_jyrga5caw39sie0225hz\n \n \n \n \n \n\n \n \n \n \n \n \n a\n b\n c\n \n \n \n \n \n a\n b\n c\n \n \n aa\n bb\n cc\n \n \n aaa\n bbb\n ccc", + "text": "Alignment\nTo align columns, we use a single character, or a string where each letter represents a column:\n\ndat <- data.frame(\n a = c(\"a\", \"aa\", \"aaa\"),\n b = c(\"b\", \"bb\", \"bbb\"),\n c = c(\"c\", \"cc\", \"ccc\"))\n\ntt(dat) |> style_tt(j = 1:3, align = \"c\")\n\n \n\n \n \n \n tinytable_aic00q6deje7tmzm3ire\n \n \n \n \n \n\n \n \n \n \n \n \n a\n b\n c\n \n \n \n \n \n a\n b\n c\n \n \n aa\n bb\n cc\n \n \n aaa\n bbb\n ccc\n \n \n \n \n\n \n\n \n\n\n\ntt(dat) |> style_tt(j = 1:3, align = \"lcr\")\n\n \n\n \n \n \n tinytable_giila5s8derbq2lexmhe\n \n \n \n \n \n\n \n \n \n \n \n \n a\n b\n c\n \n \n \n \n \n a\n b\n c\n \n \n aa\n bb\n cc\n \n \n aaa\n bbb\n ccc", "crumbs": [ "Tutorial (HTML)" ] @@ -416,7 +416,7 @@ "href": "vignettes/tutorial.html#fonts", "title": "tinytable", "section": "Fonts", - "text": "Fonts\nThe font size is specified in em units.\n\ntt(x) |> style_tt(j = \"mpg|hp|qsec\", fontsize = 1.5)\n\n \n\n \n \n \n tinytable_jxm3uk9hqmzoi215wt50\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08", + "text": "Fonts\nThe font size is specified in em units.\n\ntt(x) |> style_tt(j = \"mpg|hp|qsec\", fontsize = 1.5)\n\n \n\n \n \n \n tinytable_mdagj64i7mmu661dhdhf\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08", "crumbs": [ "Tutorial (HTML)" ] @@ -426,7 +426,7 @@ "href": "vignettes/tutorial.html#spanning-cells-merging-cells", "title": "tinytable", "section": "Spanning cells (merging cells)", - "text": "Spanning cells (merging cells)\nSometimes, it can be useful to make a cell stretch across multiple colums or rows, for example when we want to insert a label. To achieve this, we can use the colspan argument. Here, we make the 2nd cell of the 2nd row stretch across three columns and two rows:\n\ntt(x)|> style_tt(\n i = 2, j = 2,\n colspan = 3,\n rowspan = 2,\n align = \"c\",\n alignv = \"m\",\n color = \"white\",\n background = \"black\",\n bold = TRUE)\n\n \n\n \n \n \n tinytable_ismbljkm1i2rjuht46gd\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nHere is the original table for comparison:\n\ntt(x)\n\n \n\n \n \n \n tinytable_p18d2bfydi12sfzzw5kg\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nSpanning cells can be particularly useful when we want to suppress redundant labels:\n\ntab <- aggregate(mpg ~ cyl + am, FUN = mean, data = mtcars)\ntab <- tab[order(tab$cyl, tab$am),]\ntab\n\n cyl am mpg\n1 4 0 22.9\n4 4 1 28.1\n2 6 0 19.1\n5 6 1 20.6\n3 8 0 15.1\n6 8 1 15.4\n\ntt(tab, digits = 2) |>\n style_tt(i = c(1, 3, 5), j = 1, rowspan = 2, alignv = \"t\")\n\n \n\n \n \n \n tinytable_kj4cnh2zi6a4r3jqb3hi\n \n \n \n \n \n\n \n \n \n \n \n \n cyl\n am\n mpg\n \n \n \n \n \n 4\n 0\n 23\n \n \n 4\n 1\n 28\n \n \n 6\n 0\n 19\n \n \n 6\n 1\n 21\n \n \n 8\n 0\n 15\n \n \n 8\n 1\n 15", + "text": "Spanning cells (merging cells)\nSometimes, it can be useful to make a cell stretch across multiple colums or rows, for example when we want to insert a label. To achieve this, we can use the colspan argument. Here, we make the 2nd cell of the 2nd row stretch across three columns and two rows:\n\ntt(x)|> style_tt(\n i = 2, j = 2,\n colspan = 3,\n rowspan = 2,\n align = \"c\",\n alignv = \"m\",\n color = \"white\",\n background = \"black\",\n bold = TRUE)\n\n \n\n \n \n \n tinytable_7paomy04oidmkanig3cv\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nHere is the original table for comparison:\n\ntt(x)\n\n \n\n \n \n \n tinytable_8cj1nllg1u30soo90l19\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nSpanning cells can be particularly useful when we want to suppress redundant labels:\n\ntab <- aggregate(mpg ~ cyl + am, FUN = mean, data = mtcars)\ntab <- tab[order(tab$cyl, tab$am),]\ntab\n\n cyl am mpg\n1 4 0 22.9\n4 4 1 28.1\n2 6 0 19.1\n5 6 1 20.6\n3 8 0 15.1\n6 8 1 15.4\n\ntt(tab, digits = 2) |>\n style_tt(i = c(1, 3, 5), j = 1, rowspan = 2, alignv = \"t\")\n\n \n\n \n \n \n tinytable_prk95yj5jfr4dx8exud8\n \n \n \n \n \n\n \n \n \n \n \n \n cyl\n am\n mpg\n \n \n \n \n \n 4\n 0\n 23\n \n \n 4\n 1\n 28\n \n \n 6\n 0\n 19\n \n \n 6\n 1\n 21\n \n \n 8\n 0\n 15\n \n \n 8\n 1\n 15", "crumbs": [ "Tutorial (HTML)" ] @@ -436,7 +436,7 @@ "href": "vignettes/tutorial.html#headers", "title": "tinytable", "section": "Headers", - "text": "Headers\nThe header can be omitted from the table by deleting the column names in the x data frame:\n\nk <- x\ncolnames(k) <- NULL\ntt(k)\n\n \n\n \n \n \n tinytable_a9kxk23igrf8fqr5yjus\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nThe first is row 0, and higher level headers (ex: column spanning labels) have negative indices like -1. They can be styled as expected:\n\ntt(x) |> style_tt(i = 0, color = \"white\", background = \"black\")\n\n \n\n \n \n \n tinytable_27wgxw26e30j68f3th5l\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nWhen styling columns without specifying i, the headers are styled in accordance with the rest of the column:\n\ntt(x) |> style_tt(j = 2:3, color = \"white\", background = \"black\")\n\n \n\n \n \n \n tinytable_e3d4ui7we1wqn1la31z0\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08", + "text": "Headers\nThe header can be omitted from the table by deleting the column names in the x data frame:\n\nk <- x\ncolnames(k) <- NULL\ntt(k)\n\n \n\n \n \n \n tinytable_kq8206ac26jjshbz58z4\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nThe first is row 0, and higher level headers (ex: column spanning labels) have negative indices like -1. They can be styled as expected:\n\ntt(x) |> style_tt(i = 0, color = \"white\", background = \"black\")\n\n \n\n \n \n \n tinytable_j1znwp5kibiqppcqnuvh\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nWhen styling columns without specifying i, the headers are styled in accordance with the rest of the column:\n\ntt(x) |> style_tt(j = 2:3, color = \"white\", background = \"black\")\n\n \n\n \n \n \n tinytable_7m6pjqxwyiluuvt61gg0\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08", "crumbs": [ "Tutorial (HTML)" ] @@ -446,7 +446,7 @@ "href": "vignettes/tutorial.html#conditional-styling", "title": "tinytable", "section": "Conditional styling", - "text": "Conditional styling\nWe can use the standard which function from Base R to create indices and apply conditional stying on rows. And we can use a regular expression in j to apply conditional styling on columns:\n\nk <- mtcars[1:10, c(\"mpg\", \"am\", \"vs\")]\n\ntt(k) |> \n style_tt(\n i = which(k$am == k$vs),\n background = \"teal\",\n color = \"white\")\n\n \n\n \n \n \n tinytable_40xkw0jvt6ln5vtx9xz7\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n am\n vs\n \n \n \n \n \n 21\n 1\n 0\n \n \n 21\n 1\n 0\n \n \n 22.8\n 1\n 1\n \n \n 21.4\n 0\n 1\n \n \n 18.7\n 0\n 0\n \n \n 18.1\n 0\n 1\n \n \n 14.3\n 0\n 0\n \n \n 24.4\n 0\n 1\n \n \n 22.8\n 0\n 1\n \n \n 19.2\n 0\n 1", + "text": "Conditional styling\nWe can use the standard which function from Base R to create indices and apply conditional stying on rows. And we can use a regular expression in j to apply conditional styling on columns:\n\nk <- mtcars[1:10, c(\"mpg\", \"am\", \"vs\")]\n\ntt(k) |> \n style_tt(\n i = which(k$am == k$vs),\n background = \"teal\",\n color = \"white\")\n\n \n\n \n \n \n tinytable_s6uk5ojmypbg9es3b6ka\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n am\n vs\n \n \n \n \n \n 21\n 1\n 0\n \n \n 21\n 1\n 0\n \n \n 22.8\n 1\n 1\n \n \n 21.4\n 0\n 1\n \n \n 18.7\n 0\n 0\n \n \n 18.1\n 0\n 1\n \n \n 14.3\n 0\n 0\n \n \n 24.4\n 0\n 1\n \n \n 22.8\n 0\n 1\n \n \n 19.2\n 0\n 1", "crumbs": [ "Tutorial (HTML)" ] @@ -456,7 +456,7 @@ "href": "vignettes/tutorial.html#vectorized-styling-heatmaps", "title": "tinytable", "section": "Vectorized styling (heatmaps)", - "text": "Vectorized styling (heatmaps)\nThe color, background, and fontsize arguments are vectorized. This allows easy specification of different colors in a single call:\n\ntt(x) |>\n style_tt(\n i = 1:4,\n color = c(\"red\", \"blue\", \"green\", \"orange\"))\n\n \n\n \n \n \n tinytable_eyruojaj2a89x52mva2s\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nWhen using a single value for a vectorized argument, it gets applied to all values:\n\ntt(x) |>\n style_tt(\n j = 2:3,\n color = c(\"orange\", \"green\"),\n background = \"black\")\n\n \n\n \n \n \n tinytable_vgbd62ywb6vhf7weuqbh\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nWe can also produce more complex heatmap-like tables to illustrate different font sizes in em units:\n\n# font sizes\nfs <- seq(.1, 2, length.out = 20)\n\n# headless table\nk <- data.frame(matrix(fs, ncol = 5))\ncolnames(k) <- NULL\n\n# colors\nbg <- hcl.colors(20, \"Inferno\")\nfg <- ifelse(as.matrix(k) < 1.7, tail(bg, 1), head(bg, 1))\n\n# table\ntt(k, width = .7, theme = \"void\") |>\n style_tt(j = 1:5, align = \"ccccc\") |>\n style_tt(\n i = 1:4,\n j = 1:5,\n color = fg,\n background = bg,\n fontsize = fs)\n\n \n\n \n \n \n tinytable_qnjztlx4gxvjg6fkgr9d\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n 0.1\n 0.5\n 0.9\n 1.3\n 1.7\n \n \n 0.2\n 0.6\n 1\n 1.4\n 1.8\n \n \n 0.3\n 0.7\n 1.1\n 1.5\n 1.9\n \n \n 0.4\n 0.8\n 1.2\n 1.6\n 2", + "text": "Vectorized styling (heatmaps)\nThe color, background, and fontsize arguments are vectorized. This allows easy specification of different colors in a single call:\n\ntt(x) |>\n style_tt(\n i = 1:4,\n color = c(\"red\", \"blue\", \"green\", \"orange\"))\n\n \n\n \n \n \n tinytable_usf8n6ziksz8e4y0wb2f\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nWhen using a single value for a vectorized argument, it gets applied to all values:\n\ntt(x) |>\n style_tt(\n j = 2:3,\n color = c(\"orange\", \"green\"),\n background = \"black\")\n\n \n\n \n \n \n tinytable_egaz0b76xap8ez8v3jop\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nWe can also produce more complex heatmap-like tables to illustrate different font sizes in em units:\n\n# font sizes\nfs <- seq(.1, 2, length.out = 20)\n\n# headless table\nk <- data.frame(matrix(fs, ncol = 5))\ncolnames(k) <- NULL\n\n# colors\nbg <- hcl.colors(20, \"Inferno\")\nfg <- ifelse(as.matrix(k) < 1.7, tail(bg, 1), head(bg, 1))\n\n# table\ntt(k, width = .7, theme = \"void\") |>\n style_tt(j = 1:5, align = \"ccccc\") |>\n style_tt(\n i = 1:4,\n j = 1:5,\n color = fg,\n background = bg,\n fontsize = fs)\n\n \n\n \n \n \n tinytable_epwyag84itx9cl5qk1si\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n 0.1\n 0.5\n 0.9\n 1.3\n 1.7\n \n \n 0.2\n 0.6\n 1\n 1.4\n 1.8\n \n \n 0.3\n 0.7\n 1.1\n 1.5\n 1.9\n \n \n 0.4\n 0.8\n 1.2\n 1.6\n 2", "crumbs": [ "Tutorial (HTML)" ] @@ -466,7 +466,17 @@ "href": "vignettes/tutorial.html#lines-borders", "title": "tinytable", "section": "Lines (borders)", - "text": "Lines (borders)\nThe style_tt function allows us to customize the borders that surround eacell of a table, as well horizontal and vertical rules. To control these lines, we use the line, line_width, and line_color arguments. Here’s a brief overview of each of these arguments:\n\nline: This argument specifies where solid lines should be drawn. It is a string that can consist of the following characters:\n\n\"t\": Draw a line at the top of the cell, row, or column.\n\"b\": Draw a line at the bottom of the cell, row, or column.\n\"l\": Draw a line at the left side of the cell, row, or column.\n\"r\": Draw a line at the right side of the cell, row, or column.\nYou can combine these characters to draw lines on multiple sides, such as \"tbl\" to draw lines at the top, bottom, and left sides of a cell.\n\nline_width: This argument controls the width of the solid lines in em units (default: 0.1 em). You can adjust this value to make the lines thicker or thinner.\nline_color: Specifies the color of the solid lines. You can use color names, hexadecimal codes, or other color specifications to define the line color.\n\nHere is an example where we draw lines around every border (“t”, “b”, “l”, and “r”) of specified cells.\n\ntt(x, theme = \"void\") |>\n style_tt(\n i = 0:3,\n j = 1:3,\n line = \"tblr\",\n line_width = 0.4,\n line_color = \"orange\")\n\n \n\n \n \n \n tinytable_xl6eqsx1aspu4s54x6e9\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nAnd here is an example with horizontal rules:\n\ntt(x, theme = \"void\") |>\n style_tt(i = 0, line = \"t\", line_color = \"orange\", line_width = 0.4) |>\n style_tt(i = 0, line = \"b\", line_color = \"purple\", line_width = 0.2) |>\n style_tt(i = 4, line = \"b\", line_color = \"orange\", line_width = 0.4)\n\n \n\n \n \n \n tinytable_8yct31jk6fkdtss3xs8g\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\n\ndat <- data.frame(1:2, 3:4, 5:6, 7:8)\ncolnames(dat) <- NULL\n\ntt(dat, theme = \"void\") |> \n style_tt(\n line = \"tblr\", line_color = \"white\", line_width = 0.5,\n background = \"blue\", color = \"white\")\n\n \n\n \n \n \n tinytable_r5zkdy2neolueb9mxd03\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n 1\n 3\n 5\n 7\n \n \n 2\n 4\n 6\n 8", + "text": "Lines (borders)\nThe style_tt function allows us to customize the borders that surround eacell of a table, as well horizontal and vertical rules. To control these lines, we use the line, line_width, and line_color arguments. Here’s a brief overview of each of these arguments:\n\nline: This argument specifies where solid lines should be drawn. It is a string that can consist of the following characters:\n\n\"t\": Draw a line at the top of the cell, row, or column.\n\"b\": Draw a line at the bottom of the cell, row, or column.\n\"l\": Draw a line at the left side of the cell, row, or column.\n\"r\": Draw a line at the right side of the cell, row, or column.\nYou can combine these characters to draw lines on multiple sides, such as \"tbl\" to draw lines at the top, bottom, and left sides of a cell.\n\nline_width: This argument controls the width of the solid lines in em units (default: 0.1 em). You can adjust this value to make the lines thicker or thinner.\nline_color: Specifies the color of the solid lines. You can use color names, hexadecimal codes, or other color specifications to define the line color.\n\nHere is an example where we draw lines around every border (“t”, “b”, “l”, and “r”) of specified cells.\n\ntt(x, theme = \"void\") |>\n style_tt(\n i = 0:3,\n j = 1:3,\n line = \"tblr\",\n line_width = 0.4,\n line_color = \"orange\")\n\n \n\n \n \n \n tinytable_5h1wvqonng2b93gghcvx\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nAnd here is an example with horizontal rules:\n\ntt(x, theme = \"void\") |>\n style_tt(i = 0, line = \"t\", line_color = \"orange\", line_width = 0.4) |>\n style_tt(i = 0, line = \"b\", line_color = \"purple\", line_width = 0.2) |>\n style_tt(i = 4, line = \"b\", line_color = \"orange\", line_width = 0.4)\n\n \n\n \n \n \n tinytable_it4w9ebgrr0qg38thuz7\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\n\ndat <- data.frame(1:2, 3:4, 5:6, 7:8)\ncolnames(dat) <- NULL\n\ntt(dat, theme = \"void\") |> \n style_tt(\n line = \"tblr\", line_color = \"white\", line_width = 0.5,\n background = \"blue\", color = \"white\")\n\n \n\n \n \n \n tinytable_8f6go5ejve1h5ewnx04f\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n 1\n 3\n 5\n 7\n \n \n 2\n 4\n 6\n 8", + "crumbs": [ + "Tutorial (HTML)" + ] + }, + { + "objectID": "vignettes/tutorial.html#markdown-and-word", + "href": "vignettes/tutorial.html#markdown-and-word", + "title": "tinytable", + "section": "Markdown and Word", + "text": "Markdown and Word\nStyling for Markdown and Word tables is more limited than for the other formats. In particular:\n\nThe only supported arguments are: bold, italic, and strikeout.\nHeaders inserted by group_tt() cannot be styled using the style_tt() function.\n\nThese limitations are due to the fact that there is no markdown syntax for the other options (ex: colors and background), and that we create Word documents by converting a markdown table to .docx via the Pandoc software.\nOne workaround is to style the group headers directly in their definition by using markdown syntax:\n\nmtcars[1:4, 1:4] |>\n tt() |>\n group_tt(i = list(\"*Hello*\" = 1, \"__World__\" = 3)) |>\n print(\"markdown\")\n\n\n+------+-----+------+-----+\n| mpg | cyl | disp | hp |\n+======+=====+======+=====+\n| *Hello* |\n+------+-----+------+-----+\n| 21 | 6 | 160 | 110 |\n+------+-----+------+-----+\n| 21 | 6 | 160 | 110 |\n+------+-----+------+-----+\n| __World__ |\n+------+-----+------+-----+\n| 22.8 | 4 | 108 | 93 |\n+------+-----+------+-----+\n| 21.4 | 6 | 258 | 110 |\n+------+-----+------+-----+", "crumbs": [ "Tutorial (HTML)" ] @@ -476,7 +486,7 @@ "href": "vignettes/tutorial.html#inserting-images-in-tables", "title": "tinytable", "section": "Inserting images in tables", - "text": "Inserting images in tables\nTo insert images in a table, we use the plot_tt() function. The path_img values must be relative to the main document saved by save_tt() or to the Quarto (or Rmarkdown) document in which the code is executed.\n\ndat <- data.frame(\n Species = c(\"Spider\", \"Squirrel\"),\n Image = \"\"\n)\n\nimg <- c(\n \"../figures/spider.png\",\n \"../figures/squirrel.png\"\n)\n\ntt(dat) |>\n plot_tt(j = 2, images = img, height = 3)\n\n \n\n \n \n \n tinytable_phkktgswvuqqtewaxa0q\n \n \n \n \n \n\n \n \n \n \n \n \n Species\n Image\n \n \n \n \n \n Spider\n \n \n \n Squirrel\n \n \n \n \n \n\n \n\n \n\n\n\n\nIn HTML tables, it is possible to insert tables directly from a web address, but not in LaTeX.\n\ndat <- data.frame(\"R\" = \"\")\nimg <- \"https://cran.r-project.org/Rlogo.svg\"\ntt(dat) |>\n plot_tt(i = 1, j = 1, images = img, height = 7) |>\n style_tt(j = 1, align = \"c\")\n\n \n\n \n \n \n tinytable_em4zo8ovn9i2g9knac6d\n \n \n \n \n \n\n \n \n \n \n \n \n R", + "text": "Inserting images in tables\nTo insert images in a table, we use the plot_tt() function. The path_img values must be relative to the main document saved by save_tt() or to the Quarto (or Rmarkdown) document in which the code is executed.\n\ndat <- data.frame(\n Species = c(\"Spider\", \"Squirrel\"),\n Image = \"\"\n)\n\nimg <- c(\n \"../figures/spider.png\",\n \"../figures/squirrel.png\"\n)\n\ntt(dat) |>\n plot_tt(j = 2, images = img, height = 3)\n\n \n\n \n \n \n tinytable_iv1e3t4n68rdi4etz6sl\n \n \n \n \n \n\n \n \n \n \n \n \n Species\n Image\n \n \n \n \n \n Spider\n \n \n \n Squirrel\n \n \n \n \n \n\n \n\n \n\n\n\n\nIn HTML tables, it is possible to insert tables directly from a web address, but not in LaTeX.\n\ndat <- data.frame(\"R\" = \"\")\nimg <- \"https://cran.r-project.org/Rlogo.svg\"\ntt(dat) |>\n plot_tt(i = 1, j = 1, images = img, height = 7) |>\n style_tt(j = 1, align = \"c\")\n\n \n\n \n \n \n tinytable_1dd0eml81rhj26buhs4l\n \n \n \n \n \n\n \n \n \n \n \n \n R", "crumbs": [ "Tutorial (HTML)" ] @@ -486,7 +496,7 @@ "href": "vignettes/tutorial.html#inline-plots", "title": "tinytable", "section": "Inline plots", - "text": "Inline plots\nWe can draw inline plots three ways, with\n\nBuilt-in templates for histograms, density plots, and bar plots\nCustom plots using base R plots.\nCustom plots using ggplot2.\n\nTo draw custom plots, one simply has to define a custom function, whose structure we illustrate below.\n\nBuilt-in plots\nThere are several types of inline plots available by default. For example,\n\nplot_data <- list(mtcars$mpg, mtcars$hp, mtcars$qsec)\n\ndat <- data.frame(\n Variables = c(\"mpg\", \"hp\", \"qsec\"), \n Histogram = \"\",\n Density = \"\",\n Bar = \"\",\n Line = \"\"\n)\n\n# random data for sparklines\nlines <- lapply(1:3, \\(x) data.frame(x = 1:10, y = rnorm(10)))\n\ntt(dat) |>\n plot_tt(j = 2, fun = \"histogram\", data = plot_data) |>\n plot_tt(j = 3, fun = \"density\", data = plot_data, color = \"darkgreen\") |>\n plot_tt(j = 4, fun = \"bar\", data = list(2, 3, 6), color = \"orange\") |>\n plot_tt(j = 5, fun = \"line\", data = lines, color = \"blue\") |>\n style_tt(j = 2:5, align = \"c\")\n\n \n\n \n \n \n tinytable_sjpqk0fbr3g1oxfex3gv\n \n \n \n \n \n\n \n \n \n \n \n \n Variables\n Histogram\n Density\n Bar\n Line\n \n \n \n \n \n mpg\n \n \n \n \n \n \n hp\n \n \n \n \n \n \n qsec\n \n \n \n \n \n \n \n \n\n \n\n \n\n\n\n\n\n\nCustom plots: Base R\nImportant: Custom functions must have ... as an argument.\nTo create a custom inline plot using Base R plotting functions, we create a function that returns another function. tinytable will then call that second function internally to generate the plot.\nThis is easier than it sounds! For example:\n\nf <- function(d, ...) {\n function() hist(d, axes = FALSE, ann = FALSE, col = \"lightblue\")\n}\n\nplot_data <- list(mtcars$mpg, mtcars$hp, mtcars$qsec)\n\ndat <- data.frame(Variables = c(\"mpg\", \"hp\", \"qsec\"), Histogram = \"\")\n\ntt(dat) |>\n plot_tt(j = 2, fun = f, data = plot_data)\n\n \n\n \n \n \n tinytable_7kwt4rhxsxipcabwup6v\n \n \n \n \n \n\n \n \n \n \n \n \n Variables\n Histogram\n \n \n \n \n \n mpg\n \n \n \n hp\n \n \n \n qsec\n \n \n \n \n \n\n \n\n \n\n\n\n\n\n\nCustom plots: ggplot2\nImportant: Custom functions must have ... as an argument.\nTo create a custom inline plot using ggplot2, we create a function that returns a ggplot object:\n\nlibrary(ggplot2)\n\nf <- function(d, color = \"black\", ...) {\n d <- data.frame(x = d)\n ggplot(d, aes(x = x)) + \n geom_histogram(bins = 30, color = color, fill = color) +\n scale_x_continuous(expand=c(0,0)) +\n scale_y_continuous(expand=c(0,0)) +\n theme_void()\n}\n\nplot_data <- list(mtcars$mpg, mtcars$hp, mtcars$qsec)\n\ntt(dat) |>\n plot_tt(j = 2, fun = f, data = plot_data, color = \"pink\")\n\n \n\n \n \n \n tinytable_scsdtp6kipbe2zvnvql0\n \n \n \n \n \n\n \n \n \n \n \n \n Variables\n Histogram\n \n \n \n \n \n mpg\n \n \n \n hp\n \n \n \n qsec\n \n \n \n \n \n\n \n\n \n\n\n\n\nWe can insert arbitrarily complex plots by customizing the ggplot2 call:\n\npenguins <- read.csv(\n \"https://vincentarelbundock.github.io/Rdatasets/csv/palmerpenguins/penguins.csv\",\n na.strings = \"\") |> na.omit()\n\n# split data by species\ndat <- split(penguins, penguins$species)\nbody <- lapply(dat, \\(x) x$body_mass_g)\nflip <- lapply(dat, \\(x) x$flipper_length_mm)\n\n# create nearly empty table\ntab <- data.frame(\n \"Species\" = names(dat),\n \"Body Mass\" = \"\",\n \"Flipper Length\" = \"\",\n \"Body vs. Flipper\" = \"\",\n check.names = FALSE\n)\n\n# custom ggplot2 function to create inline plot\nf <- function(d, ...) {\n ggplot(d, aes(x = flipper_length_mm, y = body_mass_g, color = sex)) +\n geom_point(size = .2) +\n scale_x_continuous(expand=c(0,0)) +\n scale_y_continuous(expand=c(0,0)) +\n scale_color_manual(values = c(\"#E69F00\", \"#56B4E9\")) +\n theme_void() +\n theme(legend.position = \"none\")\n}\n\n# `tinytable` calls\ntt(tab) |>\n plot_tt(j = 2, fun = \"histogram\", data = body, height = 2) |>\n plot_tt(j = 3, fun = \"density\", data = flip, height = 2) |>\n plot_tt(j = 4, fun = f, data = dat, height = 2) |>\n style_tt(j = 2:4, align = \"c\") \n\n \n\n \n \n \n tinytable_725d5m8eaiqgprk2bu9x\n \n \n \n \n \n\n \n \n \n \n \n \n Species\n Body Mass\n Flipper Length\n Body vs. Flipper\n \n \n \n \n \n Adelie\n \n \n \n \n \n Chinstrap\n \n \n \n \n \n Gentoo", + "text": "Inline plots\nWe can draw inline plots three ways, with\n\nBuilt-in templates for histograms, density plots, and bar plots\nCustom plots using base R plots.\nCustom plots using ggplot2.\n\nTo draw custom plots, one simply has to define a custom function, whose structure we illustrate below.\n\nBuilt-in plots\nThere are several types of inline plots available by default. For example,\n\nplot_data <- list(mtcars$mpg, mtcars$hp, mtcars$qsec)\n\ndat <- data.frame(\n Variables = c(\"mpg\", \"hp\", \"qsec\"), \n Histogram = \"\",\n Density = \"\",\n Bar = \"\",\n Line = \"\"\n)\n\n# random data for sparklines\nlines <- lapply(1:3, \\(x) data.frame(x = 1:10, y = rnorm(10)))\n\ntt(dat) |>\n plot_tt(j = 2, fun = \"histogram\", data = plot_data) |>\n plot_tt(j = 3, fun = \"density\", data = plot_data, color = \"darkgreen\") |>\n plot_tt(j = 4, fun = \"bar\", data = list(2, 3, 6), color = \"orange\") |>\n plot_tt(j = 5, fun = \"line\", data = lines, color = \"blue\") |>\n style_tt(j = 2:5, align = \"c\")\n\n \n\n \n \n \n tinytable_yqbibw9bhytojy0fiit9\n \n \n \n \n \n\n \n \n \n \n \n \n Variables\n Histogram\n Density\n Bar\n Line\n \n \n \n \n \n mpg\n \n \n \n \n \n \n hp\n \n \n \n \n \n \n qsec\n \n \n \n \n \n \n \n \n\n \n\n \n\n\n\n\n\n\nCustom plots: Base R\nImportant: Custom functions must have ... as an argument.\nTo create a custom inline plot using Base R plotting functions, we create a function that returns another function. tinytable will then call that second function internally to generate the plot.\nThis is easier than it sounds! For example:\n\nf <- function(d, ...) {\n function() hist(d, axes = FALSE, ann = FALSE, col = \"lightblue\")\n}\n\nplot_data <- list(mtcars$mpg, mtcars$hp, mtcars$qsec)\n\ndat <- data.frame(Variables = c(\"mpg\", \"hp\", \"qsec\"), Histogram = \"\")\n\ntt(dat) |>\n plot_tt(j = 2, fun = f, data = plot_data)\n\n \n\n \n \n \n tinytable_gjb8nm5zlwto2uqe3b9j\n \n \n \n \n \n\n \n \n \n \n \n \n Variables\n Histogram\n \n \n \n \n \n mpg\n \n \n \n hp\n \n \n \n qsec\n \n \n \n \n \n\n \n\n \n\n\n\n\n\n\nCustom plots: ggplot2\nImportant: Custom functions must have ... as an argument.\nTo create a custom inline plot using ggplot2, we create a function that returns a ggplot object:\n\nlibrary(ggplot2)\n\nf <- function(d, color = \"black\", ...) {\n d <- data.frame(x = d)\n ggplot(d, aes(x = x)) + \n geom_histogram(bins = 30, color = color, fill = color) +\n scale_x_continuous(expand=c(0,0)) +\n scale_y_continuous(expand=c(0,0)) +\n theme_void()\n}\n\nplot_data <- list(mtcars$mpg, mtcars$hp, mtcars$qsec)\n\ntt(dat) |>\n plot_tt(j = 2, fun = f, data = plot_data, color = \"pink\")\n\n \n\n \n \n \n tinytable_4ia0zv3ltz5dquxmnngq\n \n \n \n \n \n\n \n \n \n \n \n \n Variables\n Histogram\n \n \n \n \n \n mpg\n \n \n \n hp\n \n \n \n qsec\n \n \n \n \n \n\n \n\n \n\n\n\n\nWe can insert arbitrarily complex plots by customizing the ggplot2 call:\n\npenguins <- read.csv(\n \"https://vincentarelbundock.github.io/Rdatasets/csv/palmerpenguins/penguins.csv\",\n na.strings = \"\") |> na.omit()\n\n# split data by species\ndat <- split(penguins, penguins$species)\nbody <- lapply(dat, \\(x) x$body_mass_g)\nflip <- lapply(dat, \\(x) x$flipper_length_mm)\n\n# create nearly empty table\ntab <- data.frame(\n \"Species\" = names(dat),\n \"Body Mass\" = \"\",\n \"Flipper Length\" = \"\",\n \"Body vs. Flipper\" = \"\",\n check.names = FALSE\n)\n\n# custom ggplot2 function to create inline plot\nf <- function(d, ...) {\n ggplot(d, aes(x = flipper_length_mm, y = body_mass_g, color = sex)) +\n geom_point(size = .2) +\n scale_x_continuous(expand=c(0,0)) +\n scale_y_continuous(expand=c(0,0)) +\n scale_color_manual(values = c(\"#E69F00\", \"#56B4E9\")) +\n theme_void() +\n theme(legend.position = \"none\")\n}\n\n# `tinytable` calls\ntt(tab) |>\n plot_tt(j = 2, fun = \"histogram\", data = body, height = 2) |>\n plot_tt(j = 3, fun = \"density\", data = flip, height = 2) |>\n plot_tt(j = 4, fun = f, data = dat, height = 2) |>\n style_tt(j = 2:4, align = \"c\") \n\n \n\n \n \n \n tinytable_mf4zqwvy9zylxe6xdx6h\n \n \n \n \n \n\n \n \n \n \n \n \n Species\n Body Mass\n Flipper Length\n Body vs. Flipper\n \n \n \n \n \n Adelie\n \n \n \n \n \n Chinstrap\n \n \n \n \n \n Gentoo", "crumbs": [ "Tutorial (HTML)" ] @@ -496,7 +506,7 @@ "href": "vignettes/tutorial.html#fontawesome", "title": "tinytable", "section": "Fontawesome", - "text": "Fontawesome\nWe can use the fontawesome package to include fancy icons in HTML tables:\n\nlibrary(fontawesome)\ntmp <- mtcars[1:4, 1:4]\ntmp[1, 1] <- paste(fa(\"r-project\"), \"for statistics\")\ntt(tmp)\n\n \n\n \n \n \n tinytable_rraqg5hkag3f98cmpjon\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n \n \n \n \n \n for statistics\n 6\n 160\n 110\n \n \n 21\n 6\n 160\n 110\n \n \n 22.8\n 4\n 108\n 93\n \n \n 21.4\n 6\n 258\n 110", + "text": "Fontawesome\nWe can use the fontawesome package to include fancy icons in HTML tables:\n\nlibrary(fontawesome)\ntmp <- mtcars[1:4, 1:4]\ntmp[1, 1] <- paste(fa(\"r-project\"), \"for statistics\")\ntt(tmp)\n\n \n\n \n \n \n tinytable_vf0wp8ruz7juyn4xrfkq\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n \n \n \n \n \n for statistics\n 6\n 160\n 110\n \n \n 21\n 6\n 160\n 110\n \n \n 22.8\n 4\n 108\n 93\n \n \n 21.4\n 6\n 258\n 110", "crumbs": [ "Tutorial (HTML)" ] @@ -506,7 +516,7 @@ "href": "vignettes/tutorial.html#rows", "title": "tinytable", "section": "Rows", - "text": "Rows\nThe i argument accepts a named list of integers. The numbers identify the positions where row group labels are to be inserted. The names includes the text that should be inserted:\n\ndat <- mtcars[1:9, 1:8]\n\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 tinytable_pxh4yanq8dy768trojpm\n \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\n 6\n 160\n 110\n 3.9\n 2.62\n 16.46\n 0\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n 17.02\n 0\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\n 18.61\n 1\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n 3.215\n 19.44\n 1\n \n \n 18.7\n 8\n 360\n 175\n 3.15\n 3.44\n 17.02\n 0\n \n \n 18.1\n 6\n 225\n 105\n 2.76\n 3.46\n 20.22\n 1\n \n \n 14.3\n 8\n 360\n 245\n 3.21\n 3.57\n 15.84\n 0\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n 3.19\n 20\n 1\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n 3.15\n 22.9\n 1\n \n \n \n \n\n \n\n \n\n\n\n\nWe can style group rows in the same way as regular rows:\n\ntt(dat) |> \n group_tt(\n i = list(\n \"I like (fake) hamburgers\" = 3,\n \"She prefers halloumi\" = 4,\n \"They love tofu\" = 7)) |>\n style_tt(\n i = c(3, 5, 9),\n align = \"c\",\n color = \"white\",\n background = \"gray\",\n bold = TRUE)\n\n \n\n \n \n \n tinytable_mn1mcalq2rm8ff48r8q7\n \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\n 6\n 160\n 110\n 3.9\n 2.62\n 16.46\n 0\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n 17.02\n 0\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\n 18.61\n 1\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n 3.215\n 19.44\n 1\n \n \n 18.7\n 8\n 360\n 175\n 3.15\n 3.44\n 17.02\n 0\n \n \n 18.1\n 6\n 225\n 105\n 2.76\n 3.46\n 20.22\n 1\n \n \n 14.3\n 8\n 360\n 245\n 3.21\n 3.57\n 15.84\n 0\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n 3.19\n 20\n 1\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n 3.15\n 22.9\n 1", + "text": "Rows\nThe i argument accepts a named list of integers. The numbers identify the positions where row group labels are to be inserted. The names includes the text that should be inserted:\n\ndat <- mtcars[1:9, 1:8]\n\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 tinytable_jl2i13peuh21eih2v55k\n \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\n 6\n 160\n 110\n 3.9\n 2.62\n 16.46\n 0\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n 17.02\n 0\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\n 18.61\n 1\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n 3.215\n 19.44\n 1\n \n \n 18.7\n 8\n 360\n 175\n 3.15\n 3.44\n 17.02\n 0\n \n \n 18.1\n 6\n 225\n 105\n 2.76\n 3.46\n 20.22\n 1\n \n \n 14.3\n 8\n 360\n 245\n 3.21\n 3.57\n 15.84\n 0\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n 3.19\n 20\n 1\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n 3.15\n 22.9\n 1\n \n \n \n \n\n \n\n \n\n\n\n\nWe can style group rows in the same way as regular rows:\n\ntt(dat) |> \n group_tt(\n i = list(\n \"I like (fake) hamburgers\" = 3,\n \"She prefers halloumi\" = 4,\n \"They love tofu\" = 7)) |>\n style_tt(\n i = c(3, 5, 9),\n align = \"c\",\n color = \"white\",\n background = \"gray\",\n bold = TRUE)\n\n \n\n \n \n \n tinytable_tek3ae3qab31otpt7g3f\n \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\n 6\n 160\n 110\n 3.9\n 2.62\n 16.46\n 0\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n 17.02\n 0\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\n 18.61\n 1\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n 3.215\n 19.44\n 1\n \n \n 18.7\n 8\n 360\n 175\n 3.15\n 3.44\n 17.02\n 0\n \n \n 18.1\n 6\n 225\n 105\n 2.76\n 3.46\n 20.22\n 1\n \n \n 14.3\n 8\n 360\n 245\n 3.21\n 3.57\n 15.84\n 0\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n 3.19\n 20\n 1\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n 3.15\n 22.9\n 1", "crumbs": [ "Tutorial (HTML)" ] @@ -516,7 +526,7 @@ "href": "vignettes/tutorial.html#columns", "title": "tinytable", "section": "Columns", - "text": "Columns\nThe syntax for column groups is very similar, but we use the j argument instead. The named list specifies the labels to appear in column-spanning labels, and the values must be a vector of consecutive and non-overlapping integers that indicate which columns are associated to which labels:\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 tinytable_i7lze4vpjcbopl3qrw2i\n \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\n 6\n 160\n 110\n 3.9\n 2.62\n 16.46\n 0\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n 17.02\n 0\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\n 18.61\n 1\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n 3.215\n 19.44\n 1\n \n \n 18.7\n 8\n 360\n 175\n 3.15\n 3.44\n 17.02\n 0\n \n \n 18.1\n 6\n 225\n 105\n 2.76\n 3.46\n 20.22\n 1\n \n \n 14.3\n 8\n 360\n 245\n 3.21\n 3.57\n 15.84\n 0\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n 3.19\n 20\n 1\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n 3.15\n 22.9\n 1\n \n \n \n \n\n \n\n \n\n\n\n\nHere is a table with both row and column headers, as well as some styling:\n\ndat <- mtcars[1:9, 1:8]\ntt(dat) |> \n group_tt(\n i = list(\"I like (fake) hamburgers\" = 3,\n \"She prefers halloumi\" = 4,\n \"They love tofu\" = 7),\n j = list(\"Hamburgers\" = 1:3,\n \"Halloumi\" = 4:5,\n \"Tofu\" = 7)) |>\n style_tt(\n i = c(3, 5, 9),\n align = \"c\",\n background = \"teal\",\n color = \"white\") |>\n style_tt(i = -1, color = \"teal\")\n\n \n\n \n \n \n tinytable_ku363h2z8cy3j17wavr6\n \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\n 6\n 160\n 110\n 3.9\n 2.62\n 16.46\n 0\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n 17.02\n 0\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\n 18.61\n 1\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n 3.215\n 19.44\n 1\n \n \n 18.7\n 8\n 360\n 175\n 3.15\n 3.44\n 17.02\n 0\n \n \n 18.1\n 6\n 225\n 105\n 2.76\n 3.46\n 20.22\n 1\n \n \n 14.3\n 8\n 360\n 245\n 3.21\n 3.57\n 15.84\n 0\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n 3.19\n 20\n 1\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n 3.15\n 22.9\n 1\n \n \n \n \n\n \n\n \n\n\n\n\nWe can also stack several extra headers on top of one another:\n\ntt(x) |>\n group_tt(j = list(\"Foo\" = 2:3, \"Bar\" = 5)) |>\n group_tt(j = list(\"Hello\" = 1:2, \"World\" = 4:5))\n\n \n\n \n \n \n tinytable_jm970uspf941ib4ojqm2\n \n \n \n \n \n\n \n \n \n \n\nHello\n \nWorld\n\n\n \nFoo\n \nBar\n\n \n \n mpg\n cyl\n disp\n hp\n drat\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08", + "text": "Columns\nThe syntax for column groups is very similar, but we use the j argument instead. The named list specifies the labels to appear in column-spanning labels, and the values must be a vector of consecutive and non-overlapping integers that indicate which columns are associated to which labels:\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 tinytable_z5o0p4xmovv5jipuf35v\n \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\n 6\n 160\n 110\n 3.9\n 2.62\n 16.46\n 0\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n 17.02\n 0\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\n 18.61\n 1\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n 3.215\n 19.44\n 1\n \n \n 18.7\n 8\n 360\n 175\n 3.15\n 3.44\n 17.02\n 0\n \n \n 18.1\n 6\n 225\n 105\n 2.76\n 3.46\n 20.22\n 1\n \n \n 14.3\n 8\n 360\n 245\n 3.21\n 3.57\n 15.84\n 0\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n 3.19\n 20\n 1\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n 3.15\n 22.9\n 1\n \n \n \n \n\n \n\n \n\n\n\n\nHere is a table with both row and column headers, as well as some styling:\n\ndat <- mtcars[1:9, 1:8]\ntt(dat) |> \n group_tt(\n i = list(\"I like (fake) hamburgers\" = 3,\n \"She prefers halloumi\" = 4,\n \"They love tofu\" = 7),\n j = list(\"Hamburgers\" = 1:3,\n \"Halloumi\" = 4:5,\n \"Tofu\" = 7)) |>\n style_tt(\n i = c(3, 5, 9),\n align = \"c\",\n background = \"teal\",\n color = \"white\") |>\n style_tt(i = -1, color = \"teal\")\n\n \n\n \n \n \n tinytable_kxppoburibdsh6k5tm1x\n \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\n 6\n 160\n 110\n 3.9\n 2.62\n 16.46\n 0\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n 17.02\n 0\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\n 18.61\n 1\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n 3.215\n 19.44\n 1\n \n \n 18.7\n 8\n 360\n 175\n 3.15\n 3.44\n 17.02\n 0\n \n \n 18.1\n 6\n 225\n 105\n 2.76\n 3.46\n 20.22\n 1\n \n \n 14.3\n 8\n 360\n 245\n 3.21\n 3.57\n 15.84\n 0\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n 3.19\n 20\n 1\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n 3.15\n 22.9\n 1\n \n \n \n \n\n \n\n \n\n\n\n\nWe can also stack several extra headers on top of one another:\n\ntt(x) |>\n group_tt(j = list(\"Foo\" = 2:3, \"Bar\" = 5)) |>\n group_tt(j = list(\"Hello\" = 1:2, \"World\" = 4:5))\n\n \n\n \n \n \n tinytable_plmxkkhdgzhsg0xmyo88\n \n \n \n \n \n\n \n \n \n \n\nHello\n \nWorld\n\n\n \nFoo\n \nBar\n\n \n \n mpg\n cyl\n disp\n hp\n drat\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08", "crumbs": [ "Tutorial (HTML)" ] @@ -526,7 +536,7 @@ "href": "vignettes/tutorial.html#bootstrap-classes", "title": "tinytable", "section": "Bootstrap classes", - "text": "Bootstrap classes\nThe Bootstrap framework provides a number of built-in themes to style tables, using “classes.” To use them, we call style_tt() with the bootstrap_class argument. A list of available Bootstrap classes can be found here: https://getbootstrap.com/docs/5.3/content/tables/\nFor example, to produce a “bordered” table, we use the table-bordered class:\n\ntt(x) |> style_tt(bootstrap_class = \"table table-bordered\")\n\n \n\n \n \n \n tinytable_d29ufjgsvaijs4woczzr\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nWe can also combine several Bootstrap classes. Here, we get a table with the “hover” feature:\n\ntt(x) |> style_tt(\n bootstrap_class = \"table table-hover\")\n\n \n\n \n \n \n tinytable_b5kbdlkljqtstu36t2cd\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08", + "text": "Bootstrap classes\nThe Bootstrap framework provides a number of built-in themes to style tables, using “classes.” To use them, we call style_tt() with the bootstrap_class argument. A list of available Bootstrap classes can be found here: https://getbootstrap.com/docs/5.3/content/tables/\nFor example, to produce a “bordered” table, we use the table-bordered class:\n\ntt(x) |> style_tt(bootstrap_class = \"table table-bordered\")\n\n \n\n \n \n \n tinytable_tgybh1i9o5o0ql3aiebs\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n\n\n\nWe can also combine several Bootstrap classes. Here, we get a table with the “hover” feature:\n\ntt(x) |> style_tt(\n bootstrap_class = \"table table-hover\")\n\n \n\n \n \n \n tinytable_pysacal7ucqh7omhgwc0\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08", "crumbs": [ "Tutorial (HTML)" ] @@ -536,7 +546,7 @@ "href": "vignettes/tutorial.html#css-declarations", "title": "tinytable", "section": "CSS declarations", - "text": "CSS declarations\nThe style_tt() function allows us to declare CSS properties and values for individual cells, columns, or rows of a table. For example, if we want to make the first column bold, we could do:\n\ntt(x) |>\n style_tt(j = 1, bootstrap_css = \"font-weight: bold; color: red;\")\n\n \n\n \n \n \n tinytable_65jmmxxamexll9ph5e7m\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08", + "text": "CSS declarations\nThe style_tt() function allows us to declare CSS properties and values for individual cells, columns, or rows of a table. For example, if we want to make the first column bold, we could do:\n\ntt(x) |>\n style_tt(j = 1, bootstrap_css = \"font-weight: bold; color: red;\")\n\n \n\n \n \n \n tinytable_3lxidisb4q856u1srvkc\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08", "crumbs": [ "Tutorial (HTML)" ] @@ -546,7 +556,7 @@ "href": "vignettes/tutorial.html#css-rules", "title": "tinytable", "section": "CSS rules", - "text": "CSS rules\nFor more extensive customization, we can use complete CSS rules. In this example, we define several rules that apply to a new class called mytable. Then, we use the theme argument of the tt() function to ensure that our tiny table is of class mytable. Finally, we call style_bootstrap() to apply the rules with the bootstrap_css_rule argument.\n\ncss_rule <- \"\n.mytable {\n background: linear-gradient(45deg, #EA8D8D, #A890FE);\n width: 600px;\n border-collapse: collapse;\n overflow: hidden;\n box-shadow: 0 0 20px rgba(0,0,0,0.1);\n}\n\n.mytable th,\n.mytable td {\n padding: 5px;\n background-color: rgba(255,255,255,0.2);\n color: #fff;\n}\n\n.mytable tbody tr:hover {\n background-color: rgba(255,255,255,0.3);\n}\n\n.mytable tbody td:hover:before {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n top: -9999px;\n bottom: -9999px;\n background-color: rgba(255,255,255,0.2);\n z-index: -1;\n}\n\"\n\ntt(x, width = 2/3) |> \n style_tt(\n j = 1:5,\n align = \"ccccc\",\n bootstrap_class = \"table mytable\",\n bootstrap_css_rule = css_rule)\n\n \n\n \n \n \n tinytable_d7a5phs5iq1p2ty6t1oo\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08", + "text": "CSS rules\nFor more extensive customization, we can use complete CSS rules. In this example, we define several rules that apply to a new class called mytable. Then, we use the theme argument of the tt() function to ensure that our tiny table is of class mytable. Finally, we call style_bootstrap() to apply the rules with the bootstrap_css_rule argument.\n\ncss_rule <- \"\n.mytable {\n background: linear-gradient(45deg, #EA8D8D, #A890FE);\n width: 600px;\n border-collapse: collapse;\n overflow: hidden;\n box-shadow: 0 0 20px rgba(0,0,0,0.1);\n}\n\n.mytable th,\n.mytable td {\n padding: 5px;\n background-color: rgba(255,255,255,0.2);\n color: #fff;\n}\n\n.mytable tbody tr:hover {\n background-color: rgba(255,255,255,0.3);\n}\n\n.mytable tbody td:hover:before {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n top: -9999px;\n bottom: -9999px;\n background-color: rgba(255,255,255,0.2);\n z-index: -1;\n}\n\"\n\ntt(x, width = 2/3) |> \n style_tt(\n j = 1:5,\n align = \"ccccc\",\n bootstrap_class = \"table mytable\",\n bootstrap_css_rule = css_rule)\n\n \n\n \n \n \n tinytable_evjx9mcvfc2rycvfyif7\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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08", "crumbs": [ "Tutorial (HTML)" ] @@ -586,7 +596,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 named list of row indices to group. The names of the list will be used as labels.\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\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 tinytable_afygyy2qhh32uv77cbgj\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n 18.7\n 8\n 360\n 175\n 3.15\n \n \n 18.1\n 6\n 225\n 105\n 2.76\n \n \n 14.3\n 8\n 360\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", + "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 named list of row indices to group. The names of the list will be used as labels.\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\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 tinytable_81min4hzkm8zj2ctli3a\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n 18.7\n 8\n 360\n 175\n 3.15\n \n \n 18.1\n 6\n 225\n 105\n 2.76\n \n \n 14.3\n 8\n 360\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", "crumbs": [ "Tutorial (HTML)", "Functions", @@ -598,7 +608,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 named list of row indices to group. The names of the list will be used as labels.\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\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 tinytable_afygyy2qhh32uv77cbgj\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n 18.7\n 8\n 360\n 175\n 3.15\n \n \n 18.1\n 6\n 225\n 105\n 2.76\n \n \n 14.3\n 8\n 360\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", + "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 named list of row indices to group. The names of the list will be used as labels.\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\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 tinytable_81min4hzkm8zj2ctli3a\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n 18.7\n 8\n 360\n 175\n 3.15\n \n \n 18.1\n 6\n 225\n 105\n 2.76\n \n \n 14.3\n 8\n 360\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", "crumbs": [ "Tutorial (HTML)", "Functions", diff --git a/vignettes/tinytable_assets/id14ykfb8qacxjxcutel3c.png b/vignettes/tinytable_assets/id14ykfb8qacxjxcutel3c.png new file mode 100644 index 0000000000000000000000000000000000000000..d740b6f7d69d8f49d4fd34c25be5b22bb7057d83 GIT binary patch literal 12160 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 literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/id5tuorfqsinywfmmza0jf.png b/vignettes/tinytable_assets/id5tuorfqsinywfmmza0jf.png new file mode 100644 index 0000000000000000000000000000000000000000..cba1148dde2cbac22768179b25d24971c2b81b77 GIT binary patch literal 11912 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 MEvX;@{$?2Te^F4R`v3p{ literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/id96k9x8mlj2qxqixn3txx.png b/vignettes/tinytable_assets/id96k9x8mlj2qxqixn3txx.png new file mode 100644 index 0000000000000000000000000000000000000000..b1fa12f84a2b9a4fe2b8151c82bfe8fd367ffda8 GIT binary patch literal 5090 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 literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/idc3o0qzhqxqr5yg6bo6oi.png b/vignettes/tinytable_assets/idc3o0qzhqxqr5yg6bo6oi.png new file mode 100644 index 0000000000000000000000000000000000000000..7920545687b841d219a1aea7b9b553a2e9f9486f GIT binary patch literal 11908 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 AUjP6A literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/idc59pdgtr1mw8a64187jq.png b/vignettes/tinytable_assets/idc59pdgtr1mw8a64187jq.png new file mode 100644 index 0000000000000000000000000000000000000000..82861ab5fd3e952e89b50c9a7cd62d32927913c0 GIT binary patch literal 529 zcmeAS@N?(olHy`uVBq!ia0y~yVAKJ!Q#hD`B=`NlpMaE5fKP}kkp92_%Krl={~tX2 z|G=sL2TmU^d+!JoWh)8t3ufT4bV~i7@VKN3D8gCb5n0T@pr;JNj1^1m%Ydd%_H=O! zshIQj*6F^c01=l!mp}jG^Qu!kF6`re5q`&1Wlq!Pl#<6LZ_n05r{0VG!pF%iB&MR{ z5iwzdLZaiLrWRHV0ZaDRM(c|#zsvsjId`yX@_S>vs$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/idc5ar7amygy1gez234g64.png b/vignettes/tinytable_assets/idc5ar7amygy1gez234g64.png new file mode 100644 index 0000000000000000000000000000000000000000..d7222e0ff7be019556caf27e3f140f3db2b94f13 GIT binary patch literal 8399 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 C(&yj+ literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/idgnn2b1ln9is3fwf869dm.png b/vignettes/tinytable_assets/idgnn2b1ln9is3fwf869dm.png new file mode 100644 index 0000000000000000000000000000000000000000..0e9656bb267d9baf153edd9f92ec0ccfba89d90b GIT binary patch literal 1127 zcmeAS@N?(olHy`uVBq!ia0y~yV1B{C!05}t3=~;nymb+fQVH-0an+J$aM59?uCDIv z?Ck35nlWR>%$YOir!%~J_wN1s_y3nN{Qv*|+%+Q;paK6pT^vIy=DfXpoA;1|0LwvE z=4TV@_boZVe&W$Ct)_`?w)zQ`#a|d6d~e}nbZTc<=-hBY(cy)FLJ5a}6$^(f6HvIA zJ?#4oOUCZmH|HOCRJQQ&FWgFTm@q1g8LFdUG8!f**$hX5_m;?5b_h`Y&g2R`A> zd7JP4JNUEeOOt=hd3XIEC!T$N|8w$r{e1iB+n=a+%-;hnIT$=${an^LB{Ts5AWTbI literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/idjhqoh87409p0dv0evb78.png b/vignettes/tinytable_assets/idjhqoh87409p0dv0evb78.png new file mode 100644 index 0000000000000000000000000000000000000000..0ba387fc3e1135765e809dcc4044514a6a01b861 GIT binary patch literal 2564 zcmeAS@N?(olHy`uVBq!ia0y~yV1B{C!05}t3=~;nymb+f`W)aB;>ya#&dSct$<4#f z%g4>f&nF}-AS@~%A}TB)B_XFEDX%E4q#~!PA+N5f00bIZikjNWItFU`#+oJ;+GbXI zR1_q8Zo-U3d6?5KRZr`SwD%fz* zaDkHB97FA{q;rvhXBd6<{J;Ez=}S~_Z~XmT&)@uIy85-e*8d(`-o44~{}>jim+WA6 zYPVLvNv;3$`>gk$*9*Tt2^6S$x^?;absru%zdyNH;mfJj>-QJ7F6ZB?-rsaV+bLae zVR*|qC8zZqb6s2F1g*L`_9~T#30Aqj&{6u*bs^H_h3LY~9is|IgNNcop~v;td40^I zcK*L}_EzKfCMjh5g^Vy)XTE095>C zlIHsTzb+gv+zib2zvf&p1{MLeelH|}#etprmmXk_pD$eH2F(5EIc=4JCBgHSd7wxs zb~+C%A--5HOdmAb(t=;)|9vTRUj*n2`JKKC|G)Vhzxxn3(EY!Zw`+cx|L4b~>|ZN@ z9{6{HbC5Zm)bKr1-1={OeB2|`h3D^vyx9Nqi|O=l&#hM1&eQ&KzwYDi@E;u)p66+O ziLd=L$@%xO@2}THD^lC;2X9`oW3ST;@I@GuzL_B*01O89mbxZj z+Ng7Qp$lq`=g(iUV#UgpE7z}IzhT3MW5h! zK7Rc8<;$0^U%&qT{rk_KKmY&#|7&pk76Sv@Vow*xkcv5PFMCcBbrWzoc+F;kAg9W^ z`oOmrxYmfb{JlQ+o%#x|?(bh1E56Q?`^%8v|DvGb!b66IhZ&vPnOpeSIb`_+tYj2Q zEF4}G9PsAf#+)pOycz~CS% z!d|@pzv9>5i>CE$7hVE+`Eqy9bgPtD%@h4~zCZ7otB{qf(|o~EVu**q&tJ1w%YJ+^vl-C-s8ph!5~=TR2T97ug*f@Pj{={r*qB~ zSh${Jlo$;InxumX>+9D1`gf84#}@lmzV-K|7ao4C4lc=Y7V%_D#Or;Dm-{RFAh_;t w(!%-*Zj--X*R;$RxB9S%6R8HlV*CgBO>x<$zvO2L0xLiUPgg&ebxsLQ0LD)B!TFMbm9UUuHtXR2n<@)vOH*DCjd-v`=d-fbSaNyXnV>fQxxOeZ~{rmUdy?giJ!-tO_ zKmPpr^Z)<(MX%kv!j8ZAa6i=2!PUfbf`jl( zv5=3CYkx{t+?)P}pW&Ram5D-0hQo^s4Hp(NE_7ygYG-TVW*60kD)Q1PO^?(dR+ zr|K;4eJXpgzxL;vf0O@~?0Ne3LjBoyr86&Zs(zW(;-|6jx=M)?=U%mi!d@>-Ip+pA zt@nJyqrDXZe{!?^K_3FM^4?Fvv7O4;IG=7vyH!e z({tLdUtQdG@1E<6@2UCcF5KSD@ps>wvyxTS;tTIj-)rfd|6b|KZ=lW>Z)02P;=euP z*}J#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/idn1jajmrxxxpwn3f6282s.png b/vignettes/tinytable_assets/idn1jajmrxxxpwn3f6282s.png new file mode 100644 index 0000000000000000000000000000000000000000..8ec24e8df6a4ef7a451ef82070c67811f1038972 GIT binary patch literal 2191 zcmeAS@N?(olHy`uVBq!ia0y~yV1B{C!05}t3=~;nymb+fnik*_;>ya#&cVga$-~RV z%g4>fFDxM`A}J-Mpd_WJEUly>qpYT+rK6&2psHu6ZfK%uVxetjrDtVpWMpLJ;p^bw z;1(Y19h)3eT%DMhm|EACR^OhUo}Sa*Uo&e-{k)YO9UYUmA6~Iy#mbc{*WP%xe*O9l z8#e6Ty?f7|JqHdPICkvVjT<-a-Me@H{{46F-hKG+;p4}TKY#xG|NsBWJ@?)-FtBg& zba4!+nDh2>cv(uQfJ?fQoE)-#4~{wifBta6zq|V^^G@fs|9igq zck{1`->-J)ZkPQfKmSiffRnn{i@7a+Q!ZF@&ed30E@Tzx^j@W8QOiBg7cQK8Ctv6k zs#0Gltop@oRN?Rqo|lK?`Cfg0YyRBR>HU{y>Fi&xeVhGRWnp>MM%xEb`rGc$Q6Irc zVVB02`1`xFRFZrj-_yfxnySGovZ-pq7Umw{SXN4OSw8<{K5fkCt9aNECI?(APzU1+s?zhUA2 zeZVZ4&mH^X^Jw^ylYIL7?QQo1GxNM${TeI>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/ido1lisp7q9vgo7ke2nlds.png b/vignettes/tinytable_assets/ido1lisp7q9vgo7ke2nlds.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/idtf2c51zodlzn18b5900w.png b/vignettes/tinytable_assets/idtf2c51zodlzn18b5900w.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/idtlwjltkot1ca75hdio5c.png b/vignettes/tinytable_assets/idtlwjltkot1ca75hdio5c.png new file mode 100644 index 0000000000000000000000000000000000000000..d2d116439b9365acc206fdfeadf4ba48bfff752d GIT binary patch literal 5107 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 literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/idu0c52pba1cx8scwzl7mb.png b/vignettes/tinytable_assets/idu0c52pba1cx8scwzl7mb.png new file mode 100644 index 0000000000000000000000000000000000000000..14c1e9a362982b11fd11552c988609d29d291ccd GIT binary patch literal 10160 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 literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/idw4ci617og7pz7p54kb0i.png b/vignettes/tinytable_assets/idw4ci617og7pz7p54kb0i.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/idylvd00xop8hec9rc9yok.png b/vignettes/tinytable_assets/idylvd00xop8hec9rc9yok.png new file mode 100644 index 0000000000000000000000000000000000000000..bfc66e8f24b7b040ad53a64509d4e0f01cd98cf4 GIT binary patch literal 11922 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 literal 0 HcmV?d00001 diff --git a/vignettes/tutorial.html b/vignettes/tutorial.html index 372d4260..201d3b4c 100644 --- a/vignettes/tutorial.html +++ b/vignettes/tutorial.html @@ -295,6 +295,7 @@

On this page

  • Conditional styling
  • Vectorized styling (heatmaps)
  • Lines (borders)
  • +
  • Markdown and Word
  • Plots and images
      @@ -380,9 +381,9 @@

      Tiny Tables

      - tinytable_rt3evi1kese888fujhtd + tinytable_r1x0kfkcfj16lsr60bl1 @@ -400,7 +401,7 @@

      Tiny Tables

      -
  • +
    @@ -446,12 +447,12 @@

    Tiny Tables

    @@ -501,9 +502,9 @@

    Themes

    - tinytable_bqljszh8qmw3eof00ylh + tinytable_eqdyk2upn5mahyplznte @@ -521,7 +522,7 @@

    Themes

    -
    +
    @@ -567,12 +568,12 @@

    Themes

    @@ -634,9 +635,9 @@

    Themes

    - tinytable_hpqqjj6i7wtjp5eaf3ai + tinytable_vsaj8o08nfgvxoohf3b4 @@ -654,7 +655,7 @@

    Themes

    -
    +
    @@ -700,12 +701,12 @@

    Themes

    @@ -767,9 +768,9 @@

    Themes

    - tinytable_1umvkqzj3edhpj1w4vps + tinytable_zjw9k8ezqfwzy4w4ushp @@ -787,7 +788,7 @@

    Themes

    -
    +
    @@ -833,12 +834,12 @@

    Themes

    @@ -904,9 +905,9 @@

    Width

    - tinytable_gx1u4c8wi8tsdlcf9m26 + tinytable_h9y7vb0xdh7x2u1gcx1z @@ -924,7 +925,7 @@

    Width

    -
    +
    @@ -970,12 +971,12 @@

    Width

    @@ -1022,9 +1023,9 @@

    Width

    - tinytable_6y3is4ck09p42a2ugncs + tinytable_i4jt8s0k1ltxy0vbtpef @@ -1042,7 +1043,7 @@

    Width

    -
    +
    @@ -1088,12 +1089,12 @@

    Width

    @@ -1161,9 +1162,9 @@

    Captions and - tinytable_6sdx3xfomm5dkstcxaia + tinytable_5glbbr71tfu5zdlh66h4 @@ -1181,7 +1182,7 @@

    Captions and
    -

    +
    @@ -1222,12 +1223,12 @@

    Captions and @@ -1292,9 +1293,9 @@

    Footnotes

    - tinytable_k6391u9rjpqmhdhbwkn1 + tinytable_p9vlwqkw7f9fk3yqsl7z @@ -1312,7 +1313,7 @@

    Footnotes

    -
    +
    @@ -1331,12 +1332,12 @@

    Footnotes

    @@ -1378,9 +1379,9 @@

    Footnotes

    - tinytable_wcuhlve4eloxys2ah1j4 + tinytable_6kalsh8afexo4bjo98k7 @@ -1398,7 +1399,7 @@

    Footnotes

    -
    +
    @@ -1417,12 +1418,12 @@

    Footnotes

    @@ -1468,9 +1469,9 @@

    Footnotes

    - tinytable_8lw47t2jkzx9f919gxxy + tinytable_ss7lsw2awaivng5h63r6 @@ -1488,7 +1489,7 @@

    Footnotes

    -
    +
    @@ -1535,12 +1536,12 @@

    Footnotes

    @@ -1592,9 +1593,9 @@

    Footnotes

    - tinytable_j5mrbr2mpewcdiaruz4l + tinytable_nk3oxmolqo9x137mzs61 @@ -1612,7 +1613,7 @@

    Footnotes

    -
    +
    @@ -1659,12 +1660,12 @@

    Footnotes

    @@ -1715,9 +1716,9 @@

    Line breaks - tinytable_unhqa6o8gs3euqtysfdy + tinytable_n7oscn0wros58trtqdk0 @@ -1735,7 +1736,7 @@

    Line breaks
    -

    +

    A full width table with wrapped text.

    @@ -1754,12 +1755,12 @@

    Line breaks @@ -1808,9 +1809,9 @@

    Line breaks - tinytable_60juirekbnx31r1zmu8x + tinytable_tpija6dl7817iavsz7fk @@ -1828,7 +1829,7 @@

    Line breaks
    -

    A full width table with wrapped text.

    +
    @@ -1847,12 +1848,12 @@

    Line breaks @@ -1904,10 +1905,10 @@

    Math

    - tinytable_pjtbbzi8zo1al51j0k71 + tinytable_yc0oa3kc5fbsesqmk2bu @@ -1925,7 +1926,7 @@

    Math

    -
    +
    @@ -1945,12 +1946,12 @@

    Math

    @@ -2000,9 +2001,9 @@

    Line break - tinytable_6duficf1dzyehovqidwm + tinytable_15fvb0sw14njphjlsvp6 @@ -2020,7 +2021,7 @@

    Line break
    -

    +

    A full width table with wrapped text.

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

    Line break @@ -2093,9 +2094,9 @@

    Line break - tinytable_p4lp602l9fui5kwpt7hn + tinytable_xwkmetcuzu328miggzct @@ -2113,7 +2114,7 @@

    Line break
    -

    A full width table with wrapped text.

    +
    @@ -2132,12 +2133,12 @@

    Line break @@ -2271,9 +2272,9 @@

    Numbers, dates, - tinytable_cudz8wi6bzrh8fdpokpn + tinytable_8ng9i7xheuga6fxoyc8a @@ -2291,7 +2292,7 @@

    Numbers, dates,
    -

    +
    @@ -2306,19 +2307,19 @@

    Numbers, dates,

    - + - + - + @@ -2326,12 +2327,12 @@

    Numbers, dates, @@ -2388,9 +2389,9 @@

    Numbers, dates, - tinytable_a0lixg912josbya4hnhw + tinytable_z74jqmxj4z6uzmwhjfxc @@ -2408,7 +2409,7 @@

    Numbers, dates,
    -

    143002 1.431970-02-131972-09-23 True
    201399 201.401970-12-261972-05-25 True
    100188 0.131970-02-151970-04-27 False
    +
    @@ -2423,19 +2424,19 @@

    Numbers, dates,

    - + - + - + @@ -2443,12 +2444,12 @@

    Numbers, dates, @@ -2502,9 +2503,9 @@

    Numbers, dates, - tinytable_ceph7mzo79sngk9rdmbt + tinytable_0tevyke8emqbm5kphdqy @@ -2522,7 +2523,7 @@

    Numbers, dates,
    -

    143 002,21 1.4February 13 1970September 23 1972 True
    201 399,18 201.4December 26 1970May 25 1972 True
    100 188,39 0.1February 15 1970April 27 1970 False
    +
    @@ -2558,12 +2559,12 @@

    Numbers, dates, @@ -2632,9 +2633,9 @@

    Escape special c - tinytable_m295tpwmg3nfy0g14uel + tinytable_jo0pot1sdp7kmvywtril @@ -2652,7 +2653,7 @@

    Escape special c
    -

    +
    @@ -2679,12 +2680,12 @@

    Escape special c @@ -2746,10 +2747,10 @@

    Markdown

    - tinytable_jz5fv5mbzcprthc5skbp + tinytable_cbthy0hmsb07gqso7v6v @@ -2767,7 +2768,7 @@

    Markdown

    -
    +
    @@ -2787,12 +2788,12 @@

    Markdown

    @@ -2869,9 +2870,9 @@

    Markdown

    - tinytable_gx8eg147skgepmykk4cw + tinytable_1sskv64b2qdz2kngx133 @@ -2889,7 +2890,7 @@

    Markdown

    -
    +

    Vincent sometimes contributes to these R packages.

    @@ -2948,12 +2949,12 @@

    Markdown

    @@ -3031,10 +3032,10 @@

    Cells, rows, columns - tinytable_955hx7ih4tk2oyuszluh + tinytable_dxpyf1iblh40km3pendm @@ -3052,7 +3053,7 @@

    Cells, rows, columns -

    Vincent sometimes contributes to these R packages.

    +
    @@ -3098,12 +3099,12 @@

    Cells, rows, columns @@ -3157,10 +3158,10 @@

    Cells, rows, columns - tinytable_4nohi9892mphq2d96rng + tinytable_780wjykr8xhrz5og26df @@ -3178,7 +3179,7 @@

    Cells, rows, columns -

    +
    @@ -3224,12 +3225,12 @@

    Cells, rows, columns @@ -3283,10 +3284,10 @@

    Cells, rows, columns - tinytable_wn9idqanqlvbfm6e1n16 + tinytable_beskgscra6tekpvcab3a @@ -3304,7 +3305,7 @@

    Cells, rows, columns -

    +
    @@ -3350,12 +3351,12 @@

    Cells, rows, columns @@ -3423,10 +3424,10 @@

    Cells, rows, columns - tinytable_qinffm7jkn5k1o6r2wee + tinytable_ul90qrcxgsy3jbobzu94 @@ -3444,7 +3445,7 @@

    Cells, rows, columns -

    +
    @@ -3490,12 +3491,12 @@

    Cells, rows, columns @@ -3553,10 +3554,10 @@

    Cells, rows, columns - tinytable_yqpx9pgwsgi7uhdaomqm + tinytable_6eni1rrb9a9pvhm3diyz @@ -3574,7 +3575,7 @@

    Cells, rows, columns -

    +
    @@ -3620,12 +3621,12 @@

    Cells, rows, columns @@ -3683,10 +3684,10 @@

    Cells, rows, columns - tinytable_vlnn9hfgxubml1tljjai + tinytable_tb4priaj37hg79ivr5bs @@ -3704,7 +3705,7 @@

    Cells, rows, columns -

    +
    @@ -3750,12 +3751,12 @@

    Cells, rows, columns @@ -3810,10 +3811,10 @@

    Cells, rows, columns - tinytable_edo9g6w6jmj7goncxgtw + tinytable_kjyltc3gac65ygn8s8ir @@ -3831,7 +3832,7 @@

    Cells, rows, columns -

    +
    @@ -3877,12 +3878,12 @@

    Cells, rows, columns @@ -3940,10 +3941,10 @@

    Cells, rows, columns - tinytable_nodt5zjaz12zapcscnqc + tinytable_p1mto43xkmvcvdpvy7hx @@ -3961,7 +3962,7 @@

    Cells, rows, columns -

    +
    @@ -4007,12 +4008,12 @@

    Cells, rows, columns @@ -4077,11 +4078,11 @@

    Cells, rows, columns - tinytable_7j0i6q1crsozr6nsjqha + tinytable_dkurpma9q457as7e3162 @@ -4099,7 +4100,7 @@

    Cells, rows, columns -

    +
    @@ -4145,12 +4146,12 @@

    Cells, rows, columns @@ -4218,10 +4219,10 @@

    Colors

    - tinytable_6ggvak3ks8msum8y4fbm + tinytable_79kmnwtw2voomn36m7g0 @@ -4239,7 +4240,7 @@

    Colors

    -
    +
    @@ -4285,12 +4286,12 @@

    Colors

    @@ -4351,10 +4352,10 @@

    Alignment

    - tinytable_v59qxd8kef3gl2sz2wjk + tinytable_aic00q6deje7tmzm3ire @@ -4372,7 +4373,7 @@

    Alignment

    -
    +
    @@ -4403,12 +4404,12 @@

    Alignment

    @@ -4463,12 +4464,12 @@

    Alignment

    - tinytable_jyrga5caw39sie0225hz + tinytable_giila5s8derbq2lexmhe @@ -4486,7 +4487,7 @@

    Alignment

    -
    +
    @@ -4517,12 +4518,12 @@

    Alignment

    @@ -4583,10 +4584,10 @@

    Fonts

    - tinytable_jxm3uk9hqmzoi215wt50 + tinytable_mdagj64i7mmu661dhdhf @@ -4604,7 +4605,7 @@

    Fonts

    -
    +
    @@ -4650,12 +4651,12 @@

    Fonts

    @@ -4724,10 +4725,10 @@

    Spanning cell - tinytable_ismbljkm1i2rjuht46gd + tinytable_7paomy04oidmkanig3cv @@ -4745,7 +4746,7 @@

    Spanning cell
    -

    +
    @@ -4791,12 +4792,12 @@

    Spanning cell @@ -4846,9 +4847,9 @@

    Spanning cell - tinytable_p18d2bfydi12sfzzw5kg + tinytable_8cj1nllg1u30soo90l19 @@ -4866,7 +4867,7 @@

    Spanning cell
    -

    +
    @@ -4912,12 +4913,12 @@

    Spanning cell @@ -4978,10 +4979,10 @@

    Spanning cell - tinytable_kj4cnh2zi6a4r3jqb3hi + tinytable_prk95yj5jfr4dx8exud8 @@ -4999,7 +5000,7 @@

    Spanning cell
    -

    +
    @@ -5045,12 +5046,12 @@

    Spanning cell @@ -5107,9 +5108,9 @@

    Headers

    - tinytable_a9kxk23igrf8fqr5yjus + tinytable_kq8206ac26jjshbz58z4 @@ -5127,7 +5128,7 @@

    Headers

    -
    +
    @@ -5166,12 +5167,12 @@

    Headers

    @@ -5219,10 +5220,10 @@

    Headers

    - tinytable_27wgxw26e30j68f3th5l + tinytable_j1znwp5kibiqppcqnuvh @@ -5240,7 +5241,7 @@

    Headers

    -
    +
    @@ -5286,12 +5287,12 @@

    Headers

    @@ -5344,10 +5345,10 @@

    Headers

    - tinytable_e3d4ui7we1wqn1la31z0 + tinytable_7m6pjqxwyiluuvt61gg0 @@ -5365,7 +5366,7 @@

    Headers

    -
    +
    @@ -5411,12 +5412,12 @@

    Headers

    @@ -5483,10 +5484,10 @@

    Conditional styling - tinytable_40xkw0jvt6ln5vtx9xz7 + tinytable_s6uk5ojmypbg9es3b6ka @@ -5504,7 +5505,7 @@

    Conditional styling -

    +
    @@ -5570,12 +5571,12 @@

    Conditional styling @@ -5636,13 +5637,13 @@

    Vectorized sty - tinytable_eyruojaj2a89x52mva2s + tinytable_usf8n6ziksz8e4y0wb2f @@ -5660,7 +5661,7 @@

    Vectorized sty
    -

    +
    @@ -5706,12 +5707,12 @@

    Vectorized sty @@ -5783,11 +5784,11 @@

    Vectorized sty - tinytable_vgbd62ywb6vhf7weuqbh + tinytable_egaz0b76xap8ez8v3jop @@ -5805,7 +5806,7 @@

    Vectorized sty
    -

    +
    @@ -5851,12 +5852,12 @@

    Vectorized sty @@ -5933,30 +5934,30 @@

    Vectorized sty - tinytable_qnjztlx4gxvjg6fkgr9d + tinytable_epwyag84itx9cl5qk1si @@ -5974,7 +5975,7 @@

    Vectorized sty
    -

    +
    @@ -6013,12 +6014,12 @@

    Vectorized sty @@ -6143,10 +6144,10 @@

    Lines (borders)

    - tinytable_xl6eqsx1aspu4s54x6e9 + tinytable_5h1wvqonng2b93gghcvx @@ -6164,7 +6165,7 @@

    Lines (borders)

    -
    +
    @@ -6210,12 +6211,12 @@

    Lines (borders)

    @@ -6293,12 +6294,12 @@

    Lines (borders)

    - tinytable_8yct31jk6fkdtss3xs8g + tinytable_it4w9ebgrr0qg38thuz7 @@ -6316,7 +6317,7 @@

    Lines (borders)

    -
    +
    @@ -6362,12 +6363,12 @@

    Lines (borders)

    @@ -6450,10 +6451,10 @@

    Lines (borders)

    - tinytable_r5zkdy2neolueb9mxd03 + tinytable_8f6go5ejve1h5ewnx04f @@ -6471,7 +6472,7 @@

    Lines (borders)

    -
    +
    @@ -6494,12 +6495,12 @@

    Lines (borders)

    + + + +
    +

    Markdown and Word

    +

    Styling for Markdown and Word tables is more limited than for the other formats. In particular:

    +
      +
    • The only supported arguments are: bold, italic, and strikeout.
    • +
    • Headers inserted by group_tt() cannot be styled using the style_tt() function.
    • +
    +

    These limitations are due to the fact that there is no markdown syntax for the other options (ex: colors and background), and that we create Word documents by converting a markdown table to .docx via the Pandoc software.

    +

    One workaround is to style the group headers directly in their definition by using markdown syntax:

    +
    +
    mtcars[1:4, 1:4] |>
    +  tt() |>
    +  group_tt(i = list("*Hello*" = 1, "__World__" = 3)) |>
    +  print("markdown")
    +
    +
    
    ++------+-----+------+-----+
    +| mpg  | cyl | disp | hp  |
    ++======+=====+======+=====+
    +| *Hello*                 |
    ++------+-----+------+-----+
    +| 21   | 6   | 160  | 110 |
    ++------+-----+------+-----+
    +| 21   | 6   | 160  | 110 |
    ++------+-----+------+-----+
    +| __World__               |
    ++------+-----+------+-----+
    +| 22.8 | 4   | 108  | 93  |
    ++------+-----+------+-----+
    +| 21.4 | 6   | 258  | 110 |
    ++------+-----+------+-----+
    @@ -6558,27 +6593,27 @@

    Plots and images

    Inserting images in tables

    To insert images in a table, we use the plot_tt() function. The path_img values must be relative to the main document saved by save_tt() or to the Quarto (or Rmarkdown) document in which the code is executed.

    -
    dat <- data.frame(
    -  Species = c("Spider", "Squirrel"),
    -  Image = ""
    -)
    -
    -img <- c(
    -  "../figures/spider.png",
    -  "../figures/squirrel.png"
    -)
    -
    -tt(dat) |>
    -  plot_tt(j = 2, images = img, height = 3)
    +
    dat <- data.frame(
    +  Species = c("Spider", "Squirrel"),
    +  Image = ""
    +)
    +
    +img <- c(
    +  "../figures/spider.png",
    +  "../figures/squirrel.png"
    +)
    +
    +tt(dat) |>
    +  plot_tt(j = 2, images = img, height = 3)
    - tinytable_phkktgswvuqqtewaxa0q + tinytable_iv1e3t4n68rdi4etz6sl @@ -6596,7 +6631,7 @@

    Inserting image
    -

    +
    @@ -6619,12 +6654,12 @@

    Inserting image @@ -6662,21 +6697,21 @@

    Inserting image

    In HTML tables, it is possible to insert tables directly from a web address, but not in LaTeX.

    -
    dat <- data.frame("R" = "")
    -img <- "https://cran.r-project.org/Rlogo.svg"
    -tt(dat) |>
    -  plot_tt(i = 1, j = 1, images = img, height = 7) |>
    -  style_tt(j = 1, align = "c")
    +
    dat <- data.frame("R" = "")
    +img <- "https://cran.r-project.org/Rlogo.svg"
    +tt(dat) |>
    +  plot_tt(i = 1, j = 1, images = img, height = 7) |>
    +  style_tt(j = 1, align = "c")
    - tinytable_em4zo8ovn9i2g9knac6d + tinytable_1dd0eml81rhj26buhs4l @@ -6694,7 +6729,7 @@

    Inserting image
    -

    +
    @@ -6711,12 +6746,12 @@

    Inserting image @@ -6767,35 +6802,35 @@

    Inline plots

    Built-in plots

    There are several types of inline plots available by default. For example,

    -
    plot_data <- list(mtcars$mpg, mtcars$hp, mtcars$qsec)
    -
    -dat <- data.frame(
    -  Variables = c("mpg", "hp", "qsec"), 
    -  Histogram = "",
    -  Density = "",
    -  Bar = "",
    -  Line = ""
    -)
    -
    -# random data for sparklines
    -lines <- lapply(1:3, \(x) data.frame(x = 1:10, y = rnorm(10)))
    -
    -tt(dat) |>
    -  plot_tt(j = 2, fun = "histogram", data = plot_data) |>
    -  plot_tt(j = 3, fun = "density", data = plot_data, color = "darkgreen") |>
    -  plot_tt(j = 4, fun = "bar", data = list(2, 3, 6), color = "orange") |>
    -  plot_tt(j = 5, fun = "line", data = lines, color = "blue") |>
    -  style_tt(j = 2:5, align = "c")
    +
    plot_data <- list(mtcars$mpg, mtcars$hp, mtcars$qsec)
    +
    +dat <- data.frame(
    +  Variables = c("mpg", "hp", "qsec"), 
    +  Histogram = "",
    +  Density = "",
    +  Bar = "",
    +  Line = ""
    +)
    +
    +# random data for sparklines
    +lines <- lapply(1:3, \(x) data.frame(x = 1:10, y = rnorm(10)))
    +
    +tt(dat) |>
    +  plot_tt(j = 2, fun = "histogram", data = plot_data) |>
    +  plot_tt(j = 3, fun = "density", data = plot_data, color = "darkgreen") |>
    +  plot_tt(j = 4, fun = "bar", data = list(2, 3, 6), color = "orange") |>
    +  plot_tt(j = 5, fun = "line", data = lines, color = "blue") |>
    +  style_tt(j = 2:5, align = "c")
    - tinytable_sjpqk0fbr3g1oxfex3gv + tinytable_yqbibw9bhytojy0fiit9 @@ -6813,7 +6848,7 @@

    Built-in plots

    -
    +
    @@ -6828,36 +6863,36 @@

    Built-in plots

    - - - - + + + + - - - - + + + + - - - - + + + +
    mpg
    hp
    qsec
    @@ -6919,25 +6954,25 @@

    Custom plots: Base To create a custom inline plot using Base R plotting functions, we create a function that returns another function. tinytable will then call that second function internally to generate the plot.

    This is easier than it sounds! For example:

    -
    f <- function(d, ...) {
    -  function() hist(d, axes = FALSE, ann = FALSE, col = "lightblue")
    -}
    -
    -plot_data <- list(mtcars$mpg, mtcars$hp, mtcars$qsec)
    -
    -dat <- data.frame(Variables = c("mpg", "hp", "qsec"), Histogram = "")
    -
    -tt(dat) |>
    -  plot_tt(j = 2, fun = f, data = plot_data)
    +
    f <- function(d, ...) {
    +  function() hist(d, axes = FALSE, ann = FALSE, col = "lightblue")
    +}
    +
    +plot_data <- list(mtcars$mpg, mtcars$hp, mtcars$qsec)
    +
    +dat <- data.frame(Variables = c("mpg", "hp", "qsec"), Histogram = "")
    +
    +tt(dat) |>
    +  plot_tt(j = 2, fun = f, data = plot_data)
    - tinytable_7kwt4rhxsxipcabwup6v + tinytable_gjb8nm5zlwto2uqe3b9j @@ -6955,7 +6990,7 @@

    Custom plots: Base - +
    @@ -6967,27 +7002,27 @@

    Custom plots: Base

    - + - + - +
    mpg
    hp
    qsec

    @@ -7029,30 +7064,30 @@

    Custom plots: g

    Important: Custom functions must have ... as an argument.

    To create a custom inline plot using ggplot2, we create a function that returns a ggplot object:

    -
    library(ggplot2)
    -
    -f <- function(d, color = "black", ...) {
    -  d <- data.frame(x = d)
    -  ggplot(d, aes(x = x)) + 
    -    geom_histogram(bins = 30, color = color, fill = color) +
    -    scale_x_continuous(expand=c(0,0)) +
    -    scale_y_continuous(expand=c(0,0)) +
    -    theme_void()
    -}
    -
    -plot_data <- list(mtcars$mpg, mtcars$hp, mtcars$qsec)
    -
    -tt(dat) |>
    -  plot_tt(j = 2, fun = f, data = plot_data, color = "pink")
    +
    library(ggplot2)
    +
    +f <- function(d, color = "black", ...) {
    +  d <- data.frame(x = d)
    +  ggplot(d, aes(x = x)) + 
    +    geom_histogram(bins = 30, color = color, fill = color) +
    +    scale_x_continuous(expand=c(0,0)) +
    +    scale_y_continuous(expand=c(0,0)) +
    +    theme_void()
    +}
    +
    +plot_data <- list(mtcars$mpg, mtcars$hp, mtcars$qsec)
    +
    +tt(dat) |>
    +  plot_tt(j = 2, fun = f, data = plot_data, color = "pink")
    - tinytable_scsdtp6kipbe2zvnvql0 + tinytable_4ia0zv3ltz5dquxmnngq @@ -7070,7 +7105,7 @@

    Custom plots: g
    - +
    @@ -7082,27 +7117,27 @@

    Custom plots: g

    - + - + - +
    mpg
    hp
    qsec
    @@ -7140,51 +7175,51 @@

    Custom plots: g

    We can insert arbitrarily complex plots by customizing the ggplot2 call:

    -
    penguins <- read.csv(
    -  "https://vincentarelbundock.github.io/Rdatasets/csv/palmerpenguins/penguins.csv",
    -  na.strings = "") |> na.omit()
    -
    -# split data by species
    -dat <- split(penguins, penguins$species)
    -body <- lapply(dat, \(x) x$body_mass_g)
    -flip <- lapply(dat, \(x) x$flipper_length_mm)
    -
    -# create nearly empty table
    -tab <- data.frame(
    -  "Species" = names(dat),
    -  "Body Mass" = "",
    -  "Flipper Length" = "",
    -  "Body vs. Flipper" = "",
    -  check.names = FALSE
    -)
    -
    -# custom ggplot2 function to create inline plot
    -f <- function(d, ...) {
    -  ggplot(d, aes(x = flipper_length_mm, y = body_mass_g, color = sex)) +
    -    geom_point(size = .2) +
    -    scale_x_continuous(expand=c(0,0)) +
    -    scale_y_continuous(expand=c(0,0)) +
    -    scale_color_manual(values = c("#E69F00", "#56B4E9")) +
    -    theme_void() +
    -    theme(legend.position = "none")
    -}
    -
    -# `tinytable` calls
    -tt(tab) |>
    -  plot_tt(j = 2, fun = "histogram", data = body, height = 2) |>
    -  plot_tt(j = 3, fun = "density", data = flip, height = 2) |>
    -  plot_tt(j = 4, fun = f, data = dat, height = 2) |>
    -  style_tt(j = 2:4, align = "c") 
    +
    penguins <- read.csv(
    +  "https://vincentarelbundock.github.io/Rdatasets/csv/palmerpenguins/penguins.csv",
    +  na.strings = "") |> na.omit()
    +
    +# split data by species
    +dat <- split(penguins, penguins$species)
    +body <- lapply(dat, \(x) x$body_mass_g)
    +flip <- lapply(dat, \(x) x$flipper_length_mm)
    +
    +# create nearly empty table
    +tab <- data.frame(
    +  "Species" = names(dat),
    +  "Body Mass" = "",
    +  "Flipper Length" = "",
    +  "Body vs. Flipper" = "",
    +  check.names = FALSE
    +)
    +
    +# custom ggplot2 function to create inline plot
    +f <- function(d, ...) {
    +  ggplot(d, aes(x = flipper_length_mm, y = body_mass_g, color = sex)) +
    +    geom_point(size = .2) +
    +    scale_x_continuous(expand=c(0,0)) +
    +    scale_y_continuous(expand=c(0,0)) +
    +    scale_color_manual(values = c("#E69F00", "#56B4E9")) +
    +    theme_void() +
    +    theme(legend.position = "none")
    +}
    +
    +# `tinytable` calls
    +tt(tab) |>
    +  plot_tt(j = 2, fun = "histogram", data = body, height = 2) |>
    +  plot_tt(j = 3, fun = "density", data = flip, height = 2) |>
    +  plot_tt(j = 4, fun = f, data = dat, height = 2) |>
    +  style_tt(j = 2:4, align = "c") 
    - tinytable_725d5m8eaiqgprk2bu9x + tinytable_mf4zqwvy9zylxe6xdx6h @@ -7202,7 +7237,7 @@

    Custom plots: g
    - +
    @@ -7216,33 +7251,33 @@

    Custom plots: g

    - - - + + + - - - + + + - - - + + +
    Adelie
    Chinstrap
    Gentoo
    @@ -7298,19 +7333,19 @@

    Custom plots: g

    Fontawesome

    We can use the fontawesome package to include fancy icons in HTML tables:

    -
    library(fontawesome)
    -tmp <- mtcars[1:4, 1:4]
    -tmp[1, 1] <- paste(fa("r-project"), "for statistics")
    -tt(tmp)
    +
    library(fontawesome)
    +tmp <- mtcars[1:4, 1:4]
    +tmp[1, 1] <- paste(fa("r-project"), "for statistics")
    +tt(tmp)
    - tinytable_rraqg5hkag3f98cmpjon + tinytable_vf0wp8ruz7juyn4xrfkq @@ -7328,7 +7363,7 @@

    Fontawesome

    - +
    @@ -7369,12 +7404,12 @@

    Fontawesome

    @@ -7421,24 +7456,24 @@

    Groups and labels

    Rows

    The i argument accepts a named list of integers. The numbers identify the positions where row group labels are to be inserted. The names includes the text that should be inserted:

    -
    dat <- mtcars[1:9, 1:8]
    -
    -tt(dat) |>
    -  group_tt(i = list(
    -    "I like (fake) hamburgers" = 3,
    -    "She prefers halloumi" = 4,
    -    "They love tofu" = 7))
    +
    dat <- mtcars[1:9, 1:8]
    +
    +tt(dat) |>
    +  group_tt(i = list(
    +    "I like (fake) hamburgers" = 3,
    +    "She prefers halloumi" = 4,
    +    "They love tofu" = 7))
    - tinytable_pxh4yanq8dy768trojpm + tinytable_jl2i13peuh21eih2v55k @@ -7456,7 +7491,7 @@

    Rows

    -
    +
    @@ -7567,12 +7602,12 @@

    Rows

    @@ -7636,30 +7671,30 @@

    Rows

    We can style group rows in the same way as regular rows:

    -
    tt(dat) |> 
    -  group_tt(
    -    i = list(
    -      "I like (fake) hamburgers" = 3,
    -      "She prefers halloumi" = 4,
    -      "They love tofu" = 7)) |>
    -  style_tt(
    -    i = c(3, 5, 9),
    -    align = "c",
    -    color = "white",
    -    background = "gray",
    -    bold = TRUE)
    +
    tt(dat) |> 
    +  group_tt(
    +    i = list(
    +      "I like (fake) hamburgers" = 3,
    +      "She prefers halloumi" = 4,
    +      "They love tofu" = 7)) |>
    +  style_tt(
    +    i = c(3, 5, 9),
    +    align = "c",
    +    color = "white",
    +    background = "gray",
    +    bold = TRUE)
    - tinytable_mn1mcalq2rm8ff48r8q7 + tinytable_tek3ae3qab31otpt7g3f @@ -7677,7 +7712,7 @@

    Rows

    -
    +
    @@ -7788,12 +7823,12 @@

    Rows

    @@ -7884,23 +7919,23 @@

    Rows

    Columns

    The syntax for column groups is very similar, but we use the j argument instead. The named list specifies the labels to appear in column-spanning labels, and the values must be a vector of consecutive and non-overlapping integers that indicate which columns are associated to which labels:

    -
    tt(dat) |> 
    -  group_tt(
    -    j = list(
    -      "Hamburgers" = 1:3,
    -      "Halloumi" = 4:5,
    -      "Tofu" = 7))
    +
    tt(dat) |> 
    +  group_tt(
    +    j = list(
    +      "Hamburgers" = 1:3,
    +      "Halloumi" = 4:5,
    +      "Tofu" = 7))
    - tinytable_i7lze4vpjcbopl3qrw2i + tinytable_z5o0p4xmovv5jipuf35v @@ -7918,7 +7953,7 @@

    Columns

    -
    +
    @@ -8036,12 +8071,12 @@

    Columns

    @@ -8096,36 +8131,36 @@

    Columns

    Here is a table with both row and column headers, as well as some styling:

    -
    dat <- mtcars[1:9, 1:8]
    -tt(dat) |> 
    -  group_tt(
    -    i = list("I like (fake) hamburgers" = 3,
    -             "She prefers halloumi" = 4,
    -             "They love tofu" = 7),
    -    j = list("Hamburgers" = 1:3,
    -             "Halloumi" = 4:5,
    -             "Tofu" = 7)) |>
    -  style_tt(
    -    i = c(3, 5, 9),
    -    align = "c",
    -    background = "teal",
    -    color = "white") |>
    -  style_tt(i = -1, color = "teal")
    +
    dat <- mtcars[1:9, 1:8]
    +tt(dat) |> 
    +  group_tt(
    +    i = list("I like (fake) hamburgers" = 3,
    +             "She prefers halloumi" = 4,
    +             "They love tofu" = 7),
    +    j = list("Hamburgers" = 1:3,
    +             "Halloumi" = 4:5,
    +             "Tofu" = 7)) |>
    +  style_tt(
    +    i = c(3, 5, 9),
    +    align = "c",
    +    background = "teal",
    +    color = "white") |>
    +  style_tt(i = -1, color = "teal")
    - tinytable_ku363h2z8cy3j17wavr6 + tinytable_kxppoburibdsh6k5tm1x @@ -8143,7 +8178,7 @@

    Columns

    -
    Hamburgers
    +
    @@ -8261,12 +8296,12 @@

    Columns

    @@ -8373,22 +8408,22 @@

    Columns

    We can also stack several extra headers on top of one another:

    -
    tt(x) |>
    -  group_tt(j = list("Foo" = 2:3, "Bar" = 5)) |>
    -  group_tt(j = list("Hello" = 1:2, "World" = 4:5))
    +
    tt(x) |>
    +  group_tt(j = list("Foo" = 2:3, "Bar" = 5)) |>
    +  group_tt(j = list("Hello" = 1:2, "World" = 4:5))
    - tinytable_jm970uspf941ib4ojqm2 + tinytable_plmxkkhdgzhsg0xmyo88 @@ -8406,7 +8441,7 @@

    Columns

    -
    Hamburgers
    +
    @@ -8463,12 +8498,12 @@

    Columns

    @@ -8530,17 +8565,17 @@

    Bootstrap classes

    The Bootstrap framework provides a number of built-in themes to style tables, using “classes.” To use them, we call style_tt() with the bootstrap_class argument. A list of available Bootstrap classes can be found here: https://getbootstrap.com/docs/5.3/content/tables/

    For example, to produce a “bordered” table, we use the table-bordered class:

    -
    tt(x) |> style_tt(bootstrap_class = "table table-bordered")
    +
    tt(x) |> style_tt(bootstrap_class = "table table-bordered")
    - tinytable_d29ufjgsvaijs4woczzr + tinytable_tgybh1i9o5o0ql3aiebs @@ -8558,7 +8593,7 @@

    Bootstrap classes

    -
    Hello
    +
    @@ -8604,12 +8639,12 @@

    Bootstrap classes

    @@ -8670,18 +8705,18 @@

    Bootstrap classes

    We can also combine several Bootstrap classes. Here, we get a table with the “hover” feature:

    -
    tt(x) |> style_tt(
    -  bootstrap_class = "table table-hover")
    +
    tt(x) |> style_tt(
    +  bootstrap_class = "table table-hover")
    - tinytable_b5kbdlkljqtstu36t2cd + tinytable_pysacal7ucqh7omhgwc0 @@ -8699,7 +8734,7 @@

    Bootstrap classes

    -
    +
    @@ -8745,12 +8780,12 @@

    Bootstrap classes

    @@ -8814,18 +8849,18 @@

    Bootstrap classes

    CSS declarations

    The style_tt() function allows us to declare CSS properties and values for individual cells, columns, or rows of a table. For example, if we want to make the first column bold, we could do:

    -
    tt(x) |>
    -  style_tt(j = 1, bootstrap_css = "font-weight: bold; color: red;")
    +
    tt(x) |>
    +  style_tt(j = 1, bootstrap_css = "font-weight: bold; color: red;")
    - tinytable_65jmmxxamexll9ph5e7m + tinytable_3lxidisb4q856u1srvkc @@ -8843,7 +8878,7 @@

    CSS declarations

    -
    +
    @@ -8889,12 +8924,12 @@

    CSS declarations

    @@ -8943,54 +8978,54 @@

    CSS declarations

    CSS rules

    For more extensive customization, we can use complete CSS rules. In this example, we define several rules that apply to a new class called mytable. Then, we use the theme argument of the tt() function to ensure that our tiny table is of class mytable. Finally, we call style_bootstrap() to apply the rules with the bootstrap_css_rule argument.

    -
    css_rule <- "
    -.mytable {
    -  background: linear-gradient(45deg, #EA8D8D, #A890FE);
    -  width: 600px;
    -  border-collapse: collapse;
    -  overflow: hidden;
    -  box-shadow: 0 0 20px rgba(0,0,0,0.1);
    -}
    -
    -.mytable th,
    -.mytable td {
    -  padding: 5px;
    -  background-color: rgba(255,255,255,0.2);
    -  color: #fff;
    -}
    -
    -.mytable tbody tr:hover {
    -  background-color: rgba(255,255,255,0.3);
    -}
    -
    -.mytable tbody td:hover:before {
    -  content: '';
    -  position: absolute;
    -  left: 0;
    -  right: 0;
    -  top: -9999px;
    -  bottom: -9999px;
    -  background-color: rgba(255,255,255,0.2);
    -  z-index: -1;
    -}
    -"
    -
    -tt(x, width = 2/3) |> 
    -  style_tt(
    -    j = 1:5,
    -    align = "ccccc",
    -    bootstrap_class = "table mytable",
    -    bootstrap_css_rule = css_rule)
    +
    css_rule <- "
    +.mytable {
    +  background: linear-gradient(45deg, #EA8D8D, #A890FE);
    +  width: 600px;
    +  border-collapse: collapse;
    +  overflow: hidden;
    +  box-shadow: 0 0 20px rgba(0,0,0,0.1);
    +}
    +
    +.mytable th,
    +.mytable td {
    +  padding: 5px;
    +  background-color: rgba(255,255,255,0.2);
    +  color: #fff;
    +}
    +
    +.mytable tbody tr:hover {
    +  background-color: rgba(255,255,255,0.3);
    +}
    +
    +.mytable tbody td:hover:before {
    +  content: '';
    +  position: absolute;
    +  left: 0;
    +  right: 0;
    +  top: -9999px;
    +  bottom: -9999px;
    +  background-color: rgba(255,255,255,0.2);
    +  z-index: -1;
    +}
    +"
    +
    +tt(x, width = 2/3) |> 
    +  style_tt(
    +    j = 1:5,
    +    align = "ccccc",
    +    bootstrap_class = "table mytable",
    +    bootstrap_css_rule = css_rule)
    - tinytable_d7a5phs5iq1p2ty6t1oo + tinytable_evjx9mcvfc2rycvfyif7