From de10307d6cbb1cc26485c1132468e145b6f53e06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mine=20=C3=87etinkaya-Rundel?= Date: Thu, 2 May 2024 12:51:06 -0400 Subject: [PATCH] Re-render --- .../data-import/execute-results/html.json | 5 +- .../html/lubridate/execute-results/html.json | 9 +- _freeze/html/quarto/execute-results/html.json | 5 +- .../shiny-python/execute-results/html.json | 15 +++ .../html/sparklyr/execute-results/html.json | 9 +- html/images/logo-lubridate.png | Bin 20069 -> 19955 bytes html/images/logo-readr.png | Bin 16333 -> 16183 bytes html/images/logo-shiny.png | Bin 174038 -> 24710 bytes html/images/logo-sparklyr.png | Bin 56318 -> 56168 bytes html/quarto.qmd | 110 ++++++++++-------- 10 files changed, 93 insertions(+), 60 deletions(-) create mode 100644 _freeze/html/shiny-python/execute-results/html.json diff --git a/_freeze/html/data-import/execute-results/html.json b/_freeze/html/data-import/execute-results/html.json index 19176587..3df98ce3 100644 --- a/_freeze/html/data-import/execute-results/html.json +++ b/_freeze/html/data-import/execute-results/html.json @@ -1,7 +1,8 @@ { - "hash": "3dd83c708269f018503db15e7fe27d2e", + "hash": "0a1afa2ff53dbb8295d59babc8374cb1", "result": { - "markdown": "---\ntitle: \"Data import with the tidyverse :: Cheatsheet\"\ndescription: \" \"\nexecute:\n eval: true\n output: false\n warning: true\n---\n\n::: {.cell .column-margin}\n\"Hex\n

\n

Download PDF

\n\"\"/\n
\n

Translations (PDF)

\n* Bengali\n* Persian\n* Russian\n* Spanish\n* Turkish\n* Ukrainian\n* Uzbek\n:::\n\n\nOne of the first steps of a project is to import outside data into R.\nData is often stored in tabular formats, like csv files or spreadsheets.\n\n- The first half of this cheatsheet shows how to import and save text files into R using **readr**.\n- The second half shows how to import spreadsheet data from Excel files using **readxl** or Google Sheets using **googlesheets4**.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nlibrary(readr)\nlibrary(readxl)\nlibrary(googlesheets4)\n```\n:::\n\n\nFor importing other types of data try one of the following packages:\n\n- **haven**: SPSS, Stata, and SAS files\n- **DBI**: databases\n- **jsonlite**: json\n- **xml2**: XML\n- **httr**: Web APIs\n- **rvest**: HTML (Web Scraping)\n- **readr::read_lines()**: text data\n\n## Read Tabular Data with readr\n\n\n\n\n\nSee `?read_delim`.\n\n``` r\nread_*(\n file, \n col_names = TRUE, col_types = NULL, col_select = NULL, \n show_col_types = TRUE\n id = NULL, locale, \n n_max = Inf, skip = 0, guess_max = min(1000, n_max), \n na = c(\"\", \"NA\")\n)\n```\n\n### Examples\n\n- Read files with any delimiter: `read_delim()`.\n If no delimiter is specified, it will automatically guess.\n\n - If the file you want to import is the following:\n\n ``` \n A|B|C\n 1|2|3\n 4|5|NA\n ```\n\n\n ::: {.cell}\n \n :::\n\n\n - Read it with `read_delim()` and it will look like the following when imported:\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_delim(\"file.txt\", delim = \"|\", show_col_types = FALSE)\n ```\n :::\n\n\n - To make `file.txt`, run:\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n write_file(\"A|B|C\\n1|2|3\\n4|5|NA\", file = \"file.txt\")\n ```\n :::\n\n\n- Read a comma delimited file with period decimal marks: `read_csv()`.\n\n - If the file you want to import is the following:\n\n ``` \n A,B,C\n 1,2,3\n 4,5,NA\n ```\n\n\n ::: {.cell}\n \n :::\n\n\n - Read it with `read_csv()` and it will look like the following when imported:\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_csv(\"file.csv\", show_col_types = FALSE)\n ```\n :::\n\n\n - To make `file.csv`, run:\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n write_file(\"A,B,C\\n1,2,3\\n4,5,NA\", file = \"file.csv\")\n ```\n :::\n\n\n- Read semicolon delimited files with comma decimal marks: `read_csv2()`.\n\n - If the file you want to import is the following:\n\n ``` \n A;B;C\n 1,5;2;3\n 4,5;5;NA\n ```\n\n\n ::: {.cell}\n \n :::\n\n\n - Read it with `read_csv2()` and it will look like the following when imported:\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_csv2(\"file2.csv\", show_col_types = FALSE)\n ```\n :::\n\n\n - To make `file2.csv`, run:\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n write_file(\"A;B;C\\n1,5;2;3\\n4,5;5;NA\", file = \"file2.csv\")\n ```\n :::\n\n\n- Read a tab delimited file: `read_tsv()` or `read_table()`.\n\n Read a fixed width file: `read_fwf(\"file.tsv\", fwf_widths(c(2, 2, NA)))`.\n\n - If the file you want to import is the following:\n\n ``` \n A B C\n 1 2 3\n 4 5 NA\n ```\n\n\n ::: {.cell}\n \n :::\n\n\n - Read it with `read_tsv()` and it will look like the following when imported:\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_tsv(\"file.tsv\", show_col_types = FALSE)\n ```\n :::\n\n\n - To make `tsv`, run:\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n write_file(\"A\\tB\\tC\\n1\\t2\\t3\\n4\\t5\\tNA\\n\", file = \"file.tsv\")\n ```\n :::\n\n\n### Useful read arguments\n\nSuppose you have the following CSV files that you want to read in, called `file.csv`:\n\n`file.csv`\n\n``` \nA,B,C\n1,2,3\n4,5,NA\n```\n\n`file3.csv`\n\n``` \nA,B,C\n7,8,9\nNA,11,12\n```\n\nTo make these files, run:\n\n\n::: {.cell}\n\n```{.r .cell-code}\nwrite_file(\"A,B,C\\n1,2,3\\n4,5,NA\", file = \"file.csv\")\nwrite_file(\"A,B,C\\n7,8,9\\nNA,11,12\", file = \"file3.csv\")\n```\n:::\n\n\n- No header: `col_names = FALSE`\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_csv(\"file.csv\", col_names = FALSE)\n ```\n :::\n\n\n- Provide header: `col_names = c(\"x\", \"y\", \"z\")`\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_csv(\"file.csv\", col_names = c(\"x\", \"y\", \"z\"))\n ```\n :::\n\n\n- Skip lines:\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_csv(\"file.csv\", skip = 1)\n ```\n :::\n\n\n- Read a subset of lines:\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_csv(\"file.csv\", skip = 1)\n ```\n :::\n\n\n- Read values as missing:\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_csv(\"file.csv\", na = c(\"1\"))\n ```\n :::\n\n\n- Specify decimal marks:\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_delim(\"file2.csv\", locale = locale(decimal_mark = \",\"))\n ```\n :::\n\n\n- Read multiple files into a single table:\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_csv(c(\"file.csv\", \"file3.csv\"), id = \"origin_file\")\n ```\n :::\n\n\n### Save data with readr\n\n``` r\nwrite_*(\n x, file, \n na = \"NA\", \n append, col_names, quote, escape, eol, num_threads, progress\n)\n```\n\n- Write files with any delimiter: `write_delim(x, file, delim = \" \")`\n- Write a comma delimited file: `write_csv(x, file)`\n- Write a semicolon delimited file: `write_csv2(x, file)`\n- Write a tab delimited file: `write_tsv(x, file)`\n\n### Column specification with readr\n\nColumn specifications define what data type each column of a file will be imported as.\nBy default readr will generate a column spec when a file is read and output a summary.\n\n`spec(df)`: Extract the full column specification for the given imported data frame.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nspec(df)\n# cols(\n# age = col_integer(), # age is an integer\n# edu = col_character(), # edu is a character\n# earn = col_double() # earn is a double (numeric)\n# )\n```\n:::\n\n\n#### Column types\n\nEach column type has a function and corresponding string abbreviation.\n\n- `col_logical() - \"l\"`\n- `col_integer() - \"i\"`\n- `col_double() - \"d\"`\n- `col_number() - \"n\"`\n- `col_character() - \"c\"`\n- `col_factor(levels, ordered = FALSE) - \"f\"`\n- `col_datetime(format = \"\") - \"T\"`\n- `col_date(format = \"\") - \"D\"`\n- `col_time(format = \"\") - \"t\"`\n- `col_skip() - \"-\", \"_\"`\n- `col_guess() - \"?\"`\n\n#### Useful column arguments\n\n- Hide col spec message:\n\n ``` r\n read_*(file, show_col_types = FALSE)\n ```\n\n- Select columns to import: Use names, position, or selection helpers.\n\n ``` r\n read_*(file, col_select = c(age, earn))\n ```\n\n- Guess column types: To guess a column type, `read_ *()` looks at the first 1000 rows of data.\n Increase with `guess_max`.\n\n ``` r\n read_*(file, guess_max = Inf)\n ```\n\n#### Define column specification\n\n- Set a default type:\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_csv(\n file, \n col_type = list(.default = col_double())\n )\n ```\n :::\n\n\n- Use column type or string abbreviation:\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_csv(\n file, \n col_type = list(x = col_double(), y = \"l\", z = \"_\")\n )\n ```\n :::\n\n\n- Use a single string of abbreviations:\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n # col types: skip, guess, integer, logical, character\n read_csv(\n file, \n col_type = \"_?ilc\"\n )\n ```\n :::\n\n\n## Import spreadsheets with readxl\n\n### Read Excel files\n\nRead a .xls or .xlsx file based on the file extension, e.g. `read_excel(\"excel_file.xlsx\")`.\nSee [Useful read arguments] for more read arguments.\nAlso `read_xls()` and `read_xlsx()`.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nread_excel(path, sheet = NULL, range = NULL)\n```\n:::\n\n\n- If the Google sheet you want to import is the following:\n\n | A | B | C | D | E |\n |-----|-----|-----|-----|-----|\n | x1 | x2 | x3 | x4 | x5 |\n | x | | z | 8 | |\n | y | 7 | | 9 | 10 |\n\n : Spreadsheet with 5 columns (A through E) and three rows. First row reads x1 through x5. Second and third row have some missing values.\n\n- It will look like the following when imported:\n\n\n ::: {.cell}\n \n :::\n\n\n### Read sheets\n\n- Specify which sheet to read by position or name: `read_excel(path, sheet = NULL)`\n\n - `read_excel(path, sheet = 1)`\n - `read_excel(path, sheet = \"s1\")`\n\n- Get a vector of sheet names: `excel_sheets(path)`\n\n `excel_sheets(\"excel_file.xlsx\")`\n\n- To read multiple sheets:\n\n 1. Get a vector of sheet names from the file path.\n\n 2. Set the vector names to be the sheet names.\n\n 3. Use `purrr::map()` and `purrr::list_rbind()` to read multiple files into one data frame.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n path <- \"your_file_path.xlsx\"\n path |> \n excel_sheets() |>\n set_names() |>\n map(read_excel, path = path) |>\n list_rbind()\n ```\n :::\n\n\n### readxl column specification\n\n- Column specifications define what data type each column of a file will be imported as.\n\n- Use the `col_types` argument of `read_excel()` to set the column specification.\n\n- Guess column types: To guess a column type, `read_excel()` looks at the first 1000 rows of data.\n Increase with the `guess_max` argument.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_excel(path, guess_max = Inf)\n ```\n :::\n\n\n- Set all columns to same type, e.g. character:\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_excel(path, col_types = \"text\")\n ```\n :::\n\n\n- Set each column individually:\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_excel(\n path,\n col_types = c(\"text\", \"guess\", \"guess\",\"numeric\")\n )\n ```\n :::\n\n\n- **Column types:**\n\n | logical | numeric | text | date | list |\n |---------|---------|-------|------------|-------|\n | TRUE | 2 | hello | 1947-01-08 | hello |\n | FALSE | 3.45 | world | 1956-10-21 | 1 |\n\n : Table with 5 columns. Column headers are various data types (logical, numeric, text, date, and list). The data in two rows show examples of data for the given column type.\n\n - `skip`\n\n - `guess`\n\n - `logical`\n\n - `date`\n\n - `numeric`\n\n - `text`\n\n - Use `list`for columns that include multiple data types.\n See **tidyr** and **purrr** for list-column data.\n\n### Other useful Excel packages\n\n- For functions to write data to Excel files: **openxlsx** and **writexl**\n- For working with non-tabular Excel data: **tidyxl**\n\n## Import spreadsheets with googlesheets4\n\n### Read sheets\n\nRead a sheet from a URL, a Sheet ID, or a dribble samefrom the googledrive package.\nSee [Useful read arguments] for more read arguments.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nread_sheet(ss, sheet = NULL, range = NULL)\n```\n:::\n\n\nSame as `range_read()`.\n\n- If the Google sheet you want to import is the following:\n\n | A | B | C | D | E |\n |-----|-----|-----|-----|-----|\n | x1 | x2 | x3 | x4 | x5 |\n | x | | z | 8 | |\n | y | 7 | | 9 | 10 |\n\n : Spreadsheet with 5 columns (A through E) and three rows. First row reads x1 through x5. Second and third row have some missing values.\n\n- It will look like the following when imported:\n\n\n ::: {.cell}\n \n :::\n\n\n### Sheet metadata\n\n- **URLs** are in the form:\n\n ``` \n https://docs.google.com/spreadsheets/d/\n             SPREADSHEET_ID/edit#gid=SHEET_ID\n ```\n\n- Get spreadsheet meta data: `gs4_get(ss)`\n\n- Get data on all spreadsheet files: `gs4_find(...)`\n\n- Get a tibble of properties for each worksheet: `sheet_properties(ss)`.\n Also `sheet_names()`.\n\n### Write sheets\n\n- `write_sheet(data, ss = NULL, sheet = NULL)`**:** Write a data frame into a new or existing Sheet. \n- `gs4_create(name, ..., sheets = NULL)`: Create a new Sheet with a vector of names, a data frame, or a (named) list of data frames.\n- `sheet_append(ss, data, sheet = 1)`: Add rows to the end of a worksheet.\n\n### googlesheets4 column specification\n\nColumn specifications define what data type each column of a file will be imported as.\n\nUse the `col_types` argument of `read_sheet()`**/**`range_read()` to set the column specification.\n\n- Guess column types: To guess a column type `read_sheet()`/`range_read()` looks at the first 1000 rows of data.\n Increase with `guess_max`.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_sheet(path, guess_max = Inf)\n ```\n :::\n\n\n- Set all columns to same type, e.g. character:\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_sheet(path, col_types = \"c\")\n ```\n :::\n\n\n- Set each column individually:\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n # col types: skip, guess, integer, logical, character\n read_sheets(ss, col_types = \"_?ilc\")\n ```\n :::\n\n\n- Column types:\n\n - skipped my lunch 🥙 🍱 and: \"\\_\" or \"-\"\n\n - guess: \"?\"\n\n - logical: \"l\"\n\n - integer: \"i\"\n\n - double: \"d\"\n\n - numeric: \"n\"\n\n - date: \"D\"\n\n - datetime: \"T\"\n\n - character: \"c\"\n\n - list-column: \"L\"\n\n - cell: \"C\" (returns list of raw cell data)\n\n - Use list for columns that include multiple data types.\n See **tidyr** and **purrr** for list-column data.\n\n### File level operations\n\n- **googlesheets4** also offers ways to modify other aspects of Sheets (e.g. freeze rows, set column width, manage (work)sheets). Go to [googlesheets4.tidyverse.org](https://googlesheets4.tidyverse.org/) to read more.\n- For whole-file operations (e.g. renaming, sharing, placing within a folder), see the tidyverse package **googledrive** at [googledrive.tidyverse.org](https://googledrive.tidyverse.org).\n\n## Cell specification for readxl and googlesheets4\n\nUse the **range** argument of **readxl::read_excel()** or **googlesheets4::read_sheet()** to read a subset of cells from a sheet.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nread_excel(path, range = \"Sheet1!B1:D2\")\nread_sheet(ss, range = \"B1:D2\")\n```\n:::\n\n\nAlso use the range argument with cell specification functions `cell_limits()`, `cell_rows()`, `cell_cols()`, and `anchored()`**.**\n\n------------------------------------------------------------------------\n\nCC BY SA Posit Software, PBC • [info\\@posit.co](mailto:info@posit.co) • [posit.co](https://posit.co)\n\nLearn more at\n\n- readr: [readr.tidyverse.org](https://readr.tidyverse.org)\n- readxl: [readxl.tidyverse.org](https://readxl.tidyverse.org/)\n- googlesheets4: [googlesheets4.tidyverse.org](https://googlesheets4.tidyverse.org/)\n\nUpdated: 2023-07.\n\n\n::: {.cell}\n\n```{.r .cell-code}\npackageVersion(\"readr\")\n```\n\n::: {.cell-output .cell-output-stdout}\n```\n[1] '2.1.4'\n```\n:::\n\n```{.r .cell-code}\npackageVersion(\"readxl\")\n```\n\n::: {.cell-output .cell-output-stdout}\n```\n[1] '1.4.3'\n```\n:::\n\n```{.r .cell-code}\npackageVersion(\"googlesheets4\")\n```\n\n::: {.cell-output .cell-output-stdout}\n```\n[1] '1.1.1'\n```\n:::\n:::\n\n\n------------------------------------------------------------------------\n\n\n\n", + "engine": "knitr", + "markdown": "---\ntitle: \"Data import with the tidyverse :: Cheatsheet\"\ndescription: \" \"\nexecute:\n eval: true\n output: false\n warning: true\n---\n\n::: {.cell .column-margin}\n\"Hex\n

\n

Download PDF

\n\"\"/\n
\n

Translations (PDF)

\n* Bengali\n* Persian\n* Portuguese\n* Russian\n* Spanish\n* Turkish\n* Ukrainian\n* Uzbek\n:::\n\n\n\n\nOne of the first steps of a project is to import outside data into R.\nData is often stored in tabular formats, like csv files or spreadsheets.\n\n- The first half of this cheatsheet shows how to import and save text files into R using **readr**.\n- The second half shows how to import spreadsheet data from Excel files using **readxl** or Google Sheets using **googlesheets4**.\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nlibrary(readr)\nlibrary(readxl)\nlibrary(googlesheets4)\n```\n:::\n\n\n\n\nFor importing other types of data try one of the following packages:\n\n- **haven**: SPSS, Stata, and SAS files\n- **DBI**: databases\n- **jsonlite**: json\n- **xml2**: XML\n- **httr**: Web APIs\n- **rvest**: HTML (Web Scraping)\n- **readr::read_lines()**: text data\n\n## Read Tabular Data with readr\n\n\n\n\n\n\n\n\n\nSee `?read_delim`.\n\n``` r\nread_*(\n file, \n col_names = TRUE, col_types = NULL, col_select = NULL, \n show_col_types = TRUE\n id = NULL, locale, \n n_max = Inf, skip = 0, guess_max = min(1000, n_max), \n na = c(\"\", \"NA\")\n)\n```\n\n### Examples\n\n- Read files with any delimiter: `read_delim()`.\n If no delimiter is specified, it will automatically guess.\n\n - If the file you want to import is the following:\n\n ``` \n A|B|C\n 1|2|3\n 4|5|NA\n ```\n\n\n\n\n ::: {.cell}\n \n :::\n\n\n\n\n - Read it with `read_delim()` and it will look like the following when imported:\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_delim(\"file.txt\", delim = \"|\", show_col_types = FALSE)\n ```\n :::\n\n\n\n\n - To make `file.txt`, run:\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n write_file(\"A|B|C\\n1|2|3\\n4|5|NA\", file = \"file.txt\")\n ```\n :::\n\n\n\n\n- Read a comma delimited file with period decimal marks: `read_csv()`.\n\n - If the file you want to import is the following:\n\n ``` \n A,B,C\n 1,2,3\n 4,5,NA\n ```\n\n\n\n\n ::: {.cell}\n \n :::\n\n\n\n\n - Read it with `read_csv()` and it will look like the following when imported:\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_csv(\"file.csv\", show_col_types = FALSE)\n ```\n :::\n\n\n\n\n - To make `file.csv`, run:\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n write_file(\"A,B,C\\n1,2,3\\n4,5,NA\", file = \"file.csv\")\n ```\n :::\n\n\n\n\n- Read semicolon delimited files with comma decimal marks: `read_csv2()`.\n\n - If the file you want to import is the following:\n\n ``` \n A;B;C\n 1,5;2;3\n 4,5;5;NA\n ```\n\n\n\n\n ::: {.cell}\n \n :::\n\n\n\n\n - Read it with `read_csv2()` and it will look like the following when imported:\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_csv2(\"file2.csv\", show_col_types = FALSE)\n ```\n :::\n\n\n\n\n - To make `file2.csv`, run:\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n write_file(\"A;B;C\\n1,5;2;3\\n4,5;5;NA\", file = \"file2.csv\")\n ```\n :::\n\n\n\n\n- Read a tab delimited file: `read_tsv()` or `read_table()`.\n\n Read a fixed width file: `read_fwf(\"file.tsv\", fwf_widths(c(2, 2, NA)))`.\n\n - If the file you want to import is the following:\n\n ``` \n A B C\n 1 2 3\n 4 5 NA\n ```\n\n\n\n\n ::: {.cell}\n \n :::\n\n\n\n\n - Read it with `read_tsv()` and it will look like the following when imported:\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_tsv(\"file.tsv\", show_col_types = FALSE)\n ```\n :::\n\n\n\n\n - To make `tsv`, run:\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n write_file(\"A\\tB\\tC\\n1\\t2\\t3\\n4\\t5\\tNA\\n\", file = \"file.tsv\")\n ```\n :::\n\n\n\n\n### Useful read arguments\n\nSuppose you have the following CSV files that you want to read in, called `file.csv`:\n\n`file.csv`\n\n``` \nA,B,C\n1,2,3\n4,5,NA\n```\n\n`file3.csv`\n\n``` \nA,B,C\n7,8,9\nNA,11,12\n```\n\nTo make these files, run:\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nwrite_file(\"A,B,C\\n1,2,3\\n4,5,NA\", file = \"file.csv\")\nwrite_file(\"A,B,C\\n7,8,9\\nNA,11,12\", file = \"file3.csv\")\n```\n:::\n\n\n\n\n- No header: `col_names = FALSE`\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_csv(\"file.csv\", col_names = FALSE)\n ```\n :::\n\n\n\n\n- Provide header: `col_names = c(\"x\", \"y\", \"z\")`\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_csv(\"file.csv\", col_names = c(\"x\", \"y\", \"z\"))\n ```\n :::\n\n\n\n\n- Skip lines:\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_csv(\"file.csv\", skip = 1)\n ```\n :::\n\n\n\n\n- Read a subset of lines:\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_csv(\"file.csv\", n_max = 1)\n ```\n :::\n\n\n\n\n- Read values as missing:\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_csv(\"file.csv\", na = c(\"1\"))\n ```\n :::\n\n\n\n\n- Specify decimal marks:\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_delim(\"file2.csv\", locale = locale(decimal_mark = \",\"))\n ```\n :::\n\n\n\n\n- Read multiple files into a single table:\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_csv(c(\"file.csv\", \"file3.csv\"), id = \"origin_file\")\n ```\n :::\n\n\n\n\n### Save data with readr\n\n``` r\nwrite_*(\n x, file, \n na = \"NA\", \n append, col_names, quote, escape, eol, num_threads, progress\n)\n```\n\n- Write files with any delimiter: `write_delim(x, file, delim = \" \")`\n- Write a comma delimited file: `write_csv(x, file)`\n- Write a semicolon delimited file: `write_csv2(x, file)`\n- Write a tab delimited file: `write_tsv(x, file)`\n\n### Column specification with readr\n\nColumn specifications define what data type each column of a file will be imported as.\nBy default readr will generate a column spec when a file is read and output a summary.\n\n`spec(df)`: Extract the full column specification for the given imported data frame.\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nspec(df)\n# cols(\n# age = col_integer(), # age is an integer\n# edu = col_character(), # edu is a character\n# earn = col_double() # earn is a double (numeric)\n# )\n```\n:::\n\n\n\n\n#### Column types\n\nEach column type has a function and corresponding string abbreviation.\n\n- `col_logical() - \"l\"`\n- `col_integer() - \"i\"`\n- `col_double() - \"d\"`\n- `col_number() - \"n\"`\n- `col_character() - \"c\"`\n- `col_factor(levels, ordered = FALSE) - \"f\"`\n- `col_datetime(format = \"\") - \"T\"`\n- `col_date(format = \"\") - \"D\"`\n- `col_time(format = \"\") - \"t\"`\n- `col_skip() - \"-\", \"_\"`\n- `col_guess() - \"?\"`\n\n#### Useful column arguments\n\n- Hide col spec message:\n\n ``` r\n read_*(file, show_col_types = FALSE)\n ```\n\n- Select columns to import: Use names, position, or selection helpers.\n\n ``` r\n read_*(file, col_select = c(age, earn))\n ```\n\n- Guess column types: To guess a column type, `read_ *()` looks at the first 1000 rows of data.\n Increase with `guess_max`.\n\n ``` r\n read_*(file, guess_max = Inf)\n ```\n\n#### Define column specification\n\n- Set a default type:\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_csv(\n file, \n col_type = list(.default = col_double())\n )\n ```\n :::\n\n\n\n\n- Use column type or string abbreviation:\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_csv(\n file, \n col_type = list(x = col_double(), y = \"l\", z = \"_\")\n )\n ```\n :::\n\n\n\n\n- Use a single string of abbreviations:\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n # col types: skip, guess, integer, logical, character\n read_csv(\n file, \n col_type = \"_?ilc\"\n )\n ```\n :::\n\n\n\n\n## Import spreadsheets with readxl\n\n### Read Excel files\n\nRead a .xls or .xlsx file based on the file extension, e.g. `read_excel(\"excel_file.xlsx\")`.\nSee [Useful read arguments] for more read arguments.\nAlso `read_xls()` and `read_xlsx()`.\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nread_excel(path, sheet = NULL, range = NULL)\n```\n:::\n\n\n\n\n- If the Google sheet you want to import is the following:\n\n | A | B | C | D | E |\n |-----|-----|-----|-----|-----|\n | x1 | x2 | x3 | x4 | x5 |\n | x | | z | 8 | |\n | y | 7 | | 9 | 10 |\n\n : Spreadsheet with 5 columns (A through E) and three rows. First row reads x1 through x5. Second and third row have some missing values.\n\n- It will look like the following when imported:\n\n\n\n\n ::: {.cell}\n \n :::\n\n\n\n\n### Read sheets\n\n- Specify which sheet to read by position or name: `read_excel(path, sheet = NULL)`\n\n - `read_excel(path, sheet = 1)`\n - `read_excel(path, sheet = \"s1\")`\n\n- Get a vector of sheet names: `excel_sheets(path)`\n\n `excel_sheets(\"excel_file.xlsx\")`\n\n- To read multiple sheets:\n\n 1. Get a vector of sheet names from the file path.\n\n 2. Set the vector names to be the sheet names.\n\n 3. Use `purrr::map()` and `purrr::list_rbind()` to read multiple files into one data frame.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n path <- \"your_file_path.xlsx\"\n path |> \n excel_sheets() |>\n set_names() |>\n map(read_excel, path = path) |>\n list_rbind()\n ```\n :::\n\n\n\n\n### readxl column specification\n\n- Column specifications define what data type each column of a file will be imported as.\n\n- Use the `col_types` argument of `read_excel()` to set the column specification.\n\n- Guess column types: To guess a column type, `read_excel()` looks at the first 1000 rows of data.\n Increase with the `guess_max` argument.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_excel(path, guess_max = Inf)\n ```\n :::\n\n\n\n\n- Set all columns to same type, e.g. character:\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_excel(path, col_types = \"text\")\n ```\n :::\n\n\n\n\n- Set each column individually:\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_excel(\n path,\n col_types = c(\"text\", \"guess\", \"guess\",\"numeric\")\n )\n ```\n :::\n\n\n\n\n- **Column types:**\n\n | logical | numeric | text | date | list |\n |---------|---------|-------|------------|-------|\n | TRUE | 2 | hello | 1947-01-08 | hello |\n | FALSE | 3.45 | world | 1956-10-21 | 1 |\n\n : Table with 5 columns. Column headers are various data types (logical, numeric, text, date, and list). The data in two rows show examples of data for the given column type.\n\n - `skip`\n\n - `guess`\n\n - `logical`\n\n - `date`\n\n - `numeric`\n\n - `text`\n\n - Use `list`for columns that include multiple data types.\n See **tidyr** and **purrr** for list-column data.\n\n### Other useful Excel packages\n\n- For functions to write data to Excel files: **openxlsx** and **writexl**\n- For working with non-tabular Excel data: **tidyxl**\n\n## Import spreadsheets with googlesheets4\n\n### Read sheets\n\nRead a sheet from a URL, a Sheet ID, or a dribble samefrom the googledrive package.\nSee [Useful read arguments] for more read arguments.\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nread_sheet(ss, sheet = NULL, range = NULL)\n```\n:::\n\n\n\n\nSame as `range_read()`.\n\n- If the Google sheet you want to import is the following:\n\n | A | B | C | D | E |\n |-----|-----|-----|-----|-----|\n | x1 | x2 | x3 | x4 | x5 |\n | x | | z | 8 | |\n | y | 7 | | 9 | 10 |\n\n : Spreadsheet with 5 columns (A through E) and three rows. First row reads x1 through x5. Second and third row have some missing values.\n\n- It will look like the following when imported:\n\n\n\n\n ::: {.cell}\n \n :::\n\n\n\n\n### Sheet metadata\n\n- **URLs** are in the form:\n\n ``` \n https://docs.google.com/spreadsheets/d/\n             SPREADSHEET_ID/edit#gid=SHEET_ID\n ```\n\n- Get spreadsheet meta data: `gs4_get(ss)`\n\n- Get data on all spreadsheet files: `gs4_find(...)`\n\n- Get a tibble of properties for each worksheet: `sheet_properties(ss)`.\n Also `sheet_names()`.\n\n### Write sheets\n\n- `write_sheet(data, ss = NULL, sheet = NULL)`**:** Write a data frame into a new or existing Sheet. \n- `gs4_create(name, ..., sheets = NULL)`: Create a new Sheet with a vector of names, a data frame, or a (named) list of data frames.\n- `sheet_append(ss, data, sheet = 1)`: Add rows to the end of a worksheet.\n\n### googlesheets4 column specification\n\nColumn specifications define what data type each column of a file will be imported as.\n\nUse the `col_types` argument of `read_sheet()`**/**`range_read()` to set the column specification.\n\n- Guess column types: To guess a column type `read_sheet()`/`range_read()` looks at the first 1000 rows of data.\n Increase with `guess_max`.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_sheet(path, guess_max = Inf)\n ```\n :::\n\n\n\n\n- Set all columns to same type, e.g. character:\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n read_sheet(path, col_types = \"c\")\n ```\n :::\n\n\n\n\n- Set each column individually:\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n # col types: skip, guess, integer, logical, character\n read_sheets(ss, col_types = \"_?ilc\")\n ```\n :::\n\n\n\n\n- Column types:\n\n - skipped my lunch 🥙 🍱 and: \"\\_\" or \"-\"\n\n - guess: \"?\"\n\n - logical: \"l\"\n\n - integer: \"i\"\n\n - double: \"d\"\n\n - numeric: \"n\"\n\n - date: \"D\"\n\n - datetime: \"T\"\n\n - character: \"c\"\n\n - list-column: \"L\"\n\n - cell: \"C\" (returns list of raw cell data)\n\n - Use list for columns that include multiple data types.\n See **tidyr** and **purrr** for list-column data.\n\n### File level operations\n\n- **googlesheets4** also offers ways to modify other aspects of Sheets (e.g. freeze rows, set column width, manage (work)sheets). Go to [googlesheets4.tidyverse.org](https://googlesheets4.tidyverse.org/) to read more.\n- For whole-file operations (e.g. renaming, sharing, placing within a folder), see the tidyverse package **googledrive** at [googledrive.tidyverse.org](https://googledrive.tidyverse.org).\n\n## Cell specification for readxl and googlesheets4\n\nUse the **range** argument of **readxl::read_excel()** or **googlesheets4::read_sheet()** to read a subset of cells from a sheet.\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nread_excel(path, range = \"Sheet1!B1:D2\")\nread_sheet(ss, range = \"B1:D2\")\n```\n:::\n\n\n\n\nAlso use the range argument with cell specification functions `cell_limits()`, `cell_rows()`, `cell_cols()`, and `anchored()`**.**\n\n------------------------------------------------------------------------\n\nCC BY SA Posit Software, PBC • [info\\@posit.co](mailto:info@posit.co) • [posit.co](https://posit.co)\n\nLearn more at\n\n- readr: [readr.tidyverse.org](https://readr.tidyverse.org)\n- readxl: [readxl.tidyverse.org](https://readxl.tidyverse.org/)\n- googlesheets4: [googlesheets4.tidyverse.org](https://googlesheets4.tidyverse.org/)\n\nUpdated: 2024-05.\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\npackageVersion(\"readr\")\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] '2.1.5'\n```\n\n\n:::\n\n```{.r .cell-code}\npackageVersion(\"readxl\")\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] '1.4.3'\n```\n\n\n:::\n\n```{.r .cell-code}\npackageVersion(\"googlesheets4\")\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] '1.1.1'\n```\n\n\n:::\n:::\n\n\n\n\n------------------------------------------------------------------------\n\n\n\n\n\n", "supporting": [ "data-import_files" ], diff --git a/_freeze/html/lubridate/execute-results/html.json b/_freeze/html/lubridate/execute-results/html.json index 09f6697a..5b434aea 100644 --- a/_freeze/html/lubridate/execute-results/html.json +++ b/_freeze/html/lubridate/execute-results/html.json @@ -1,8 +1,11 @@ { - "hash": "a6baed88ece4b5becc66a118f98cbfce", + "hash": "c96684669371dc2394925a346a059e92", "result": { - "markdown": "---\ntitle: \"Dates and times with lubridate :: Cheatsheet\"\ndescription: \" \"\nimage-alt: \"\"\nexecute:\n eval: true\n output: false\n warning: false\n---\n\n::: {.cell .column-margin}\n\"Hex\n

\n

Download PDF

\n\"\"/\n
\n

Translations (PDF)

\n* Russian\n* Spanish\n* Ukrainian\n* Vietnamese\n:::\n\n\n## Date-times\n\n\n::: {.cell}\n\n```{.r .cell-code}\nlibrary(lubridate)\n```\n:::\n\n\n\n\nA **date-time** is a point on the timeline, stored as the number of seconds since 1970-01-01 00:00:00 UTC\n\n\n::: {.cell}\n\n```{.r .cell-code}\ndt <- as_datetime(1511870400)\n```\n:::\n\n\nA **date** is a day stored as the number of days since 1970-01-01\n\n\n::: {.cell}\n\n```{.r .cell-code}\nd <- as_date(17498)\n```\n:::\n\n\nAn hms is a **time** stored as the number of seconds since 00:00:00\n\n\n::: {.cell}\n\n```{.r .cell-code}\nt <- hms::as_hms(85)\n```\n:::\n\n\n### Parse Date-Times\n\nConvert strings or numbers to date-times\n\n1. Identify the order of the year (**y**), month (**m**), day (**d**), hour (**h**), minute (**m**) and second (**s**) elements in your data.\n\n2. Use the function below whose name replicates the order.\n Each accepts a `tz` argument to set the time zone, e.g. `ymd(x, tz = \"UTC\")`.\n\n- `ymd_hms()`, `ymd_hm()`, `ymd_h()`\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n ymd_hms(\"2017-11-28T14:02:00\")\n ```\n :::\n\n\n- `ydm_hms()`, `ydm_hm()`, `ydm_h()`\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n ydm_hms(\"2017-22-12 10:00:00\")\n ```\n :::\n\n\n- `mdy_hms()`, `mdy_hm()`, `mdy_h()`\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n mdy_hms(\"11/28/2017 1:02:03\")\n ```\n :::\n\n\n- `dmy_hms()`, `dmy_hm()`, `dmy_h()`\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n dmy_hms(\"1 Jan 2017 23:59:59\")\n ```\n :::\n\n\n- `ymd()`, `ydm()`\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n ymd(20170131)\n ```\n :::\n\n\n- `mdy()`, `myd()`\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n mdy(\"July 4th, 2000\")\n ```\n :::\n\n\n- `dmy()`, `dym()`\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n dmy(\"4th of July '99\")\n ```\n :::\n\n\n- `yq()`: Q for quarter.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n yq(\"2001: Q3\")\n ```\n :::\n\n\n- `my()`, `ym()`\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n my(\"07-2020\")\n ```\n :::\n\n\n- `hms::hms()`: Also `lubridate::hms()`, `hm()`, and `ms()`, which return periods\\*.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n hms::hms(seconds = 0, minutes = 1, hours = 2)\n ```\n :::\n\n\n- `date_decimal(decimal, tz = \"UTC\")`\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n date_decimal(2017.5)\n ```\n :::\n\n\n- `now(tzone = \"\")`: Current time in tz (defaults to system tz).\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n now()\n ```\n :::\n\n\n- `today(tzone = \"\")`: Current date in a tz (defaults to system tz).\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n today()\n ```\n :::\n\n\n- `fast_strptime()`: Faster strptime.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n fast_strptime(\"9/1/01\", \"%y/%m/%d\")\n ```\n :::\n\n\n- `parse_date_time()`: Easier strptime.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n parse_date_time(\"09-01-01\", \"ymd\")\n ```\n :::\n\n\n### Get and Set Components\n\nUse an accessor function to get a component.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nd\n```\n\n::: {.cell-output .cell-output-stdout}\n```\n[1] \"2017-11-28\"\n```\n:::\n\n```{.r .cell-code}\nday(d)\n```\n\n::: {.cell-output .cell-output-stdout}\n```\n[1] 28\n```\n:::\n:::\n\n\nAssign into an accessor function to change a component in place.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nday(d) <- 1\nd\n```\n\n::: {.cell-output .cell-output-stdout}\n```\n[1] \"2017-11-01\"\n```\n:::\n:::\n\n\n- `date(x)`: Date component.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n date(dt)\n ```\n :::\n\n\n- `year(x)`: Year.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n year(dt)\n ```\n :::\n\n\n- `isoyear(x)`: The ISO 8601 year.\n\n- `epiyear(x)`: Epidemiological year.\n\n- `month(x, label, abbr)`: Month.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n month(dt)\n ```\n :::\n\n\n- `day(x)`: Day of the month.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n day(dt)\n ```\n :::\n\n\n- `wday(x, label, abbr)`: Day of week.\n\n- `qday(x)`: Day of quarter.\n\n- `hour(x)`: Hour.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n hour(dt)\n ```\n :::\n\n\n- `minute(x)`: Minutes.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n minute(dt)\n ```\n :::\n\n\n- `second(x)`: Seconds.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n second(dt)\n ```\n :::\n\n\n- `tz(x)`: Time zone.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n tz(dt)\n ```\n :::\n\n\n- `week(x)`: Week of the year.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n week(dt)\n ```\n :::\n\n\n- `isoweek()`: ISO 8601 week.\n\n- `epiweek()`: Epidemiological week.\n\n- `quarter(x)`: Quarter.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n quarter(dt)\n ```\n :::\n\n\n- `semester(x, with_year = FALSE)`: Semester.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n semester(dt)\n ```\n :::\n\n\n- `am(x)`: Is it in the am?\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n am(dt)\n ```\n :::\n\n\n- `pm(x)`: Is it in the pm?\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n pm(dt)\n ```\n :::\n\n\n- `dst(x)`: Is it daylight savings?\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n dst(d)\n ```\n :::\n\n\n- `leap_year(x)`: Is it a leap year?\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n leap_year(d)\n ```\n :::\n\n\n- `update(object, ..., simple = FALSE)`\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n update(dt, mday = 2, hour = 1)\n ```\n :::\n\n\n## Round Date-times\n\n- `floor_date(x, unit = \"second\")`: Round down to nearest unit.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n floor_date(dt, unit = \"month\")\n ```\n :::\n\n\n- `round_date(x, unit = \"second\")`: Round to nearest unit.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n round_date(dt, unit = \"month\")\n ```\n :::\n\n\n- `ceiling_date(x, unit = \"second\")`: Round up to the nearest unit.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n ceiling_date(dt, unit = \"month\")\n ```\n :::\n\n\nValid units are second, minute, hour, day, week, month, bimonth, quarter, season, halfyear and year.\n\n- `rollback(dates, roll_to_first = FALSE, preserve_hms = TRUE)`: Roll back to last day of previous month.\n Also `rollforward()`.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n rollback(dt)\n ```\n :::\n\n\n## Stamp Date-times\n\n`stamp()`: Derive a template from an example string and return a new function that will apply the template to date-times.\nAlso `stamp_date()` and `stamp_time()`.\n\n1. Derive a template, create a function\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n sf <- stamp(\"Created Sunday, Jan 17, 1999 3:34\")\n ```\n :::\n\n\n2. Apply the template to dates\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n sf(ymd(\"2010-04-05\"))\n ```\n \n ::: {.cell-output .cell-output-stdout}\n ```\n [1] \"Created Monday, Apr 05, 2010 00:00\"\n ```\n :::\n :::\n\n\n**Tip: use a date with day \\> 12**\n\n## Time Zones\n\nR recognizes \\~600 time zones.\nEach encodes the time zone, Daylight Savings Time, and historical calendar variations for an area.\nR assigns *one* time zone per vector.\n\nUse the `UTC` time zone to avoid Daylight Savings.\n\n- `OlsonNames()`: Returns a list of valid time zone names.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n OlsonNames()\n ```\n :::\n\n\n- `Sys.timezone()`: Gets current time zone.\n\n- `with_tz(time, tzone = \"\")`: Get the **same date-time** in a new time zone (a new clock time).\n Also `local_time(dt, tz, units)`.\n For example, 4:00 Pacific becomes 5:00 Mountain, or 6:00 Central, or 7:00 Eastern.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n with_tz(dt, \"US/Pacific\")\n ```\n :::\n\n\n- `force_tz(time, tzone = \"\")`: Get the **same clock time** in a new time zone (a new date-time).\n Also `force_tzs()`.\n For example, 7:00 Pacific becomes 7:00 Mountain, or 7:00 Central, or 7:00 Eastern.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n force_tz(dt, \"US/Pacific\")\n ```\n :::\n\n\n## Math with Date-times\n\nLubridate provides three classes of timespans to facilitate math with dates and date-times.\n\nMath with date-times relies on the **timeline**, which behaves inconsistently.\nConsider how the timeline behaves during:\n\n- A normal day:\n\n\n::: {.cell}\n\n```{.r .cell-code}\nnor <- ymd_hms(\"2018-01-01 01:30:00\", tz = \"US/Eastern\")\n```\n:::\n\n\n- The start of daylight savings (spring forward):\n\n\n::: {.cell}\n\n```{.r .cell-code}\ngap <- ymd_hms(\"2018-03-11 01:30:00\", tz = \"US/Eastern\")\n```\n:::\n\n\n- The end of daylight savings (fall back):\n\n\n::: {.cell}\n\n```{.r .cell-code}\nlap <- ymd_hms(\"2018-11-04 00:30:00\", tz = \"US/Eastern\")\n```\n:::\n\n\n- Leap years and leap seconds:\n\n\n::: {.cell}\n\n```{.r .cell-code}\nleap <- ymd(\"2019-03-01\")\n```\n:::\n\n\n**Periods** track changes in clock times, which ignore time line irregularities.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nnor + minutes(90)\ngap + minutes(90)\nlap + minutes(90)\nleap + years(1)\n```\n:::\n\n\n**Durations** track the passage of physical time, which deviates from clock time when irregularities occur.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nnor + dminutes(90)\ngap + dminutes(90)\nlap + dminutes(90)\nleap + dyears(1)\n```\n:::\n\n\n**Intervals** represent specific intervals of the timeline, bounded by start and end date-times.\n\n\n::: {.cell}\n\n```{.r .cell-code}\ninterval(nor, nor + minutes(90))\ninterval(gap, gap + minutes(90))\ninterval(lap, lap + minutes(90))\ninterval(leap, leap + years(1))\n```\n:::\n\n\nNot all years are 365 days due to **leap days**.\nNot all minutes are 60 seconds due to **leap seconds**.\nIt is possible to create an imaginary date by adding **months**, e.g.\nFebruary 31st.\n\n\n::: {.cell}\n\n```{.r .cell-code}\njan31 <- ymd(20180131)\njan31 + months(1)\n```\n\n::: {.cell-output .cell-output-stdout}\n```\n[1] NA\n```\n:::\n:::\n\n\n`%m+%` and `%m-%` will roll imaginary dates to the last day of the previous month.\n\n\n::: {.cell}\n\n```{.r .cell-code}\njan31 %m+% months(1)\n```\n\n::: {.cell-output .cell-output-stdout}\n```\n[1] \"2018-02-28\"\n```\n:::\n:::\n\n\n`add_with_rollback(e1, e2, roll_to_first = TRUE)` will roll imaginary dates to the first day of the new month.\n\n\n::: {.cell}\n\n```{.r .cell-code}\nadd_with_rollback(jan31, months(1), roll_to_first = TRUE)\n```\n\n::: {.cell-output .cell-output-stdout}\n```\n[1] \"2018-03-01\"\n```\n:::\n:::\n\n\n### Periods\n\nAdd or subtract periods to model events that happen a specific clock times, the the NYSE opening bell.\n\nMake a period with the name of a time unit **pluralized**, e.g.\n\n\n::: {.cell}\n\n```{.r .cell-code}\np <- months(3) + days(12)\n\n# Shows the number of months, number of days, etc.\np\n```\n\n::: {.cell-output .cell-output-stdout}\n```\n[1] \"3m 12d 0H 0M 0S\"\n```\n:::\n:::\n\n\n- `years(x = 1)`: x years.\n\n- `months(x = 1)`: x months.\n\n- `weeks(x = 1)`: x weeks.\n\n- `days(x = 1)`: x days.\n\n- `hours(x = 1)`: x hours.\n\n- `minutes(x = 1)`: x minutes.\n\n- `seconds(x = 1)`: x seconds.\n\n- `milliseconds(x = 1)`: x milliseconds.\n\n- `microseconds(x = 1)`: x microseconds.\n\n- `nanoseconds(x = 1)`: x nanoseconds.\n\n- `picoseconds(x = 1)`: x picoseconds.\n\n- `period(num = NULL, units = \"second\", ...)`: An automation friendly period constructor.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n period(5, unit = \"years\")\n ```\n :::\n\n\n- `as.period(x, unit)`: Coerce a timespan to a period, optionally in the specified units.\n Also `is.period()`.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n as.period(p)\n ```\n :::\n\n\n- `period_to_seconds(x)`: Convert a period to the \"standard\" number of seconds implied by the period.\n Also `seconds_to_period()`.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n period_to_seconds(p)\n ```\n :::\n\n\n### Durations\n\nAdd or subtract durations to model physical processes, like battery life.\nDurations are stored as seconds, the only time unit with a consistent length.\n**Difftimes** are a class of durations found in base R.\n\nMake a duration with the name of a period prefixed with a *d*, e.g.\n\n\n::: {.cell}\n\n```{.r .cell-code}\ndd <- ddays(14)\n\n# Shows the exact length in seconds, and the equivalent in common units\ndd\n```\n\n::: {.cell-output .cell-output-stdout}\n```\n[1] \"1209600s (~2 weeks)\"\n```\n:::\n:::\n\n\n- `dyears(x = 1)`: 31536000x seconds.\n\n- `dmonths(x = 1)`: 2629800x seconds.\n\n- `dweeks(x = 1)`: 604800x seconds.\n\n- `ddays(x = 1)`: 86400x seconds.\n\n- `dhours(x = 1)`: 3600x seconds.\n\n- `dminutes(x = 1)`: 60x seconds.\n\n- `dseconds(x = 1)`: x seconds.\n\n- `dmilliseconds(x = 1)`: x \\* 10^-3^ seconds.\n\n- `dmicroseconds(x = 1)`: x \\* 10^-6^ seconds.\n\n- `dnanoseconds(x = 1)`: x \\* 10^-9^ seconds.\n\n- `dpicoseconds(x = 1)`: x \\* 10^-12^ seconds.\n\n- `duration(num = NULL, units = \"second\", ...)`: An automation friendly duration constructor.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n duration(5, unit = \"years\")\n ```\n :::\n\n\n- `as.duration(x, ...)`: Coerce a timespan to a duration.\n Also `is.duration()`, `is.difftime()`.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n as.duration(p)\n ```\n :::\n\n\n- `make_difftime(x)`: Make diffime with the specified number of units.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n make_difftime(99999)\n ```\n :::\n\n\n### Intervals\n\nDivide an interval by a duration to determine its physical length, divide by an interval by a period to determine its implied length in clock time.\n\nMake an interval with `interval()` or `%--%`, e.g.\n\n\n::: {.cell}\n\n```{.r .cell-code}\ni <- interval(ymd(\"2017-01-01\"), d)\ni\n```\n\n::: {.cell-output .cell-output-stdout}\n```\n[1] 2017-01-01 UTC--2017-11-01 UTC\n```\n:::\n\n```{.r .cell-code}\n# Shows the exact length in seconds, and the equivalent in common units\nj <- d %--% ymd(\"2017-12-31\")\nj\n```\n\n::: {.cell-output .cell-output-stdout}\n```\n[1] 2017-11-01 UTC--2017-12-31 UTC\n```\n:::\n:::\n\n\n- `a %within% b`: Does interval or dte0time `a` fall within interval `b`?\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n now() %within% i\n ```\n :::\n\n\n- `int_start(int)`: Access/set the start date-time of an interval.\n Also `int_end()`.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n int_start(i) <- now()\n int_start(i)\n ```\n :::\n\n\n- `int_aligns(int1, int2)`: Do two intervals share a boundary?\n Also `int_overlaps()`.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n int_aligns(i, j)\n ```\n :::\n\n\n- `int_diff(times)`: Make the intervals that occur between the date-times in a vector.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n v <- c(dt, dt + 100, dt + 1000)\n int_diff(v)\n ```\n :::\n\n\n- `int_flip(int)`: Reverse the direction of an interval.\n Also `int_standardize()`.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n int_flip(i)\n ```\n :::\n\n\n- `int_length(int)`: Length in seconds.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n int_length(i)\n ```\n :::\n\n\n- `int_shift(int, by)`: Shifts an interval up or down the timeline by a timespan.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n int_shift(i, days(-1))\n ```\n :::\n\n\n- `as.interval(x, start, ...)`: Coerce a timespan to an interval with the start date-time.\n Also `is.interval()`.\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n as.interval(days(-1), start = now())\n ```\n :::\n\n\n------------------------------------------------------------------------\n\nCC BY SA Posit Software, PBC • [info\\@posit.co](mailto:info@posit.co) • [posit.co](https://posit.co)\n\nLearn more at [lubridate.tidyverse.org](https://lubridate.tidyverse.org).\n\nUpdated: 2023-06.\n\n\n::: {.cell}\n\n```{.r .cell-code}\npackageVersion(\"lubridate\")\n```\n\n::: {.cell-output .cell-output-stdout}\n```\n[1] '1.9.2'\n```\n:::\n:::\n\n\n------------------------------------------------------------------------\n", - "supporting": [], + "engine": "knitr", + "markdown": "---\ntitle: \"Dates and times with lubridate :: Cheatsheet\"\ndescription: \" \"\nimage-alt: \"\"\nexecute:\n eval: true\n output: false\n warning: false\n---\n\n::: {.cell .column-margin}\n\"Hex\n

\n

Download PDF

\n\"\"/\n
\n

Translations (PDF)

\n* Portuguese\n* Russian\n* Spanish\n* Ukrainian\n* Vietnamese\n:::\n\n\n\n\n## Date-times\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nlibrary(lubridate)\n```\n:::\n\n\n\n\n\n\nA **date-time** is a point on the timeline, stored as the number of seconds since 1970-01-01 00:00:00 UTC\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\ndt <- as_datetime(1511870400)\n```\n:::\n\n\n\n\nA **date** is a day stored as the number of days since 1970-01-01\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nd <- as_date(17498)\n```\n:::\n\n\n\n\nAn hms is a **time** stored as the number of seconds since 00:00:00\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nt <- hms::as_hms(85)\n```\n:::\n\n\n\n\n### Parse Date-Times\n\nConvert strings or numbers to date-times\n\n1. Identify the order of the year (**y**), month (**m**), day (**d**), hour (**h**), minute (**m**) and second (**s**) elements in your data.\n\n2. Use the function below whose name replicates the order.\n Each accepts a `tz` argument to set the time zone, e.g. `ymd(x, tz = \"UTC\")`.\n\n- `ymd_hms()`, `ymd_hm()`, `ymd_h()`\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n ymd_hms(\"2017-11-28T14:02:00\")\n ```\n :::\n\n\n\n\n- `ydm_hms()`, `ydm_hm()`, `ydm_h()`\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n ydm_hms(\"2017-22-12 10:00:00\")\n ```\n :::\n\n\n\n\n- `mdy_hms()`, `mdy_hm()`, `mdy_h()`\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n mdy_hms(\"11/28/2017 1:02:03\")\n ```\n :::\n\n\n\n\n- `dmy_hms()`, `dmy_hm()`, `dmy_h()`\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n dmy_hms(\"1 Jan 2017 23:59:59\")\n ```\n :::\n\n\n\n\n- `ymd()`, `ydm()`\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n ymd(20170131)\n ```\n :::\n\n\n\n\n- `mdy()`, `myd()`\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n mdy(\"July 4th, 2000\")\n ```\n :::\n\n\n\n\n- `dmy()`, `dym()`\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n dmy(\"4th of July '99\")\n ```\n :::\n\n\n\n\n- `yq()`: Q for quarter.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n yq(\"2001: Q3\")\n ```\n :::\n\n\n\n\n- `my()`, `ym()`\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n my(\"07-2020\")\n ```\n :::\n\n\n\n\n- `hms::hms()`: Also `lubridate::hms()`, `hm()`, and `ms()`, which return periods\\*.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n hms::hms(seconds = 0, minutes = 1, hours = 2)\n ```\n :::\n\n\n\n\n- `date_decimal(decimal, tz = \"UTC\")`\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n date_decimal(2017.5)\n ```\n :::\n\n\n\n\n- `now(tzone = \"\")`: Current time in tz (defaults to system tz).\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n now()\n ```\n :::\n\n\n\n\n- `today(tzone = \"\")`: Current date in a tz (defaults to system tz).\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n today()\n ```\n :::\n\n\n\n\n- `fast_strptime()`: Faster strptime.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n fast_strptime(\"9/1/01\", \"%y/%m/%d\")\n ```\n :::\n\n\n\n\n- `parse_date_time()`: Easier strptime.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n parse_date_time(\"09-01-01\", \"ymd\")\n ```\n :::\n\n\n\n\n### Get and Set Components\n\nUse an accessor function to get a component.\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nd\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] \"2017-11-28\"\n```\n\n\n:::\n\n```{.r .cell-code}\nday(d)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 28\n```\n\n\n:::\n:::\n\n\n\n\nAssign into an accessor function to change a component in place.\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nday(d) <- 1\nd\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] \"2017-11-01\"\n```\n\n\n:::\n:::\n\n\n\n\n- `date(x)`: Date component.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n date(dt)\n ```\n :::\n\n\n\n\n- `year(x)`: Year.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n year(dt)\n ```\n :::\n\n\n\n\n- `isoyear(x)`: The ISO 8601 year.\n\n- `epiyear(x)`: Epidemiological year.\n\n- `month(x, label, abbr)`: Month.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n month(dt)\n ```\n :::\n\n\n\n\n- `day(x)`: Day of the month.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n day(dt)\n ```\n :::\n\n\n\n\n- `wday(x, label, abbr)`: Day of week.\n\n- `qday(x)`: Day of quarter.\n\n- `hour(x)`: Hour.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n hour(dt)\n ```\n :::\n\n\n\n\n- `minute(x)`: Minutes.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n minute(dt)\n ```\n :::\n\n\n\n\n- `second(x)`: Seconds.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n second(dt)\n ```\n :::\n\n\n\n\n- `tz(x)`: Time zone.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n tz(dt)\n ```\n :::\n\n\n\n\n- `week(x)`: Week of the year.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n week(dt)\n ```\n :::\n\n\n\n\n- `isoweek()`: ISO 8601 week.\n\n- `epiweek()`: Epidemiological week.\n\n- `quarter(x)`: Quarter.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n quarter(dt)\n ```\n :::\n\n\n\n\n- `semester(x, with_year = FALSE)`: Semester.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n semester(dt)\n ```\n :::\n\n\n\n\n- `am(x)`: Is it in the am?\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n am(dt)\n ```\n :::\n\n\n\n\n- `pm(x)`: Is it in the pm?\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n pm(dt)\n ```\n :::\n\n\n\n\n- `dst(x)`: Is it daylight savings?\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n dst(d)\n ```\n :::\n\n\n\n\n- `leap_year(x)`: Is it a leap year?\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n leap_year(d)\n ```\n :::\n\n\n\n\n- `update(object, ..., simple = FALSE)`\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n update(dt, mday = 2, hour = 1)\n ```\n :::\n\n\n\n\n## Round Date-times\n\n- `floor_date(x, unit = \"second\")`: Round down to nearest unit.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n floor_date(dt, unit = \"month\")\n ```\n :::\n\n\n\n\n- `round_date(x, unit = \"second\")`: Round to nearest unit.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n round_date(dt, unit = \"month\")\n ```\n :::\n\n\n\n\n- `ceiling_date(x, unit = \"second\")`: Round up to the nearest unit.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n ceiling_date(dt, unit = \"month\")\n ```\n :::\n\n\n\n\nValid units are second, minute, hour, day, week, month, bimonth, quarter, season, halfyear and year.\n\n- `rollback(dates, roll_to_first = FALSE, preserve_hms = TRUE)`: Roll back to last day of previous month.\n Also `rollforward()`.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n rollback(dt)\n ```\n :::\n\n\n\n\n## Stamp Date-times\n\n`stamp()`: Derive a template from an example string and return a new function that will apply the template to date-times.\nAlso `stamp_date()` and `stamp_time()`.\n\n1. Derive a template, create a function\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n sf <- stamp(\"Created Sunday, Jan 17, 1999 3:34\")\n ```\n :::\n\n\n\n\n2. Apply the template to dates\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n sf(ymd(\"2010-04-05\"))\n ```\n \n ::: {.cell-output .cell-output-stdout}\n \n ```\n [1] \"Created Monday, Apr 05, 2010 00:00\"\n ```\n \n \n :::\n :::\n\n\n\n\n**Tip: use a date with day \\> 12**\n\n## Time Zones\n\nR recognizes \\~600 time zones.\nEach encodes the time zone, Daylight Savings Time, and historical calendar variations for an area.\nR assigns *one* time zone per vector.\n\nUse the `UTC` time zone to avoid Daylight Savings.\n\n- `OlsonNames()`: Returns a list of valid time zone names.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n OlsonNames()\n ```\n :::\n\n\n\n\n- `Sys.timezone()`: Gets current time zone.\n\n- `with_tz(time, tzone = \"\")`: Get the **same date-time** in a new time zone (a new clock time).\n Also `local_time(dt, tz, units)`.\n For example, 4:00 Pacific becomes 5:00 Mountain, or 6:00 Central, or 7:00 Eastern.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n with_tz(dt, \"US/Pacific\")\n ```\n :::\n\n\n\n\n- `force_tz(time, tzone = \"\")`: Get the **same clock time** in a new time zone (a new date-time).\n Also `force_tzs()`.\n For example, 7:00 Pacific becomes 7:00 Mountain, or 7:00 Central, or 7:00 Eastern.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n force_tz(dt, \"US/Pacific\")\n ```\n :::\n\n\n\n\n## Math with Date-times\n\nLubridate provides three classes of timespans to facilitate math with dates and date-times.\n\nMath with date-times relies on the **timeline**, which behaves inconsistently.\nConsider how the timeline behaves during:\n\n- A normal day:\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nnor <- ymd_hms(\"2018-01-01 01:30:00\", tz = \"US/Eastern\")\n```\n:::\n\n\n\n\n- The start of daylight savings (spring forward):\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\ngap <- ymd_hms(\"2018-03-11 01:30:00\", tz = \"US/Eastern\")\n```\n:::\n\n\n\n\n- The end of daylight savings (fall back):\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nlap <- ymd_hms(\"2018-11-04 00:30:00\", tz = \"US/Eastern\")\n```\n:::\n\n\n\n\n- Leap years and leap seconds:\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nleap <- ymd(\"2019-03-01\")\n```\n:::\n\n\n\n\n**Periods** track changes in clock times, which ignore time line irregularities.\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nnor + minutes(90)\ngap + minutes(90)\nlap + minutes(90)\nleap + years(1)\n```\n:::\n\n\n\n\n**Durations** track the passage of physical time, which deviates from clock time when irregularities occur.\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nnor + dminutes(90)\ngap + dminutes(90)\nlap + dminutes(90)\nleap + dyears(1)\n```\n:::\n\n\n\n\n**Intervals** represent specific intervals of the timeline, bounded by start and end date-times.\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\ninterval(nor, nor + minutes(90))\ninterval(gap, gap + minutes(90))\ninterval(lap, lap + minutes(90))\ninterval(leap, leap + years(1))\n```\n:::\n\n\n\n\nNot all years are 365 days due to **leap days**.\nNot all minutes are 60 seconds due to **leap seconds**.\nIt is possible to create an imaginary date by adding **months**, e.g.\nFebruary 31st.\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\njan31 <- ymd(20180131)\njan31 + months(1)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] NA\n```\n\n\n:::\n:::\n\n\n\n\n`%m+%` and `%m-%` will roll imaginary dates to the last day of the previous month.\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\njan31 %m+% months(1)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] \"2018-02-28\"\n```\n\n\n:::\n:::\n\n\n\n\n`add_with_rollback(e1, e2, roll_to_first = TRUE)` will roll imaginary dates to the first day of the new month.\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\nadd_with_rollback(jan31, months(1), roll_to_first = TRUE)\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] \"2018-03-01\"\n```\n\n\n:::\n:::\n\n\n\n\n### Periods\n\nAdd or subtract periods to model events that happen at specific clock times, like the NYSE opening bell.\n\nMake a period with the name of a time unit **pluralized**, e.g.\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\np <- months(3) + days(12)\n\n# Shows the number of months, number of days, etc.\np\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] \"3m 12d 0H 0M 0S\"\n```\n\n\n:::\n:::\n\n\n\n\n- `years(x = 1)`: x years.\n\n- `months(x = 1)`: x months.\n\n- `weeks(x = 1)`: x weeks.\n\n- `days(x = 1)`: x days.\n\n- `hours(x = 1)`: x hours.\n\n- `minutes(x = 1)`: x minutes.\n\n- `seconds(x = 1)`: x seconds.\n\n- `milliseconds(x = 1)`: x milliseconds.\n\n- `microseconds(x = 1)`: x microseconds.\n\n- `nanoseconds(x = 1)`: x nanoseconds.\n\n- `picoseconds(x = 1)`: x picoseconds.\n\n- `period(num = NULL, units = \"second\", ...)`: An automation friendly period constructor.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n period(5, unit = \"years\")\n ```\n :::\n\n\n\n\n- `as.period(x, unit)`: Coerce a timespan to a period, optionally in the specified units.\n Also `is.period()`.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n as.period(p)\n ```\n :::\n\n\n\n\n- `period_to_seconds(x)`: Convert a period to the \"standard\" number of seconds implied by the period.\n Also `seconds_to_period()`.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n period_to_seconds(p)\n ```\n :::\n\n\n\n\n### Durations\n\nAdd or subtract durations to model physical processes, like battery life.\nDurations are stored as seconds, the only time unit with a consistent length.\n**Difftimes** are a class of durations found in base R.\n\nMake a duration with the name of a period prefixed with a *d*, e.g.\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\ndd <- ddays(14)\n\n# Shows the exact length in seconds, and the equivalent in common units\ndd\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] \"1209600s (~2 weeks)\"\n```\n\n\n:::\n:::\n\n\n\n\n- `dyears(x = 1)`: 31536000x seconds.\n\n- `dmonths(x = 1)`: 2629800x seconds.\n\n- `dweeks(x = 1)`: 604800x seconds.\n\n- `ddays(x = 1)`: 86400x seconds.\n\n- `dhours(x = 1)`: 3600x seconds.\n\n- `dminutes(x = 1)`: 60x seconds.\n\n- `dseconds(x = 1)`: x seconds.\n\n- `dmilliseconds(x = 1)`: x \\* 10^-3^ seconds.\n\n- `dmicroseconds(x = 1)`: x \\* 10^-6^ seconds.\n\n- `dnanoseconds(x = 1)`: x \\* 10^-9^ seconds.\n\n- `dpicoseconds(x = 1)`: x \\* 10^-12^ seconds.\n\n- `duration(num = NULL, units = \"second\", ...)`: An automation friendly duration constructor.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n duration(5, unit = \"years\")\n ```\n :::\n\n\n\n\n- `as.duration(x, ...)`: Coerce a timespan to a duration.\n Also `is.duration()`, `is.difftime()`.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n as.duration(p)\n ```\n :::\n\n\n\n\n- `make_difftime(x)`: Make diffime with the specified number of units.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n make_difftime(99999)\n ```\n :::\n\n\n\n\n### Intervals\n\nDivide an interval by a duration to determine its physical length, divide by an interval by a period to determine its implied length in clock time.\n\nMake an interval with `interval()` or `%--%`, e.g.\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\ni <- interval(ymd(\"2017-01-01\"), d)\ni\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 2017-01-01 UTC--2017-11-01 UTC\n```\n\n\n:::\n\n```{.r .cell-code}\n# Shows the exact length in seconds, and the equivalent in common units\nj <- d %--% ymd(\"2017-12-31\")\nj\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] 2017-11-01 UTC--2017-12-31 UTC\n```\n\n\n:::\n:::\n\n\n\n\n- `a %within% b`: Does interval or dte0time `a` fall within interval `b`?\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n now() %within% i\n ```\n :::\n\n\n\n\n- `int_start(int)`: Access/set the start date-time of an interval.\n Also `int_end()`.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n int_start(i) <- now()\n int_start(i)\n ```\n :::\n\n\n\n\n- `int_aligns(int1, int2)`: Do two intervals share a boundary?\n Also `int_overlaps()`.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n int_aligns(i, j)\n ```\n :::\n\n\n\n\n- `int_diff(times)`: Make the intervals that occur between the date-times in a vector.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n v <- c(dt, dt + 100, dt + 1000)\n int_diff(v)\n ```\n :::\n\n\n\n\n- `int_flip(int)`: Reverse the direction of an interval.\n Also `int_standardize()`.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n int_flip(i)\n ```\n :::\n\n\n\n\n- `int_length(int)`: Length in seconds.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n int_length(i)\n ```\n :::\n\n\n\n\n- `int_shift(int, by)`: Shifts an interval up or down the timeline by a timespan.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n int_shift(i, days(-1))\n ```\n :::\n\n\n\n\n- `as.interval(x, start, ...)`: Coerce a timespan to an interval with the start date-time.\n Also `is.interval()`.\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n as.interval(days(-1), start = now())\n ```\n :::\n\n\n\n\n------------------------------------------------------------------------\n\nCC BY SA Posit Software, PBC • [info\\@posit.co](mailto:info@posit.co) • [posit.co](https://posit.co)\n\nLearn more at [lubridate.tidyverse.org](https://lubridate.tidyverse.org).\n\nUpdated: 2024-05.\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\npackageVersion(\"lubridate\")\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] '1.9.3'\n```\n\n\n:::\n:::\n\n\n\n\n------------------------------------------------------------------------\n", + "supporting": [ + "lubridate_files" + ], "filters": [ "rmarkdown/pagebreak.lua" ], diff --git a/_freeze/html/quarto/execute-results/html.json b/_freeze/html/quarto/execute-results/html.json index 53b9dbb9..61f354e2 100644 --- a/_freeze/html/quarto/execute-results/html.json +++ b/_freeze/html/quarto/execute-results/html.json @@ -1,7 +1,8 @@ { - "hash": "bcf58e7473223cdb5ba43bb16c3e8981", + "hash": "9639961638a419b0e8fac75c02f81177", "result": { - "markdown": "---\ntitle: \"Publish and Share with Quarto :: Cheatsheet\"\ndescription: \"QMD Edition\"\nimage-alt: \"\"\nengine: knitr\nexecute:\n eval: true\n output: false\n warning: false\ncode-overflow: wrap\n---\n\n\n::: column-margin\n\n```{=html}\n\"Hex\n

\n```\n\n:::\n\n\n::: {.cell .column-margin}\n\n

Download PDF

\n\"\"/\n
\n

\n:::\n\n\n## Overview\n\n![](images/quarto-illustration.png){fig-alt=\"A schematic representing the multi-language input (e.g. Python, R, Observable, Julia) and multi-format output (e.g. PDF, html, Word documents, and more) versatility of Quarto.\"}[^credit] \n\n[^credit]: Artwork from \"Hello, Quarto\" keynote by Julia Lowndes and Mine Çetinkaya-Rundel, presented at RStudio Conference 2022. Illustrated by [Allison Horst](https://allisonhorst.com/allison-horst).\n\n* **Author**: Write and code in plain text. Author documents as .qmd files, or Jupyter notebooks. Write in a rich Markdown syntax.\n\n* **Render**: Generate documents, presentations and more. Produce HTML, PDF, MS Word, reveal.js, MS Powerpoint, Beamer, websites, blogs, books...\n\n* **Share**: Share your work with the world. Quickly deploy to GitHub Pages, Netlify, Quarto Pub, Posit Cloud, or Posit Connect.\n\n### Get Quarto\n\nGet Quarto from: \n\nOr, use version **bundled with RStudio.**\n\n### Get Started\n\n\n\n## Author\n\n### Source File: hello.qmd\n\n````{.markdown}\n---\ntitle: \"Hello, Penguins\"\nformat: html\nexecute:\n echo: false\n---\n\n## Meet the penguins\n\nThe `penguins` data contains size measurements for \npenguins from three islands in the Palmer Archipelago, \nAntarctica.\n\nThe three species of penguins have quite distinct \ndistributions of physical dimensions (@fig-penguins).\n\n```{{r}}\n#| label: fig-penguins\n#| fig-cap: \"Dimensions of penguins across three species.\"\n#| warning: false\nlibrary(tidyverse, quietly = TRUE)\nlibrary(palmerpenguins)\npenguins |>\n ggplot(aes(x = flipper_length_mm, y = bill_length_mm)) +\n geom_point(aes(color = species)) +\n scale_color_manual(\n values = c(\"darkorange\", \"purple\", \"cyan4\")) +\n theme_minimal()\n```\n````\n\n### Highlights in the source file\n\n* Set format(s) and options. Use YAML Syntax.\n \n ```` markdown\n ---\n title: \"Hello, Penguins\"\n format: html\n execute:\n echo: false\n ---\n ````\n\n* `## Write with **Markdown**` \n \n **RStudio**: Help > Markdown Quick Reference\n \n RStudio & VS Code: Use the **Visual Editor**\n\n ```` markdown\n ## Meet the penguins\n \n The `penguins` data contains size measurements for \n penguins from three islands in the Palmer Archipelago, \n Antarctica.\n \n The three species of penguins have quite distinct \n distributions of physical dimensions (@fig-penguins).\n ````\n \n* Include code. R, Python, Julia, Observable, or any language with a Jupyter kernel.\n\n ````markdown\n ```{{r}}\n #| label: fig-penguins\n #| fig-cap: \"Dimensions of penguins across three species.\"\n #| warning: false\n library(tidyverse, quietly = TRUE)\n library(palmerpenguins)\n penguins |>\n ggplot(aes(x = flipper_length_mm, y = bill_length_mm)) +\n geom_point(aes(color = species)) +\n scale_color_manual(\n values = c(\"darkorange\", \"purple\", \"cyan4\")) +\n theme_minimal()\n ```\n ````\n\n### Use a tool with a rich authoring experience\n\n[RStudio](https://posit.co/products/open-source/rstudio/), or \n[Visual Studio Code](https://code.visualstudio.com/) + [Quarto extension](https://marketplace.visualstudio.com/items?itemName=quarto.quarto)\n\n* **Run** code cells as you write\n* **Render** with a button or keyboard shortcut\n* Edit Quarto documents with a **Visual Editor** \n \n ![](images/quarto-visual-editor.png){fig-alt=\"Screenshot of the Visual Editor toolbar. Toolbar shows menu items: Normal with dropdown, bold, italics, code, bulleted list, numbered list, link, image, Format dropdown, Insert dropdown and Table dropdown.\"}\n \n - Apply formatting in Visual Editor. Saved as Markdown in source.\n \n - Insert elements like code cells, cross references, and more.\n\n### Or any text editor\n\nQuarto documents (.qmd) can be edited in any tool that edits text.\n\n## Render\n\n**Save,** then render to **preview** the document output. \n\n```{.bash filename=\"Terminal\"}\nquarto preview hello.qmd\n```\n\nRStudio & VS Code: Use **Render** button\n\nThe resulting HTML/PDF/MS Word/etc. document will be created and saved in the same directory as the source .qmd file.\n\n### Rendered output: hello.html\n\n![](images/quarto-rendered-output.png){fig-alt=\"Screenshot of a webpage with the title 'Hello, Penguins'. There is a subheading 'Meet the penguins' followed by a paragraph of text including a link to 'Figure 1', then a scatterplot.\"}\n\n### Highlights in the rendered output\n\n* Features for scientific publishing. Cross references, citations, equations, and more.\n\n* Output integrated into document. Control how output appears with special comments in your code.\n\n### Behind the Scenes\n\nWhen you render a document, Quarto:\n\n1. Runs the code and embeds results and text into an .md file with:\n - **Knitr**, if any `{r}` cells, or\n - **Jupyter**, if any other cells.\n \n2. Converts the .md file into the output format with Pandoc.\n\n## Publish\n\n``` {.bash filename=\"Terminal\"}\nquarto publish {venue} hello.qmd\n```\n\n`{venue}`: quarto-pub, connect, gh-pages, netlify, confluence, (*v1.4*) posit-cloud\n\nRStudio: Use **Publish** button ![](images/quarto-rstudio-publish.png){fig-alt=\"Publish button icon in RStudio\" width=\"10%\"}\n\n- [**Quarto Pub**](https://quartopub.com/) Free publishing service for Quarto content.\n\n- [**Posit Cloud**](https://posit.cloud/) Cloud-hosted, control access to project and output. ![](images/quarto-rstudio-publish.png){fig-alt=\"Push button publishing from RStudio\" width=\"10%\"}\n\n- [**Posit Connect**](https://posit.co/products/enterprise/connect/) Org-hosted, control access, schedule updates. ![](images/quarto-rstudio-publish.png){fig-alt=\"Push button publishing from RStudio\" width=\"10%\"}\n\n## Quarto Projects\n\n### Create websites, books and more\n\nA directory of Quarto documents + a configuration file (`_quarto.yml`)\n\nSee examples at: \n\nGet started from the command line:\n\n``` {.bash filename=\"Terminal\"}\nquarto create project {type}\n```\n\n`{type}`: default, website, blog, book, confluence, (*v1.4*) manuscript\n\nRStudio: Use **File** \\> **New Project**\n\n## Include Code\n\n### Code Cells\n\nCode cells start with ```` ```{language} ````, and end with ```` ``` ````.\n\nRStudio & VS Code: Use **Insert Code Chunk/Cell**.\n\n::: {layout-ncol=\"2\"}\n```{{r}}\n#| label: chunk-id\n```\n\n```{{python}}\n#| label: chunk-id\n```\n:::\n\nOther languages: `{julia}`, `{ojs}`\n\nAdd code cell options with `#|` comments.\n\nCell options control [**execution**](#execution), [figures](#figures), [tables](#tables), layout and more. See them all at: \n\n### Execution Options {#execution}\n\n+-----------+-----------+----------------------------------------------------------+\n| Option | Default | Effects |\n+===========+===========+==========================================================+\n| `echo` | `true` | `false`: hide code in output\\ |\n| | | `fenced`: include code cell syntax |\n+-----------+-----------+----------------------------------------------------------+\n| `eval` | `true` | `false`: don't run code |\n+-----------+-----------+----------------------------------------------------------+\n| `include` | `true` | `false`: don't include code or results |\n+-----------+-----------+----------------------------------------------------------+\n| `output` | `true` | `false`: don't include results\\ |\n| | | `asis`: treat results as raw markdown |\n+-----------+-----------+----------------------------------------------------------+\n| `warning` | `true` | `false`: don't include warnings in output |\n+-----------+-----------+----------------------------------------------------------+\n| `error` | `false` | `true`: include error in output and continue with render |\n+-----------+-----------+----------------------------------------------------------+\n\nSet execution options at the **cell level**:\n\n::: {layout-ncol=\"2\"}\n```{{r}}\n#| echo: false\n```\n\n```{{python}}\n#| echo: false\n```\n:::\n\nSet options in code cells with `#|` comments and YAML syntax: `key: value`.\n\nOr globally in the YAML header with the **execute** option:\n\n``` yaml\n---\nexecute:\n echo: false\n---\n```\n\n### Inline Code\n\nUse computed values directly in text sections. Code is evaluated at render and results appear as text.\n\n::: {layout-ncol=\"3\"}\n
\n\n#### Knitr\n\nValue is `` `r 2 + 2` ``.\n\n
\n\n
\n\n#### Jupyter\n\n[v1.4]{.small .muted}\n\nValue is `` `{python} 2 + 2` ``.\n\n
\n\n
\n\n#### Output\n\nValue is 4.\n\n
\n:::\n\n## Set Formats and Options\n\n::: {layout-ncol=2}\n\n::: {#set-options}\n### Set Format Options\n\n``` yaml\n---\ntitle: \"My Document\"\nformat: \n html: \n code-fold: true\n toc: true\n---\n```\n\n- Indent format 2 spaces\n- Indent options 4 spaces\n:::\n\n::: {#multiple-formats}\n\n### Multiple Formats\n\n``` yaml\n---\ntitle: \"My Document\"\ntoc: true\nformat: \n html: \n code-fold: true\n pdf: default\n---\n```\n\n- Top-level options (e.g. `toc`) apply to all formats\n\n:::\n:::\n\nCommon values for `format`: html, pdf[^2], docx, odt, rtf, gfm, pptx, revealjs, beamer[^3]\n\n[^2]: PDFs and Beamer slides require LaTeX, use:\n\n ``` {.bash filename=\"Terminal\"}\n quarto install tinytex\n ```\n\n[^3]: PDFs and Beamer slides require LaTeX, use:\n\n ``` {.bash filename=\"Terminal\"}\n quarto install tinytex\n ```\n\n\nRender **all** formats:\n\n``` {.bash filename=\"Terminal\"}\nquarto render hello.qmd\n```\n\nRender a **specific** format:\n\n``` {.bash filename=\"Terminal\"}\nquarto render hello.qmd --to pdf\n```\n\n\n### Output Options Table\n\n\n::: {.cell tbl-cap='Important Options. The first column is the option name, an \"X\" in the next three columns indicates whether the option applies to the format, the fourth column decribes the options and possible values, the final column indicates whether the options can also be set in a code cell.'}\n::: {.cell-output-display}\n```{=html}\n
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n \n\n\n\n\n\n \n\n\n\n\n\n \n \n \n \n\n\n\n\n\n \n\n\n\n\n\n \n\n\n\n\n\n \n\n\n\n\n\n \n\n\n\n\n\n \n \n \n \n\n\n\n\n\n \n\n\n\n\n\n \n \n \n \n\n\n\n\n\n \n\n\n\n\n\n \n\n\n\n\n\n \n \n \n \n\n\n\n\n\n \n\n\n\n\n\n \n\n\n\n\n\n \n \n \n \n\n\n\n\n\n \n\n\n\n\n\n \n\n\n\n\n\n \n \n \n
Optionhtml/revealjspdf/beamerdocx/pptxDescriptioncell level?
Navigation
tocXXX

Add a table of contents (true or false)

\n
toc-depthXXX

Lowest level of headings to add to table of contents (e.g. 2, 3)

\n
anchor-sectionsX

Show section anchors on mouse hover (true or false)

\n
Style
highlight-styleXXX

Syntax highlighting theme (e.g. arrow, pygments, kate, zenburn)

\n
mainfont, monofontXX

Font name. HTML: sets CSS font-family; LaTeX: via fontspec package

\n
themeX

Bootswatch theme name (e.g. cosmo, darkly, solar etc.)

\n
cssX

CSS or SCSS file to use to style the document (e.g. “style.css”)

\n
reference-docX

docx/pptx file containing template styles (e.g. file.docx, file.pptx)

\n
NA
include-in-headerXX

Files of content to include in header of output document, also include-before-body, include-after-body

\n
keep-mdXXX

Keep intermediate files (true or false), also keep-tex, keep-ipynb

\n
LaTeX
documentclassX

LaTeX document class, set document options with classoption

\n
pdf-engineX

LaTeX engine to produce PDF output (xelatex, pdflatex, lualatex)

\n
cite-methodX

Method used to format citations (citeproc, natbib, biblatex)

\n
Code
code-foldX

Let readers toggle the display of R code (false, true, or show)

\n
X
code-toolsX

Add menu for hiding, showing, and downloading code (true or false)

\n
code-overflowX

Display of wide code (scroll, or wrap)

\n
X
Figures
fig-alignXXdocx only

Alignment of figures (default, left, right, center)

\n
X
fig-width, fig-heightXXX

Default width and height for figures in inches

\n
Knitr only
fig-formatXXX

Format for Matplotlib or R figures (retina, png, jpeg, svg, or pdf)

\n
\n
\n```\n:::\n:::\n\n\nVisit to see all options by format\n\n\n## Add Content\n\n### Figures {#figures}\n\n#### Markdown\n\n``` markdown\n![CAP](image.png){#fig-LABEL fig-alt=\"ALT\"}\n```\n\n#### Computation\n\n```{{python}}\n#| label: fig-LABEL\n#| fig-cap: CAP\n#| fig-alt: ALT\n{{ plot code here }}\n```\n\nOr `{r}`\n\n### Tables {#tables}\n\n#### Markdown\n\n``` markdown\n|object | radius|\n|:------|------:|\n|Sun | 696000|\n|Earth | 6371|\n\n: CAPTION {#tbl-LABEL}\n```\n\n#### Computation\n\nOutput a markdown table or an HTML table from your code.\n\n::: {layout-ncol=\"2\"}\n
\n\n##### Knitr\n\nUse `knitr::kable()` to produce markdown:\n\n```{{r}}\n#| label: tbl-LABEL\n#| tbl-cap: CAPTION\n\nknitr::kable(head(cars))\n```\n\nAlso see the R packages: gt, flextable, kableExtra.\n\n
\n\n
\n\n##### Jupyter\n\nAdd `Markdown()` to Markdown output:\n\n```{{python}}\n#| label: tbl-LABEL\n#| tbl-cap: CAPTION\nimport pandas as pd, tabulate\nfrom IPython.display import Markdown\ndf = pd.DataFrame({\"A\": [1, 2], \n \"B\": [1, 2]})\nMarkdown(df.to_markdown(index=False))\n```\n\n
\n:::\n\n\n### Cross References\n\n1. **Add labels:**\n\n - **Code cell:** add option `label: prefix-LABEL`\n - **Markdown:** add attribute `#prefix-LABEL`\n\n2. **Add references:** `@prefix-LABEL`, e.g.\n\n ``` markdown\n You can see in @fig-scatterplot, that...\n ```\n\n| `prefix` | Renders |\n|----------|------------|\n| `fig-` | Figure 1 |\n| `tbl-` | Table 1 |\n| `eq-` | Equation 1 |\n| `sec-` | Section 1 |\n\n### Citations\n\n1. Add bibliography **file** to the YAML header:\n\n ``` yaml\n ---\n bibliography: references.bib\n ---\n ```\n\n2. Add citations: `[@citation]`, or `@citation`\n\nRStudio & VS Code: Use **Insert Citations** dialog in the Visual Editor. \nBuild your bibliography file from your Zotero library, DOI, Crossref, DataCite, or PubMed.\n\n### Callouts\n\n``` markdown\n::: {.callout-tip}\n## Title\n\nText\n:::\n```\n\nInstead of `tip` use one of: `note`, `caution`, `warning`, or `important`:\n\n::: callout-tip\n## tip\n:::\n\n::: callout-note\n## note\n:::\n\n::: callout-caution\n## caution\n:::\n\n::: callout-warning\n## warning\n:::\n\n::: callout-important\n## important\n:::\n\n### Shortcodes\n\n``` {.markdown shortcodes=\"false\"}\n{{< include _file.qmd >}} \n```\n\n``` {.markdown shortcodes=\"false\"}\n{{< embed file.ipynb#id >}}\n```\n\n``` {.markdown shortcodes=\"false\"}\n{{< video video.mp4 >}}\n```\n\n------------------------------------------------------------------------\n\nCC BY SA Posit Software, PBC • [info\\@posit.co](mailto:info@posit.co) • [posit.co](https://posit.co)\n\nLearn more at [quarto.org](https://quarto.org).\n\nQuarto 1.3\n\nUpdated: 2023-08.\n\n------------------------------------------------------------------------\n", + "engine": "knitr", + "markdown": "---\ntitle: \"Publish and Share with Quarto :: Cheatsheet\"\ndescription: \"QMD Edition\"\nimage-alt: \"\"\nengine: knitr\nexecute:\n eval: true\n output: false\n warning: false\ncode-overflow: wrap\n---\n\n\n\n::: column-margin\n\n\n```{=html}\n\"Hex\n

\n```\n\n\n:::\n\n\n\n::: {.cell .column-margin}\n\n

Download PDF

\n\"\"/\n
\n

\n:::\n\n\n\n## Overview\n\n![](images/quarto-illustration.png){fig-alt=\"A schematic representing the multi-language input (e.g. Python, R, Observable, Julia) and multi-format output (e.g. PDF, html, Word documents, and more) versatility of Quarto.\"}[^1]\n\n[^1]: Artwork from \"Hello, Quarto\" keynote by Julia Lowndes and Mine Çetinkaya-Rundel, presented at RStudio Conference 2022.\n Illustrated by [Allison Horst](https://allisonhorst.com/allison-horst).\n\n- **Author**: Write and code in plain text.\n Author documents as .qmd files, or Jupyter notebooks.\n Write in a rich Markdown syntax.\n\n- **Render**: Generate documents, presentations and more.\n Produce HTML, PDF, MS Word, reveal.js, MS Powerpoint, Beamer, websites, blogs, books...\n\n- **Share**: Share your work with the world.\n Quickly deploy to GitHub Pages, Netlify, Quarto Pub, Posit Cloud, or Posit Connect.\n\n### Get Quarto\n\nGet Quarto from: \n\nOr, use version **bundled with RStudio.**\n\n### Get Started\n\n\n\n## Author\n\n### Source File: hello.qmd\n\n```` markdown\n---\ntitle: \"Hello, Penguins\"\nformat: html\nexecute:\n echo: false\n---\n\n## Meet the penguins\n\nThe `penguins` data contains size measurements for \npenguins from three islands in the Palmer Archipelago, \nAntarctica.\n\nThe three species of penguins have quite distinct \ndistributions of physical dimensions (@fig-penguins).\n\n```{{r}}\n#| label: fig-penguins\n#| fig-cap: \"Dimensions of penguins across three species.\"\n#| warning: false\nlibrary(tidyverse, quietly = TRUE)\nlibrary(palmerpenguins)\npenguins |>\n ggplot(aes(x = flipper_length_mm, y = bill_length_mm)) +\n geom_point(aes(color = species)) +\n scale_color_manual(\n values = c(\"darkorange\", \"purple\", \"cyan4\")) +\n theme_minimal()\n```\n````\n\n### Highlights in the source file\n\n- Set format(s) and options.\n Use YAML Syntax.\n\n ``` markdown\n ---\n title: \"Hello, Penguins\"\n format: html\n execute:\n echo: false\n ---\n ```\n\n- `## Write with **Markdown**`\n\n **RStudio**: Help \\> Markdown Quick Reference\n\n RStudio & VS Code: Use the **Visual Editor**\n\n ``` markdown\n ## Meet the penguins\n\n The `penguins` data contains size measurements for \n penguins from three islands in the Palmer Archipelago, \n Antarctica.\n\n The three species of penguins have quite distinct \n distributions of physical dimensions (@fig-penguins).\n ```\n\n- Include code.\n R, Python, Julia, Observable, or any language with a Jupyter kernel.\n\n ```` markdown\n ```{{r}}\n #| label: fig-penguins\n #| fig-cap: \"Dimensions of penguins across three species.\"\n #| warning: false\n library(tidyverse, quietly = TRUE)\n library(palmerpenguins)\n penguins |>\n ggplot(aes(x = flipper_length_mm, y = bill_length_mm)) +\n geom_point(aes(color = species)) +\n scale_color_manual(\n values = c(\"darkorange\", \"purple\", \"cyan4\")) +\n theme_minimal()\n ```\n ````\n\n### Use a tool with a rich authoring experience\n\n[RStudio](https://posit.co/products/open-source/rstudio/), or\\\n[Visual Studio Code](https://code.visualstudio.com/) + [Quarto extension](https://marketplace.visualstudio.com/items?itemName=quarto.quarto)\n\n- **Run** code cells as you write\n\n- **Render** with a button or keyboard shortcut\n\n- Edit Quarto documents with a **Visual Editor**\n\n ![](images/quarto-visual-editor.png){fig-alt=\"Screenshot of the Visual Editor toolbar. Toolbar shows menu items: Normal with dropdown, bold, italics, code, bulleted list, numbered list, link, image, Format dropdown, Insert dropdown and Table dropdown.\"}\n\n - Apply formatting in Visual Editor.\n Saved as Markdown in source.\n\n - Insert elements like code cells, cross references, and more.\n\n### Or any text editor\n\nQuarto documents (.qmd) can be edited in any tool that edits text.\n\n## Render\n\n**Save,** then render to **preview** the document output.\n\n``` {.bash filename=\"Terminal\"}\nquarto preview hello.qmd\n```\n\nRStudio & VS Code: Use **Render** button\n\nThe resulting HTML/PDF/MS Word/etc.\ndocument will be created and saved in the same directory as the source .qmd file.\n\n### Rendered output: hello.html\n\n![](images/quarto-rendered-output.png){fig-alt=\"Screenshot of a webpage with the title 'Hello, Penguins'. There is a subheading 'Meet the penguins' followed by a paragraph of text including a link to 'Figure 1', then a scatterplot.\"}\n\n### Highlights in the rendered output\n\n- Features for scientific publishing.\n Cross references, citations, equations, and more.\n\n- Output integrated into document.\n Control how output appears with special comments in your code.\n\n### Behind the Scenes\n\nWhen you render a document, Quarto:\n\n1. Runs the code and embeds results and text into an .md file with:\n - **Knitr**, if any `{r}` cells, or\n - **Jupyter**, if any other cells.\n2. Converts the .md file into the output format with Pandoc.\n\n## Publish\n\n``` {.bash filename=\"Terminal\"}\nquarto publish {venue} hello.qmd\n```\n\n`{venue}`: quarto-pub, connect, gh-pages, netlify, confluence, (*v1.4*) posit-cloud\n\nRStudio: Use **Publish** button ![](images/quarto-rstudio-publish.png){fig-alt=\"Publish button icon in RStudio\" width=\"10%\"}\n\n- [**Quarto Pub**](https://quartopub.com/) Free publishing service for Quarto content.\n\n- [**Posit Cloud**](https://posit.cloud/) Cloud-hosted, control access to project and output.\n ![](images/quarto-rstudio-publish.png){fig-alt=\"Push button publishing from RStudio\" width=\"10%\"}\n\n- [**Posit Connect**](https://posit.co/products/enterprise/connect/) Org-hosted, control access, schedule updates.\n ![](images/quarto-rstudio-publish.png){fig-alt=\"Push button publishing from RStudio\" width=\"10%\"}\n\n## Quarto Projects\n\n### Create websites, books and more\n\nA directory of Quarto documents + a configuration file (`_quarto.yml`)\n\nSee examples at: \n\nGet started from the command line:\n\n``` {.bash filename=\"Terminal\"}\nquarto create project {type}\n```\n\n`{type}`: default, website, blog, book, confluence, (*v1.4*) manuscript\n\nRStudio: Use **File** \\> **New Project**\n\n## Include Code\n\n### Code Cells\n\nCode cells start with ```` ```{language} ````, and end with ```` ``` ````.\n\nRStudio & VS Code: Use **Insert Code Chunk/Cell**.\n\n::: {layout-ncol=\"2\"}\n```{{r}}\n#| label: chunk-id\n```\n\n```{{python}}\n#| label: chunk-id\n```\n:::\n\nOther languages: `{julia}`, `{ojs}`\n\nAdd code cell options with `#|` comments.\n\nCell options control [**execution**](#execution), [figures](#figures), [tables](#tables), layout and more.\nSee them all at: \n\n### Execution Options {#execution}\n\n+-----------+-----------+----------------------------------------------------------+\n| Option | Default | Effects |\n+===========+===========+==========================================================+\n| `echo` | `true` | `false`: hide code in output\\ |\n| | | `fenced`: include code cell syntax |\n+-----------+-----------+----------------------------------------------------------+\n| `eval` | `true` | `false`: don't run code |\n+-----------+-----------+----------------------------------------------------------+\n| `include` | `true` | `false`: don't include code or results |\n+-----------+-----------+----------------------------------------------------------+\n| `output` | `true` | `false`: don't include results\\ |\n| | | `asis`: treat results as raw markdown |\n+-----------+-----------+----------------------------------------------------------+\n| `warning` | `true` | `false`: don't include warnings in output |\n+-----------+-----------+----------------------------------------------------------+\n| `error` | `false` | `true`: include error in output and continue with render |\n+-----------+-----------+----------------------------------------------------------+\n\nSet execution options at the **cell level**:\n\n::: {layout-ncol=\"2\"}\n```{{r}}\n#| echo: false\n```\n\n```{{python}}\n#| echo: false\n```\n:::\n\nSet options in code cells with `#|` comments and YAML syntax: `key: value`.\n\nOr globally in the YAML header with the **execute** option:\n\n``` yaml\n---\nexecute:\n echo: false\n---\n```\n\n### Inline Code\n\nUse computed values directly in text sections.\nCode is evaluated at render and results appear as text.\n\n::: {layout-ncol=\"3\"}\n
\n\n#### Knitr\n\nValue is `` `r 2 + 2` ``.\n\n
\n\n
\n\n#### Jupyter\n\n[v1.4]{.small .muted}\n\nValue is `` `{python} 2 + 2` ``.\n\n
\n\n
\n\n#### Output\n\nValue is 4.\n\n
\n:::\n\n## Set Formats and Options\n\n::: {layout-ncol=\"2\"}\n::: {#set-options}\n### Set Format Options\n\n``` yaml\n---\ntitle: \"My Document\"\nformat: \n html: \n code-fold: true\n toc: true\n---\n```\n\n- Indent format 2 spaces\n- Indent options 4 spaces\n:::\n\n::: {#multiple-formats}\n### Multiple Formats\n\n``` yaml\n---\ntitle: \"My Document\"\ntoc: true\nformat: \n html: \n code-fold: true\n pdf: default\n---\n```\n\n- Top-level options (e.g. `toc`) apply to all formats\n:::\n:::\n\nCommon values for `format`: html, pdf[^2], docx, odt, rtf, gfm, pptx, revealjs, beamer\n[^3]\n\n[^2]: PDFs and Beamer slides require LaTeX, use:\n\n ``` {.bash filename=\"Terminal\"}\n quarto install tinytex\n ```\n\n[^3]: PDFs and Beamer slides require LaTeX, use:\n\n ``` {.bash filename=\"Terminal\"}\n quarto install tinytex\n ```\n\nRender **all** formats:\n\n``` {.bash filename=\"Terminal\"}\nquarto render hello.qmd\n```\n\nRender a **specific** format:\n\n``` {.bash filename=\"Terminal\"}\nquarto render hello.qmd --to pdf\n```\n\n### Output Options Table\n\n\n\n::: {.cell tbl-cap='Important Options. The first column is the option name, an \"X\" in the next three columns indicates whether the option applies to the format, the fourth column decribes the options and possible values, the final column indicates whether the options can also be set in a code cell.'}\n::: {.cell-output-display}\n\n```{=html}\n
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n \n\n\n\n\n\n \n\n\n\n\n\n \n \n \n \n\n\n\n\n\n \n\n\n\n\n\n \n\n\n\n\n\n \n\n\n\n\n\n \n\n\n\n\n\n \n \n \n \n\n\n\n\n\n \n\n\n\n\n\n \n \n \n \n\n\n\n\n\n \n\n\n\n\n\n \n\n\n\n\n\n \n \n \n \n\n\n\n\n\n \n\n\n\n\n\n \n\n\n\n\n\n \n \n \n \n\n\n\n\n\n \n\n\n\n\n\n \n\n\n\n\n\n \n \n \n
Optionhtml/revealjspdf/beamerdocx/pptxDescriptioncell level?
Navigation
tocXXX

Add a table of contents (true or false)

\n

toc-depthXXX

Lowest level of headings to add to table of contents (e.g. 2, 3)

\n

anchor-sectionsX

Show section anchors on mouse hover (true or false)

\n

Style
highlight-styleXXX

Syntax highlighting theme (e.g. arrow, pygments, kate, zenburn)

\n

mainfont, monofontXX

Font name. HTML: sets CSS font-family; LaTeX: via fontspec package

\n

themeX

Bootswatch theme name (e.g. cosmo, darkly, solar etc.)

\n

cssX

CSS or SCSS file to use to style the document (e.g. “style.css”)

\n

reference-doc

X

docx/pptx file containing template styles (e.g. file.docx, file.pptx)

\n

NA
include-in-headerXX

Files of content to include in header of output document, also include-before-body, include-after-body

\n

keep-mdXXX

Keep intermediate files (true or false), also keep-tex, keep-ipynb

\n

LaTeX
documentclass
X

LaTeX document class, set document options with classoption

\n

pdf-engine
X

LaTeX engine to produce PDF output (xelatex, pdflatex, lualatex)

\n

cite-method
X

Method used to format citations (citeproc, natbib, biblatex)

\n

Code
code-foldX

Let readers toggle the display of R code (false, true, or show)

\n
X
code-toolsX

Add menu for hiding, showing, and downloading code (true or false)

\n

code-overflowX

Display of wide code (scroll, or wrap)

\n
X
Figures
fig-alignXXdocx only

Alignment of figures (default, left, right, center)

\n
X
fig-width, fig-heightXXX

Default width and height for figures in inches

\n
Knitr only
fig-formatXXX

Format for Matplotlib or R figures (retina, png, jpeg, svg, or pdf)

\n

\n
\n```\n\n:::\n:::\n\n\n\nVisit to see all options by format\n\n## Add Content\n\n### Figures {#figures}\n\n#### Markdown\n\n``` markdown\n![CAP](image.png){#fig-LABEL fig-alt=\"ALT\"}\n```\n\n#### Computation\n\n```{{python}}\n#| label: fig-LABEL\n#| fig-cap: CAP\n#| fig-alt: ALT\n{{ plot code here }}\n```\n\nOr `{r}`\n\n### Tables {#tables}\n\n#### Markdown\n\n``` markdown\n|object | radius|\n|:------|------:|\n|Sun | 696000|\n|Earth | 6371|\n\n: CAPTION {#tbl-LABEL}\n```\n\n#### Computation\n\nOutput a markdown table or an HTML table from your code.\n\n::: {layout-ncol=\"2\"}\n
\n\n##### Knitr\n\nUse `knitr::kable()` to produce markdown:\n\n```{{r}}\n#| label: tbl-LABEL\n#| tbl-cap: CAPTION\n\nknitr::kable(head(cars))\n```\n\nAlso see the R packages: gt, flextable, kableExtra.\n\n
\n\n
\n\n##### Jupyter\n\nAdd `Markdown()` to Markdown output:\n\n```{{python}}\n#| label: tbl-LABEL\n#| tbl-cap: CAPTION\nimport pandas as pd, tabulate\nfrom IPython.display import Markdown\ndf = pd.DataFrame({\"A\": [1, 2], \n \"B\": [1, 2]})\nMarkdown(df.to_markdown(index=False))\n```\n\n
\n:::\n\n### Cross References\n\n1. **Add labels:**\n\n - **Code cell:** add option `label: prefix-LABEL`\n - **Markdown:** add attribute `#prefix-LABEL`\n\n2. **Add references:** `@prefix-LABEL`, e.g.\n\n ``` markdown\n You can see in @fig-scatterplot, that...\n ```\n\n| `prefix` | Renders |\n|----------|------------|\n| `fig-` | Figure 1 |\n| `tbl-` | Table 1 |\n| `eq-` | Equation 1 |\n| `sec-` | Section 1 |\n\n### Citations\n\n1. Add bibliography **file** to the YAML header:\n\n ``` yaml\n ---\n bibliography: references.bib\n ---\n ```\n\n2. Add citations: `[@citation]`, or `@citation`\n\nRStudio & VS Code: Use **Insert Citations** dialog in the Visual Editor.\nBuild your bibliography file from your Zotero library, DOI, Crossref, DataCite, or PubMed.\n\n### Callouts\n\n``` markdown\n::: {.callout-tip}\n## Title\n\nText\n:::\n```\n\nInstead of `tip` use one of: `note`, `caution`, `warning`, or `important`:\n\n::: callout-tip\n## tip\n:::\n\n::: callout-note\n## note\n:::\n\n::: callout-caution\n## caution\n:::\n\n::: callout-warning\n## warning\n:::\n\n::: callout-important\n## important\n:::\n\n### Shortcodes\n\n\n\n------------------------------------------------------------------------\n\nCC BY SA Posit Software, PBC • [info\\@posit.co](mailto:info@posit.co) • [posit.co](https://posit.co)\n\nLearn more at [quarto.org](https://quarto.org).\n\nQuarto 1.3\n\nUpdated: 2024-05.\n\n------------------------------------------------------------------------\n", "supporting": [], "filters": [ "rmarkdown/pagebreak.lua" diff --git a/_freeze/html/shiny-python/execute-results/html.json b/_freeze/html/shiny-python/execute-results/html.json new file mode 100644 index 00000000..a62b7b7a --- /dev/null +++ b/_freeze/html/shiny-python/execute-results/html.json @@ -0,0 +1,15 @@ +{ + "hash": "40dc3403f4fb24778e2da69caafe04e2", + "result": { + "engine": "knitr", + "markdown": "---\ntitle: \"Shiny for Python :: Cheatsheet\"\ndescription: \" \"\nimage-alt: \"\"\nexecute:\n eval: true\n output: false\n warning: true\n---\n\n::: {.cell .column-margin}\n\"Hex\n

\n

Download PDF

\n\"\"/\n
\n

\n:::\n\n\n\n\n## Build an App\n\nA **Shiny** app is an interactive web page (**ui**) powered by a live Python session run by a **server** (or by a browser with Shinylive).\n\nUsers can manipulate the UI, which will cause the server to update the UI's displays (by running Python code).\n\nSave your app as `app.py` in a directory with the files it uses.\n\n- **app-name:** The directory name is the app name\n\n\n\n- **app.py**\n\n- www/: Place images, CSS, etc. to share with the browser in a folder named \"www\"\n\n- Include any other scripts, data sets, or assets used by the app in the same directory.\n\nRun `shiny create .` in the terminal to generate a template `app.py` file\n\nLaunch apps with `shiny run app.py --reload`\n\n\n\n\n::: {.cell}\n\n```{.python .cell-code}\nfrom shiny import App, render, ui\nimport matplotlib.pyplot as plt\nimport numpy as np\n\n# Nest Python functions to build an HTML interface\napp_ui = ui.page_fluid( # Layout the UI with Layout Functions\n \n # Add Inputs with ui.input_*() functions \n ui.input_slider(\n \"n\", \"Sample Size\", 0, 1000, 20\n ),\n # Add Outputs with ui.ouput_*() functions\n ui.output_plot(\"dist\")\n)\n\ndef server(input, output, session):\n \n # For each output, define a function that generates the output\n @output # Designate output functions with the @output decorator\n @render.plot # Specify the type of output with a @render. decorator\n def dist(): # Use the output id as the function name\n \n # Call the values of UI inputs with input.()\n x = np.random.randn(input.n()) \n plt.hist(x, range=[-3, 3])\n\n# Call App() to combine app_ui and server() into an interactive app\napp = App(app_ui, server)\n```\n:::\n\n\n\n\n## Share\n\nShare your app in three ways:\n\n1. Host it on [shinyapps.io](shinyapps.io), a cloud based service from Posit.\n To deploy Shiny apps:\n\n - Create a free or professional account at [shinyapps.io](shinyapps.io)\n - Use the reconnect-python package to publish with `rsconnect deploy shiny `\n\n2. Purchase Posit Connect, a publishing platform for R and Python.\n [posit.co/products/enterprise/connect/](posit.co/products/enterprise/connect/)\n\n3. Use open source deployment options.\n [shiny.posit.co/py/docs/deploy.html](https://shiny.posit.co/py/docs/deploy.html)\n\n## Shinylive\n\nShinylive apps use WebAssembly to run entirely in a browser--no need for a special server to run Python.\n\n- Edit and/or host Shinylive apps at shinylive.io\n- Create a Shinylive version of an app to deploy with `shinylive export myapp site`. Then deploy to a hosting site like Github or Netifly.\n- Embed Shinylive apps in Quarto sites, blogs, etc\n\nTo embed a Shinylive app in a Quarto doc, include the below syntax.\n\n````markdown\n---\nfilters:\n- shinylive\n---\n \nAn embedded Shinylive app:\n \n```{{r}}\n#| standalone: true\n# [App.py code here...]\n```\n````\n\n## Outputs\n\nMatch ui.output_\\* functions to @render.\\* decorators\n\n+-----------------------+-------------------------------------------------------------------------------+\n| decorator | function |\n+=======================+===============================================================================+\n| `@render.data_frame` | `ui.output_data_frame(id)` |\n+-----------------------+-------------------------------------------------------------------------------+\n| `@render.image` | `ui.output_image(id, width, height, click, dblclick, hover, brush, inline)` |\n+-----------------------+-------------------------------------------------------------------------------+\n| `@render.plot` | `ui.output_plot(id, width, height, click, dblclick, hover, brush, inline)` |\n+-----------------------+-------------------------------------------------------------------------------+\n| `@render.table` | `ui.output_table(id)` |\n+-----------------------+-------------------------------------------------------------------------------+\n| `@render.text` | `ui.output_text(id, container, inline)` also `ui.output_text_verbatim()` |\n+-----------------------+-------------------------------------------------------------------------------+\n| `@render.ui` | `ui.output_ui(id, inline, container, ...)` also `ui.output_html()` |\n+-----------------------+-------------------------------------------------------------------------------+\n| `@sessiom.download` | `ui.output_download_button(id, label, icon,...)` |\n+-----------------------+-------------------------------------------------------------------------------+\n\n: Table of `@render.*()` decorators and their associated `ui.output_*()` functions.\n\n## Inputs\n\nUse a `ui.input_*()` function to make an input widget that saves a value as `input.`. Input values are reactive and need to be called as `input.()`.\n\n- `ui.input_action_button(id, label, icon, width, ...)`\n\n- `ui.input_action_link(id, label, icon, ...)`\n\n- `ui.input_checkbox(id, label, value, width)`\n\n- `ui.input_checkbox_group(id, label, choices, selected, inline, width)`\n\n- `ui.input_date(id, label, value, min, max, format, startview, weekstart, language, width, autoclose, datesdisabled, daysofweekdisabled)`\n\n- `ui.input_date_range(id, label, start, end, min, max, format, startview, weekstart, language, separator, width, autoclose)`\n\n- `ui.input_file(id, label, multiple, accept, width, buttonLabel, placeholder, capture)`\n\n- `ui.input_numeric(id, label, value, min, max, step, width)`\n\n- `ui.input_password(id, label, value, width, placeholder)`\n\n- `ui.input_radio_buttons(id, label, choices, selected, inline, width)`\n\n- `ui.input_select(id, label, choices, selected, multiple, selectize, width, size) Also ui.input_selectize()`\n\n- `ui.input_slider(id, label, min, max, value, step, ticks, animate, width, sep, pre, post, timeFormat, timezone, dragRange)`\n\n- `ui.input_switch(id, label, value, width)`\n\n- `ui.input_text(id, label, value, width, placeholder, autocomplete, spellcheck) Also ui.input_text_area()`\n\n\n\n## Reactivity\n\nReactive values work together with reactive functions. Call a reactive value from within the arguments of one of these functions to avoid the error `No current reactive context`.\n\n![](images/reactivity-diagram-python.png){fig-align=\"center\"}\n\n::: {.callout-note appearance=\"minimal\" icon=\"false\" collapse=\"true\"}\n## Expand to read about the reactivity diagram {aria-hidden=\"true\"}\n\n### Phases in the reactivity diagram\n\n- Create your own reactive values\n - `ui.input_*()`\n - `reactive.Value()``\n - `@reactive.file_reader()`\n - `@reactive.poll()`\n- Perform side effects\n - `@reactive.Effect`\n- Schedule updates\n - `reactive.invalidate_later()`\n- Create reactive expressions\n - `reactive.Calc()`\n- Remove reactivity\n - `reactive.isolate()`\n- React based on event\n - `@reactive.event()`\n- Render reactive output\n - `@output`\n - `@render*`\n:::\n\n### Create Your own Reactive Values\n\n- `ui.input_*()` makes an input widget that saves a reactive value as `input.()`.\n- `reactive.value( )` Creates an object whose value you can set.\n\n\n\n\n ::: {.cell}\n \n ```{.python .cell-code}\n #...\n app_ui = ui.page_fluid(\n ui.input_text(\"a\", \"A\")\n )\n \n def server(input, output, session):\n rv = reactive.Value()\n rv.set(5) \n #...\n ```\n :::\n\n\n\n\n### Create Reactive Expressions\n\n- `@reactive.Calc` makes a function a reactive expression. Shiny notifies functions that use the expression when it becomes invalidated, triggering recomputation. Shiny caches the value of the expression while it is valid to avoid unnecessary computation.\n\n\n\n\n ::: {.cell}\n \n ```{.python .cell-code}\n #...\n def server(input, output, session ):\n @reactive.Calc\n def re():\n return input.a() + input.b()\n #...\n ```\n :::\n\n\n\n\n### React Based on Event\n\n- `@reactive.event()` Makes a function react only when a specified value is invalidated, here `input.a`.\n\n\n\n\n ::: {.cell}\n \n ```{.python .cell-code}\n #...\n def server(input, output, session ):\n @reactive.Calc \n @reactive.event(input.a) \n def re():\n return input.b() \n #...\n ```\n :::\n\n\n\n\n### Display Reactive Output\n\n- `ui.output_*()` adds an output element to the UI.\n- `@output`, `@render.*` are decorators to identify and render outputs\n- `def ():` A function to generate the output\n\n\n\n\n ::: {.cell}\n \n ```{.python .cell-code}\n app_ui = ui.page_fluid(\n ui.input_text(\"a\", \"A\"), \n ui.output_text(\"b\"),\n )\n \n def server(input, output, session ):\n @output \n @render.text \n def b():\n return input.a()\n ```\n :::\n\n\n\n\n### Perform Side Effects\n\n- `@reactive.Effect` Reactively trigger a function with a side effect. Call a reactive value or use `@reactive.event` to specify when the function will rerun.\n\n\n\n\n ::: {.cell}\n \n ```{.python .cell-code}\n #...\n def server(input, output, session ):\n @reactive.Effect\n @reactive.event(input.a) \n def print():\n print(\"Hi\") \n #...\n ```\n :::\n\n\n\n\n### Remove Reactivity\n\n- `reactive.isolate()`Create non-reactive context within a reactive function. Calling a reactive value within this context will not cause the calling function to re-execute should the value become invalid.\n\n\n\n\n ::: {.cell}\n \n ```{.python .cell-code}\n # ...\n def server(input, output, session):\n @output \n @render.text \n def a():\n with reactive.isolate():\n return input.a() \n #...\n ```\n :::\n\n\n\n\n## Layouts\n\nCombine multiple elements into a \"single element\" that has its own properties with a panel function:\n\n- `ui.panel_absolute()`\n- `ui.panel_conditional()`\n- `ui.panel_fixed()`\n- `ui.panel_main()`\n- `ui.panel_sidebar()`\n- `ui.panel_title()`\n- `ui.panel_well()`\n- `ui.row() / ui.column()`\n\n\n\n\n\n::: {.cell}\n\n```{.python .cell-code}\nui.panel_well(\n ui.input_date(...),\n ui.input_action_button(...)\n)\n```\n:::\n\n\n\n\nLayout panels with a layout function. Add elements as arguments of the layout functions.\n\n- `ui.layout_sidebar()`\n\n\n\n\n ::: {.cell}\n \n ```{.python .cell-code}\n app_ui = ui.page_fluid(\n ui.panel_title( ), \n ui.layout_sidebar(\n ui.panel_sidebar( ),\n )\n ) \n ```\n :::\n\n\n\n\n- `ui.row()`\n\n\n\n\n ::: {.cell}\n \n ```{.python .cell-code}\n app_ui = ui.page_fluid(\n ui.row(\n ui.column(width = 4), ui.column(width = 2, offset = 3),\n ),\n ui.row(\n ui.column(width = 12)\n )\n )\n ```\n :::\n\n\n\n\nLayer `ui.nav( )`s on top of each other, and navigate between them, with:\n\n\n\n\n::: {.cell}\n\n```{.python .cell-code}\n# navset tab\nui.page_fluid(\n ui.navset_tab(\n ui.nav(\"tab 1\", \"contents\"), \n ui.nav(\"tab 2\", \"contents\"), \n ui.nav(\"tab 3\", \"contents\")\n )\n)\n\n# navpill list\nui.page_fluid(\n ui.navset_pill_list(\n ui.nav(\"tab 1\", \"contents\"), \n ui.nav(\"tab 2\", \"contents\"), \n ui.nav(\"tab 3\", \"contents\")\n )\n)\n\n# navbar page\nui.page_navbar(\n ui.nav(\"tab 1\", \"contents\"), \n ui.nav(\"tab 2\", \"contents\"), \n ui.nav(\"tab 3\", \"contents\"), \n title = \"Page\"\n)\n```\n:::\n\n\n\n\n## Themes\n\nUse the shinyswatch package to add existing bootstrap themes to your Shiny app ui.\n\n\n\n\n::: {.cell}\n\n```{.python .cell-code}\nimport shinyswatch\n\napp_ui = ui.page_fluid(\n shinyswatch.theme.darkly(), \n # ...\n)\n```\n:::\n\n\n\n\n## Shiny for R Comparison\n\nShiny for Python is quite similar to Shiny for R with a few important differences:\n\n\n1. Call inputs as `input.()`\n\n- R\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n input$x\n ```\n :::\n\n\n\n\n- Python\n\n\n\n\n ::: {.cell}\n \n ```{.python .cell-code}\n input.x()\n ```\n :::\n\n\n\n\n2. Use decorators to create and render outputs. Define outputs as functions `def ():`\n\n- R\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n output$y <- \n renderText(z())\n ```\n :::\n\n\n\n\n- Python\n\n\n\n\n ::: {.cell}\n \n ```{.python .cell-code}\n @output \n @renderText \n def y():\n return z()\n ```\n :::\n\n\n\n\n3. To create a reactive expression, use `@reactive.Calc`\n\n- R\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n z <- reactive({ \n input$x + 1\n })\n ```\n :::\n\n\n\n\n- Python\n\n\n\n\n ::: {.cell}\n \n ```{.python .cell-code}\n @reactive.Calc \n def z():\n return input.x()+1\n ```\n :::\n\n\n\n \n4. To create an observer, use `@reactive.Effect`\n\n- R\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n a <- observe({ \n print(input$x)\n })\n ```\n :::\n\n\n\n\n- Python\n\n\n\n\n ::: {.cell}\n \n ```{.python .cell-code}\n @reactive.Effect \n def a():\n print(input.x())\n ```\n :::\n\n\n\n\n5. Combine these with `@reactive.event`\n\n- R\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n b <- eventReactive(\n input$goCue,\n {input$x + 1}\n )\n ```\n :::\n\n\n\n\n- Python\n\n\n\n\n ::: {.cell}\n \n ```{.python .cell-code}\n @reactive.Calc \n @reactive.event(input.go_cue )\n def b():\n return input.x() + 1\n ```\n :::\n\n\n\n \n6. Use `reactive.Value()` instead of `reactiveVal()`\n\n- R\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n reactiveVal(1)\n ```\n :::\n\n\n\n\n- Python\n\n\n\n\n ::: {.cell}\n \n ```{.python .cell-code}\n reactive.Value(1)\n ```\n :::\n\n\n\n\n7. Use `nav_*()` instead of `*Tab()`\n\n- R\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n insertTab() \n appendTab() \n # etc.\n ```\n :::\n\n\n\n\n- Python\n\n\n\n\n ::: {.cell}\n \n ```{.python .cell-code}\n nav_insert() \n nav_append() \n # etc.\n ```\n :::\n\n\n\n\n8. Functions are intuitively organized into submodules\n\n- R\n\n\n\n\n ::: {.cell}\n \n ```{.r .cell-code}\n dateInput() \n textInput() \n # etc.\n ```\n :::\n\n\n\n\n- Python\n\n\n\n\n ::: {.cell}\n \n ```{.python .cell-code}\n ui.input_date() \n ui.input_text() \n # etc.\n ```\n :::\n\n\n\n\n------------------------------------------------------------------------\n\nCC BY SA Posit Software, PBC • [info\\@posit.co](mailto:info@posit.co) • [posit.co](https://posit.co)\n\nLearn more at [shiny.posit.co/py/](https://shiny.posit.co/py/)\n\nUpdated: 2024-05.\n\n\n\n\n::: {.cell}\n\n```{.r .cell-code}\npackageVersion(\"shiny\")\n```\n\n::: {.cell-output .cell-output-stdout}\n\n```\n[1] '1.8.1.1'\n```\n\n\n:::\n:::\n\n\n\n\n------------------------------------------------------------------------\n", + "supporting": [], + "filters": [ + "rmarkdown/pagebreak.lua" + ], + "includes": {}, + "engineDependencies": {}, + "preserve": {}, + "postProcess": true + } +} \ No newline at end of file diff --git a/_freeze/html/sparklyr/execute-results/html.json b/_freeze/html/sparklyr/execute-results/html.json index a3157f0f..a19335b4 100644 --- a/_freeze/html/sparklyr/execute-results/html.json +++ b/_freeze/html/sparklyr/execute-results/html.json @@ -1,8 +1,11 @@ { - "hash": "838cdfa44affcebdd0f5c14a01a5344f", + "hash": "dfa5d20431126ba509f25c2253692592", "result": { - "markdown": "---\ntitle: \"Data science in Spark with sparklyr :: Cheatsheet\"\ndescription: \" \"\nimage-alt: \"\"\nexecute:\n eval: true\n output: false\n warning: false\n---\n\n::: {.cell .column-margin}\n\"Hex\n

\n

Download PDF

\n\"\"/\n
\n

Translations (PDF)

\n* Chinese\n* Chinese\n* German\n* Japanese\n* Spanish\n:::\n\n\n\n\nHTML version coming soon! The PDF is available for download [here](../sparklyr.pdf)", - "supporting": [], + "engine": "knitr", + "markdown": "---\ntitle: \"Data science in Spark with sparklyr :: Cheatsheet\"\ndescription: \" \"\nimage-alt: \"\"\nexecute:\n eval: true\n output: false\n warning: false\n---\n\n::: {.cell .column-margin}\n\"Hex\n

\n

Download PDF

\n\"\"/\n
\n

Translations (PDF)

\n* Chinese\n* Chinese\n* German\n* Japanese\n* Spanish\n:::\n\n\n\n\n\n\nHTML version coming soon!\nThe PDF is available to download [here](../sparklyr.pdf).\n", + "supporting": [ + "sparklyr_files" + ], "filters": [ "rmarkdown/pagebreak.lua" ], diff --git a/html/images/logo-lubridate.png b/html/images/logo-lubridate.png index 9057fb0cc7d7a3034fafcddbe7731fe86149a57b..2b82aec86097e215079e7017c0be39febdfd842b 100644 GIT binary patch delta 30 mcmaDlhw<}l#tAADO!lvQAWV=X%a6F2pM|n@{rk#-d=~c-0cuh?11V zl2ohYqEsNoU}RuqtZQJZYh)Z^Xkle&Y-MP!ZD3$!U?8N#^_78v0ihu`KP5A*61Rrr M`c0mb5BVAb0I%yPsQ>@~ diff --git a/html/images/logo-readr.png b/html/images/logo-readr.png index 256422bd489505e0a2a00870a00f91b3b7dad2c7..d53c37ff00623a7d8d26a19c592d0f3fbfa76d4e 100644 GIT binary patch delta 25 hcmX?GzrAik2G P1l<;e<4h)#+3XDg8q+a) diff --git a/html/images/logo-shiny.png b/html/images/logo-shiny.png index 281845f2f672daeca42530bc08d74dc841302568..a2c5f4988575b37197dc15816e2544bab5ba067c 100644 GIT binary patch literal 24710 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 literal 174038 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 FQ~ZZLf$?ycEbSFVB71AVZ6VeP`Ewj z1iO}bbmnLMx1ce92RfyDwjbU^hW?Ce9P4g8lA?{Dz4lu`J^v5J`)=F95M9W0eB$kS z3x|E3FcYe@i-+AkVC`H2SP=vs>pk|A=QLDyC0tp?2G9Z#72C3^Z}WT{A8cpHb&R}3`Pj2;F$ z)*3dN?JtA zJo5gNA2nBv=QE>?4QY~=GRu+V&s1Bf-7gGXkn4?b_BhBHS!!pXtGx?(Ex~U479+6| zM3M^kTm83{9i33T-M#!CJKZ96^(Y!1_*fvLl&f@>-VbybMw7!(Fl>yQtXN%(yfSj> zeB^}m7(H4GAH#tPnf2wAm5Ih}^%{CLGIfLY%0V+DagEU~)jXO5xi5csJwak@>O%({ zqxYyus;O^FQa8+D(BCd$`)|$EDu`#RxeIo+pO89acu8BKljpAb4+D0ueuOhX5)Xyf z$dFs|x@62Yr@h7*jUR)SqyG!u+gKW)B?KSQPCY*5^;?{~<6{?H9w}N1Wf%99JB3rZ za2B!8L+N2{HrK0qYIvniPhNy1>Q&liqi=Hg$o$A3Y~6q~NlKYr-j;sHA4eWiFB`1M zft@*e^GK-otZe}6ZOyzRmX)kO+Dr~wx#6h(koQP0=4`}xl8(ee9&GFZL!%0DJ}2sg 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%0AXs=B-8uf@>@(9}Jz;p8m}xhcwzp&IoX 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 u z>}N%V?{dH^3z(_RRcdDV-eFO6SRQuUT3zsI-*Z4BHRox_&rHOc^+0bRf-wtNGdzMg z&XafQOhJ>ASheuoyh&0AE?~ib4JbtGwnV%;NW8oHeQ$N$y4|bZe@okJDEZnVksPk? zk|Ekl!$3QdS&lT zeHSX#i2|n@JY(b*YNTK3c3%&mSha{w|a;9GiB zg(HIXy`^fs{BBp`18{ipfVXOQ?V{bm>w)qkk%_*DT{&_Y{Xk2|PlL*0Ee0-OGWUeEq-J6kf5GEE=x$yK>JxTE|&azda#pPv9b z$0ynF?@74>RDS;*Bb$y(P)&NSh^Tc1PhU-wt$2JB8!j_8eTJuomTdseLliGVc{OeaL zJkU|Zg_$|&_?2@eypV|Xls1cMpnXEgs899Vo6e0mFd_24kvtbkm$?pxR$NC6M*YsC z+leC${_6wy4(+4Z`0JPVzI!KXxZeac^g6;14s!X*6%V@2byXTUN+_d|mv}O;<>?!wgNGhJH4HzS$#I*VS30l2TIZOD}|yPA$}H0Cl_FQ{Ubwrq~)KcV{}z z5&v1F^9Zg#zi*hn%V*AC%6|+K3E@c$2-*GLjgh}tR4l1zr!Kjl4cQe?xlnG>BoC2m zG+$3CSQ%ti^xhi}U8cqCEfeKV^PvcSWlHQyYbvN)2YrAvBL$9-ZqFXHsHQp%EcTUXBj$k37JWDCO2u+|`j`cc z3EBLn#om}D9u^DU&10xyi}~tqh@mH$^w~@-XO+j1_dq$GxCVxGqh(QQmp-4+9~<)z zyg~nJO_tqxj6=BRe;fV0HaK|pt5iZ+ZI@L%xTRpqulPMO%R5f;gEW1YUXacuB>X$O z^tHOW58Q*#1@H7ki*Ru>UozqP!k=fAKBo@p{)WJklY^_1krGTh^Y;q|f}Q%@6}?$Z zLDPnS%Obt^F{8ipqX_Y@U&yUzha9hTEdIyt$G<7p?KkD;)TPU7uK4e*@*=EE(~kj@ zxHQm*!jqj6g-N=+TRhU5@rC1Ld}T_T7L%wvj+xm!ImiEVz4_^6hzvIZ__9=u5;Z`3 zjR}p`HxbR|=jqF( z64A*s>mdYvwq!(Yw-ju=1-*xUsEhsuIgO0hFul;LW|Dw2Z}QJ}yVT6sxgGmITAjR& PUN?E7 ### Highlights in the source file -* Set format(s) and options. Use YAML Syntax. - - ```` markdown +- Set format(s) and options. + Use YAML Syntax. + + ``` markdown --- title: "Hello, Penguins" format: html execute: echo: false --- - ```` + ``` + +- `## Write with **Markdown**` + + **RStudio**: Help \> Markdown Quick Reference -* `## Write with **Markdown**` - - **RStudio**: Help > Markdown Quick Reference - RStudio & VS Code: Use the **Visual Editor** - ```` markdown + ``` markdown ## Meet the penguins - + The `penguins` data contains size measurements for penguins from three islands in the Palmer Archipelago, Antarctica. - + The three species of penguins have quite distinct distributions of physical dimensions (@fig-penguins). - ```` - -* Include code. R, Python, Julia, Observable, or any language with a Jupyter kernel. + ``` + +- Include code. + R, Python, Julia, Observable, or any language with a Jupyter kernel. - ````markdown + ```` markdown ```{{r}} #| label: fig-penguins #| fig-cap: "Dimensions of penguins across three species." @@ -135,17 +142,20 @@ penguins |> ### Use a tool with a rich authoring experience -[RStudio](https://posit.co/products/open-source/rstudio/), or +[RStudio](https://posit.co/products/open-source/rstudio/), or\ [Visual Studio Code](https://code.visualstudio.com/) + [Quarto extension](https://marketplace.visualstudio.com/items?itemName=quarto.quarto) -* **Run** code cells as you write -* **Render** with a button or keyboard shortcut -* Edit Quarto documents with a **Visual Editor** - +- **Run** code cells as you write + +- **Render** with a button or keyboard shortcut + +- Edit Quarto documents with a **Visual Editor** + ![](images/quarto-visual-editor.png){fig-alt="Screenshot of the Visual Editor toolbar. Toolbar shows menu items: Normal with dropdown, bold, italics, code, bulleted list, numbered list, link, image, Format dropdown, Insert dropdown and Table dropdown."} - - - Apply formatting in Visual Editor. Saved as Markdown in source. - + + - Apply formatting in Visual Editor. + Saved as Markdown in source. + - Insert elements like code cells, cross references, and more. ### Or any text editor @@ -154,15 +164,16 @@ Quarto documents (.qmd) can be edited in any tool that edits text. ## Render -**Save,** then render to **preview** the document output. +**Save,** then render to **preview** the document output. -```{.bash filename="Terminal"} +``` {.bash filename="Terminal"} quarto preview hello.qmd ``` RStudio & VS Code: Use **Render** button -The resulting HTML/PDF/MS Word/etc. document will be created and saved in the same directory as the source .qmd file. +The resulting HTML/PDF/MS Word/etc. +document will be created and saved in the same directory as the source .qmd file. ### Rendered output: hello.html @@ -170,9 +181,11 @@ The resulting HTML/PDF/MS Word/etc. document will be created and saved in the sa ### Highlights in the rendered output -* Features for scientific publishing. Cross references, citations, equations, and more. +- Features for scientific publishing. + Cross references, citations, equations, and more. -* Output integrated into document. Control how output appears with special comments in your code. +- Output integrated into document. + Control how output appears with special comments in your code. ### Behind the Scenes @@ -181,7 +194,6 @@ When you render a document, Quarto: 1. Runs the code and embeds results and text into an .md file with: - **Knitr**, if any `{r}` cells, or - **Jupyter**, if any other cells. - 2. Converts the .md file into the output format with Pandoc. ## Publish @@ -196,9 +208,11 @@ RStudio: Use **Publish** button ![](images/quarto-rstudio-publish.png){fig-alt=" - [**Quarto Pub**](https://quartopub.com/) Free publishing service for Quarto content. -- [**Posit Cloud**](https://posit.cloud/) Cloud-hosted, control access to project and output. ![](images/quarto-rstudio-publish.png){fig-alt="Push button publishing from RStudio" width="10%"} +- [**Posit Cloud**](https://posit.cloud/) Cloud-hosted, control access to project and output. + ![](images/quarto-rstudio-publish.png){fig-alt="Push button publishing from RStudio" width="10%"} -- [**Posit Connect**](https://posit.co/products/enterprise/connect/) Org-hosted, control access, schedule updates. ![](images/quarto-rstudio-publish.png){fig-alt="Push button publishing from RStudio" width="10%"} +- [**Posit Connect**](https://posit.co/products/enterprise/connect/) Org-hosted, control access, schedule updates. + ![](images/quarto-rstudio-publish.png){fig-alt="Push button publishing from RStudio" width="10%"} ## Quarto Projects @@ -240,7 +254,8 @@ Other languages: `{julia}`, `{ojs}` Add code cell options with `#|` comments. -Cell options control [**execution**](#execution), [figures](#figures), [tables](#tables), layout and more. See them all at: +Cell options control [**execution**](#execution), [figures](#figures), [tables](#tables), layout and more. +See them all at: ### Execution Options {#execution} @@ -276,7 +291,7 @@ Set execution options at the **cell level**: Set options in code cells with `#|` comments and YAML syntax: `key: value`. -Or globally in the YAML header with the **execute** option: +Or globally in the YAML header with the **execute** option: ``` yaml --- @@ -287,7 +302,8 @@ execute: ### Inline Code -Use computed values directly in text sections. Code is evaluated at render and results appear as text. +Use computed values directly in text sections. +Code is evaluated at render and results appear as text. ::: {layout-ncol="3"}
@@ -319,8 +335,7 @@ Value is `r 2*2`. ## Set Formats and Options -::: {layout-ncol=2} - +::: {layout-ncol="2"} ::: {#set-options} ### Set Format Options @@ -339,7 +354,6 @@ format: ::: ::: {#multiple-formats} - ### Multiple Formats ``` yaml @@ -354,11 +368,11 @@ format: ``` - Top-level options (e.g. `toc`) apply to all formats - ::: ::: -Common values for `format`: html, pdf[^2], docx, odt, rtf, gfm, pptx, revealjs, beamer[^3] +Common values for `format`: html, pdf[^2], docx, odt, rtf, gfm, pptx, revealjs, beamer +[^3] [^2]: PDFs and Beamer slides require LaTeX, use: @@ -372,7 +386,6 @@ Common values for `format`: html, pdf[^2], docx, odt, rtf, gfm, pptx, revealjs, quarto install tinytex ``` - Render **all** formats: ``` {.bash filename="Terminal"} @@ -385,7 +398,6 @@ Render a **specific** format: quarto render hello.qmd --to pdf ``` - ### Output Options Table ```{r} @@ -418,7 +430,6 @@ format_options |> Visit to see all options by format - ## Add Content ### Figures {#figures} @@ -494,7 +505,6 @@ Markdown(df.to_markdown(index=False))
::: - ### Cross References 1. **Add labels:** @@ -527,7 +537,7 @@ Markdown(df.to_markdown(index=False)) 2. Add citations: `[@citation]`, or `@citation` -RStudio & VS Code: Use **Insert Citations** dialog in the Visual Editor. +RStudio & VS Code: Use **Insert Citations** dialog in the Visual Editor. Build your bibliography file from your Zotero library, DOI, Crossref, DataCite, or PubMed. ### Callouts