├── .Rbuildignore ├── LICENSE ├── NEWS.md ├── _targets_packages.R ├── .gitignore ├── index.Rmd ├── targets-minimal.Rproj ├── .github ├── ISSUE_TEMPLATE │ ├── question.md │ ├── other.md │ ├── feature.md │ ├── trouble.md │ └── bug.md ├── PULL_REQUEST_TEMPLATE.md └── workflows │ └── targets.yaml ├── R └── functions.R ├── _targets.R ├── LICENSE.md ├── CONTRIBUTING.md ├── CODE_OF_CONDUCT.md ├── data └── raw_data.csv ├── README.Rmd ├── README.md └── renv.lock /.Rbuildignore: -------------------------------------------------------------------------------- 1 | ^renv$ 2 | ^renv\.lock$ 3 | ^.*\.Rproj$ 4 | ^\.Rproj\.user$ 5 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | YEAR: 2021 2 | AUTHOR: William Michael Landau 3 | COPYRIGHT HOLDER: Eli Lilly and Company 4 | -------------------------------------------------------------------------------- /NEWS.md: -------------------------------------------------------------------------------- 1 | # targets.minimal 0.0.0.9000 2 | 3 | * First version 4 | * Add back Rmd report. 5 | * Run pipeline on GitHub Actions and document how. 6 | -------------------------------------------------------------------------------- /_targets_packages.R: -------------------------------------------------------------------------------- 1 | # Generated by targets::tar_renv(): do not edit by hand 2 | library(biglm) 3 | library(dplyr) 4 | library(ggplot2) 5 | library(readr) 6 | library(tidyr) 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | .Rhistory 3 | .Rapp.history 4 | .RData 5 | .Ruserdata 6 | *-Ex.R 7 | /*.tar.gz 8 | /*.Rcheck/ 9 | .Rproj.user/ 10 | vignettes/*.html 11 | vignettes/*.pdf 12 | *_cache/ 13 | /cache/ 14 | *.utf8.md 15 | *.knit.md 16 | .Renviron 17 | stan/model.rds 18 | _targets 19 | index.html 20 | .Rproj.user 21 | -------------------------------------------------------------------------------- /index.Rmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Results" 3 | output: html_document 4 | --- 5 | 6 | One of the targets made a histogram of ozone levels from the `airquality` dataset. 7 | 8 | ```{r} 9 | library(ggplot2) 10 | library(targets) 11 | tar_read(hist) 12 | ``` 13 | 14 | The [`targets` manual](https://books.ropensci.org/targets/) has a [section on literate programming in pipelines](books.ropensci.org/targets/files.html#literate-programming). 15 | -------------------------------------------------------------------------------- /targets-minimal.Rproj: -------------------------------------------------------------------------------- 1 | Version: 1.0 2 | 3 | RestoreWorkspace: No 4 | SaveWorkspace: No 5 | AlwaysSaveHistory: Default 6 | 7 | EnableCodeIndexing: Yes 8 | UseSpacesForTab: Yes 9 | NumSpacesForTab: 2 10 | Encoding: UTF-8 11 | 12 | RnwWeave: Sweave 13 | LaTeX: pdfLaTeX 14 | 15 | AutoAppendNewline: Yes 16 | StripTrailingWhitespace: Yes 17 | 18 | BuildType: Package 19 | PackageUseDevtools: Yes 20 | PackageInstallArgs: --no-multiarch --with-keep.source 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Question 3 | about: Ask a question. 4 | title: "" 5 | labels: "type: question" 6 | assignees: "" 7 | --- 8 | 9 | ## Prework 10 | 11 | * [ ] I understand and agree to this repository's [code of conduct](https://github.com/wlandau/targets/blob/main/CODE_OF_CONDUCT.md). 12 | * [ ] I understand and agree to this repository's [contributing guidelines](https://github.com/wlandau/targets/blob/main/CONTRIBUTING.md). 13 | 14 | ## Question 15 | 16 | -------------------------------------------------------------------------------- /R/functions.R: -------------------------------------------------------------------------------- 1 | #' @title Plot ozone from the preprocessed air quality data. 2 | #' @description Plot a histogram of ozone concentration. 3 | #' @return A ggplot histogram showing ozone content. 4 | #' @param data Data frame, preprocessed air quality dataset. 5 | #' @examples 6 | #' library(ggplot2) 7 | #' library(tidyverse) 8 | #' data <- airquality %>% 9 | #' mutate(Ozone = replace_na(Ozone, mean(Ozone, na.rm = TRUE))) 10 | #' create_plot(data) 11 | create_plot <- function(data) { 12 | ggplot(data) + 13 | geom_histogram(aes(x = Ozone), bins = 12) + 14 | theme_gray(24) 15 | } 16 | -------------------------------------------------------------------------------- /_targets.R: -------------------------------------------------------------------------------- 1 | library(targets) 2 | library(tarchetypes) 3 | source("R/functions.R") 4 | options(tidyverse.quiet = TRUE) 5 | tar_option_set(packages = c("biglm", "dplyr", "ggplot2", "readr", "tidyr")) 6 | list( 7 | tar_target( 8 | raw_data_file, 9 | "data/raw_data.csv", 10 | format = "file" 11 | ), 12 | tar_target( 13 | raw_data, 14 | read_csv(raw_data_file, col_types = cols()) 15 | ), 16 | tar_target( 17 | data, 18 | raw_data %>% 19 | filter(!is.na(Ozone)) 20 | ), 21 | tar_target(hist, create_plot(data)), 22 | tar_target(fit, biglm(Ozone ~ Wind + Temp, data)), 23 | tar_render(report, "index.Rmd") 24 | ) 25 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/other.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Other 3 | about: Something else. 4 | title: "" 5 | labels: "" 6 | assignees: "" 7 | --- 8 | 9 | ## Prework 10 | 11 | * [ ] I understand and agree to this repository's [code of conduct](https://github.com/wlandau/targets-minimal/blob/main/CODE_OF_CONDUCT.md). 12 | * [ ] I understand and agree to this repository's [contributing guidelines](https://github.com/wlandau/targets-minimal/blob/main/CONTRIBUTING.md). 13 | 14 | ## Description 15 | 16 | Please describe the issue. 17 | 18 | To help us read any code you include (optional) please try to follow the [tidyverse style guide](https://style.tidyverse.org/). The `style_text()` and `style_file()` functions from the [`styler`](https://github.com/r-lib/styler) package make it easier. 19 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | # Prework 2 | 3 | * [ ] I understand and agree to this repository's [code of conduct](https://github.com/wlandau/targets-minimal/blob/main/CODE_OF_CONDUCT.md). 4 | * [ ] I understand and agree to this repository's [contributing guidelines](https://github.com/wlandau/targets-minimal/blob/main/CONTRIBUTING.md). 5 | * [ ] I have already submitted an issue to the [issue tracker](http://github.com/wlandau/targets-minimal/issues) to discuss my idea with the maintainer. 6 | 7 | # Summary 8 | 9 | Please explain the purpose and scope of your contribution. 10 | 11 | # Related GitHub issues and pull requests 12 | 13 | * Ref: # 14 | 15 | # Checklist 16 | 17 | * [ ] This pull request is not a [draft](https://github.blog/2019-02-14-introducing-draft-pull-requests). 18 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: New feature 3 | about: Suggest a new feature. 4 | title: "" 5 | labels: "type: new feature" 6 | assignees: wlandau 7 | --- 8 | 9 | ## Prework 10 | 11 | * [ ] I understand and agree to this repository's [code of conduct](https://github.com/wlandau/targets-minimal/blob/main/CODE_OF_CONDUCT.md). 12 | * [ ] I understand and agree to this repository's [contributing guidelines](https://github.com/wlandau/targets-minimal/blob/main/CONTRIBUTING.md). 13 | * [ ] New features take time and effort to create, and they take even more effort to maintain. So if the purpose of the feature is to resolve a struggle you are encountering personally, please consider first posting a "trouble" or "other" issue so we can discuss your use case and search for existing solutions first. 14 | 15 | ## Proposal 16 | 17 | Please describe the potential feature. 18 | 19 | To help us read any code you include (optional) please try to follow the [tidyverse style guide](https://style.tidyverse.org/). The `style_text()` and `style_file()` functions from the [`styler`](https://github.com/r-lib/styler) package make it easier. 20 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # MIT License 2 | 3 | MIT License 4 | Copyright (c) 2021 Eli Lilly and Company 5 | Author: William Michael Landau (will.landau at gmail) 6 | Written with help from public domain (CC0 1.0 Universal) workflow files by Jim Hester: 7 | * https://github.com/r-lib/actions/blob/master/examples/check-full.yaml 8 | * https://github.com/r-lib/actions/blob/master/examples/blogdown.yaml 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | SOFTWARE. 27 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/trouble.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Trouble 3 | about: You are struggling with a use case, and you are requesting help. 4 | title: "" 5 | labels: "type: trouble" 6 | --- 7 | 8 | ## Prework 9 | 10 | * [ ] I understand and agree to this repository's [code of conduct](https://github.com/wlandau/targets-minimal/blob/main/CODE_OF_CONDUCT.md). 11 | * [ ] I understand and agree to `targets`' [contributing guidelines](https://github.com/wlandau/targets-minimal/blob/main/CONTRIBUTING.md). 12 | 13 | ## Description 14 | 15 | Please describe the trouble. 16 | 17 | ## Reproducible example 18 | 19 | Provide a minimal reproducible example with code and output that demonstrates the problem. The `reprex()` function from the [`reprex`](https://github.com/tidyverse/reprex) package is extremely helpful for this. 20 | 21 | To help us read your code, please try to follow the [tidyverse style guide](https://style.tidyverse.org/). The `style_text()` and `style_file()` functions from the [`styler`](https://github.com/r-lib/styler) package make it easier. 22 | 23 | ## Desired result 24 | 25 | What output or behavior do you want to see? Please be as specific as you can. 26 | 27 | ## Diagnostic information 28 | 29 | * A [reproducible example](https://github.com/tidyverse/reprex). 30 | * Session info, available through `sessionInfo()` or [`reprex(si = TRUE)`](https://github.com/tidyverse/reprex). 31 | * A stack trace from `traceback()` or `rlang::trace_back()`. 32 | * The [SHA-1 hash](https://git-scm.com/book/en/v1/Getting-Started-Git-Basics#Git-Has-Integrity) of the GitHub commit of `targets` currently installed. `packageDescription("targets")$GithubSHA1` shows you this. 33 | 34 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug 3 | about: Something is wrong with the code in this repository. 4 | title: "" 5 | labels: "type: bug" 6 | assignees: wlandau 7 | --- 8 | 9 | ## Prework 10 | 11 | * [ ] I understand and agree to this repository's [code of conduct](https://github.com/wlandau/targets-minimal/blob/main/CODE_OF_CONDUCT.md). 12 | * [ ] I understand and agree to this repository's [contributing guidelines](https://github.com/wlandau/targets-minimal/blob/main/CONTRIBUTING.md). 13 | * [ ] I am reasonably sure this is a genuine bug in this repository's code and most likely not a user error. (If you run into an error and do not know the cause, please submit a "Trouble" issue instead.) 14 | 15 | ## Description 16 | 17 | Please describe the bug. 18 | 19 | ## Reproducible example 20 | 21 | Provide a minimal reproducible example with code and output that demonstrates the problem. The `reprex()` function from the [`reprex`](https://github.com/tidyverse/reprex) package is extremely helpful for this. 22 | 23 | To help us read your code, please follow the [tidyverse style guide](https://style.tidyverse.org/). The `style_text()` and `style_file()` functions from the [`styler`](https://github.com/r-lib/styler) package make it easier. 24 | 25 | ## Expected result 26 | 27 | What should have happened? Please be as specific as possible. 28 | 29 | ## Diagnostic information 30 | 31 | * A [reproducible example](https://github.com/tidyverse/reprex). 32 | * Session info, available through `sessionInfo()` or [`reprex(si = TRUE)`](https://github.com/tidyverse/reprex). 33 | * A stack trace from `traceback()` or `rlang::trace_back()`. 34 | * The [SHA-1 hash](https://git-scm.com/book/en/v1/Getting-Started-Git-Basics#Git-Has-Integrity) of the GitHub commit of `targets` currently installed. `packageDescription("targets")$GithubSHA1` shows you this. 35 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Development is a community effort, and we welcome participation. 4 | 5 | ## Code of Conduct 6 | 7 | By participating in this project, you agree to abide by the [code of conduct](https://github.com/wlandau/targets/blob/main/CODE_OF_CONDUCT.md). 8 | 9 | ## Issues 10 | 11 | Anyone can submit an issue to or comment on an existing thread. Common reasons are to 12 | 13 | * Suggest features. 14 | * Report bugs. 15 | * Request help with difficult use cases. 16 | * Ask questions. 17 | 18 | Please abide by the following guidelines. 19 | 20 | * Before posting a new issue, please take a moment to search for existing similar issues in order to avoid duplication. 21 | * For bug reports: if you can, please install the latest GitHub version of `targets` (i.e. `remotes::install_github("wlandau/targets")`) and verify that the issue still persists. 22 | * Describe your issue in prose as clearly and concisely as possible. 23 | * Include diagnostic details about the problem, including 24 | * A [reproducible example](https://github.com/tidyverse/reprex). 25 | * Session info, available through `sessionInfo()` or [`reprex(si = TRUE)`](https://github.com/tidyverse/reprex). 26 | * A stack trace from `traceback()` or `rlang::trace_back()`. 27 | * The [SHA-1 hash](https://git-scm.com/book/en/v1/Getting-Started-Git-Basics#Git-Has-Integrity) of the GitHub commit of `targets` currently installed. `packageDescription("targets")$GithubSHA1` shows you this. 28 | 29 | ## Development 30 | 31 | External code contributions are extremely helpful in the right circumstances. Here are the recommended steps. 32 | 33 | 1. Prior to contribution, please propose your idea in a [new issue thread](https://github.com/wlandau/targets-minimal/issues) so you and the maintainer can define the intent and scope of your work. 34 | 2. [Fork the repository](https://help.github.com/articles/fork-a-repo/). 35 | 3. Follow the [GitHub flow](https://guides.github.com/introduction/flow/index.html) to create a new branch, add commits, and open a pull request. 36 | 4. Discuss your code with the maintainer in the pull request thread. 37 | 5. If everything looks good, the maintainer will merge your code into the project. 38 | 39 | Please also follow these additional guidelines. 40 | 41 | * Respect the architecture and reasoning of the project. 42 | * If possible, keep contributions small enough to easily review stanly. It is okay to split up your work into multiple pull requests. 43 | * Format your code according to the [tidyverse style guide](https://style.tidyverse.org/) and check your formatting with the `lint_package()` function from the [`lintr`](https://github.com/jimhester/lintr) package. 44 | * Describe your contribution in the project's [`NEWS.md`](https://github.com/wlandau/targets/blob/main/NEWS.md) file. Be sure to mention relevent GitHub issue numbers and your GitHub name as done in existing news entries. 45 | * If you feel contribution is substantial enough for official author or contributor status, please add yourself as an author in the [`DESCRIPTION](https://github.com/wlandau/targets-minimal/blob/main/DESCRIPTION) file. 46 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, sex characteristics, gender identity and expression, 9 | level of experience, education, socio-economic status, nationality, personal 10 | appearance, race, religion, or sexual identity and orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at will.landau@gmail.com. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 72 | 73 | [homepage]: https://www.contributor-covenant.org 74 | 75 | For answers to common questions about this code of conduct, see 76 | https://www.contributor-covenant.org/faq 77 | -------------------------------------------------------------------------------- /data/raw_data.csv: -------------------------------------------------------------------------------- 1 | Ozone,Solar.R,Wind,Temp,Month,Day 2 | 41,190,7.4,67,5,1 3 | 36,118,8,72,5,2 4 | 12,149,12.6,74,5,3 5 | 18,313,11.5,62,5,4 6 | NA,NA,14.3,56,5,5 7 | 28,NA,14.9,66,5,6 8 | 23,299,8.6,65,5,7 9 | 19,99,13.8,59,5,8 10 | 8,19,20.1,61,5,9 11 | NA,194,8.6,69,5,10 12 | 7,NA,6.9,74,5,11 13 | 16,256,9.7,69,5,12 14 | 11,290,9.2,66,5,13 15 | 14,274,10.9,68,5,14 16 | 18,65,13.2,58,5,15 17 | 14,334,11.5,64,5,16 18 | 34,307,12,66,5,17 19 | 6,78,18.4,57,5,18 20 | 30,322,11.5,68,5,19 21 | 11,44,9.7,62,5,20 22 | 1,8,9.7,59,5,21 23 | 11,320,16.6,73,5,22 24 | 4,25,9.7,61,5,23 25 | 32,92,12,61,5,24 26 | NA,66,16.6,57,5,25 27 | NA,266,14.9,58,5,26 28 | NA,NA,8,57,5,27 29 | 23,13,12,67,5,28 30 | 45,252,14.9,81,5,29 31 | 115,223,5.7,79,5,30 32 | 37,279,7.4,76,5,31 33 | NA,286,8.6,78,6,1 34 | NA,287,9.7,74,6,2 35 | NA,242,16.1,67,6,3 36 | NA,186,9.2,84,6,4 37 | NA,220,8.6,85,6,5 38 | NA,264,14.3,79,6,6 39 | 29,127,9.7,82,6,7 40 | NA,273,6.9,87,6,8 41 | 71,291,13.8,90,6,9 42 | 39,323,11.5,87,6,10 43 | NA,259,10.9,93,6,11 44 | NA,250,9.2,92,6,12 45 | 23,148,8,82,6,13 46 | NA,332,13.8,80,6,14 47 | NA,322,11.5,79,6,15 48 | 21,191,14.9,77,6,16 49 | 37,284,20.7,72,6,17 50 | 20,37,9.2,65,6,18 51 | 12,120,11.5,73,6,19 52 | 13,137,10.3,76,6,20 53 | NA,150,6.3,77,6,21 54 | NA,59,1.7,76,6,22 55 | NA,91,4.6,76,6,23 56 | NA,250,6.3,76,6,24 57 | NA,135,8,75,6,25 58 | NA,127,8,78,6,26 59 | NA,47,10.3,73,6,27 60 | NA,98,11.5,80,6,28 61 | NA,31,14.9,77,6,29 62 | NA,138,8,83,6,30 63 | 135,269,4.1,84,7,1 64 | 49,248,9.2,85,7,2 65 | 32,236,9.2,81,7,3 66 | NA,101,10.9,84,7,4 67 | 64,175,4.6,83,7,5 68 | 40,314,10.9,83,7,6 69 | 77,276,5.1,88,7,7 70 | 97,267,6.3,92,7,8 71 | 97,272,5.7,92,7,9 72 | 85,175,7.4,89,7,10 73 | NA,139,8.6,82,7,11 74 | 10,264,14.3,73,7,12 75 | 27,175,14.9,81,7,13 76 | NA,291,14.9,91,7,14 77 | 7,48,14.3,80,7,15 78 | 48,260,6.9,81,7,16 79 | 35,274,10.3,82,7,17 80 | 61,285,6.3,84,7,18 81 | 79,187,5.1,87,7,19 82 | 63,220,11.5,85,7,20 83 | 16,7,6.9,74,7,21 84 | NA,258,9.7,81,7,22 85 | NA,295,11.5,82,7,23 86 | 80,294,8.6,86,7,24 87 | 108,223,8,85,7,25 88 | 20,81,8.6,82,7,26 89 | 52,82,12,86,7,27 90 | 82,213,7.4,88,7,28 91 | 50,275,7.4,86,7,29 92 | 64,253,7.4,83,7,30 93 | 59,254,9.2,81,7,31 94 | 39,83,6.9,81,8,1 95 | 9,24,13.8,81,8,2 96 | 16,77,7.4,82,8,3 97 | 78,NA,6.9,86,8,4 98 | 35,NA,7.4,85,8,5 99 | 66,NA,4.6,87,8,6 100 | 122,255,4,89,8,7 101 | 89,229,10.3,90,8,8 102 | 110,207,8,90,8,9 103 | NA,222,8.6,92,8,10 104 | NA,137,11.5,86,8,11 105 | 44,192,11.5,86,8,12 106 | 28,273,11.5,82,8,13 107 | 65,157,9.7,80,8,14 108 | NA,64,11.5,79,8,15 109 | 22,71,10.3,77,8,16 110 | 59,51,6.3,79,8,17 111 | 23,115,7.4,76,8,18 112 | 31,244,10.9,78,8,19 113 | 44,190,10.3,78,8,20 114 | 21,259,15.5,77,8,21 115 | 9,36,14.3,72,8,22 116 | NA,255,12.6,75,8,23 117 | 45,212,9.7,79,8,24 118 | 168,238,3.4,81,8,25 119 | 73,215,8,86,8,26 120 | NA,153,5.7,88,8,27 121 | 76,203,9.7,97,8,28 122 | 118,225,2.3,94,8,29 123 | 84,237,6.3,96,8,30 124 | 85,188,6.3,94,8,31 125 | 96,167,6.9,91,9,1 126 | 78,197,5.1,92,9,2 127 | 73,183,2.8,93,9,3 128 | 91,189,4.6,93,9,4 129 | 47,95,7.4,87,9,5 130 | 32,92,15.5,84,9,6 131 | 20,252,10.9,80,9,7 132 | 23,220,10.3,78,9,8 133 | 21,230,10.9,75,9,9 134 | 24,259,9.7,73,9,10 135 | 44,236,14.9,81,9,11 136 | 21,259,15.5,76,9,12 137 | 28,238,6.3,77,9,13 138 | 9,24,10.9,71,9,14 139 | 13,112,11.5,71,9,15 140 | 46,237,6.9,78,9,16 141 | 18,224,13.8,67,9,17 142 | 13,27,10.3,76,9,18 143 | 24,238,10.3,68,9,19 144 | 16,201,8,82,9,20 145 | 13,238,12.6,64,9,21 146 | 23,14,9.2,71,9,22 147 | 36,139,10.3,81,9,23 148 | 7,49,10.3,69,9,24 149 | 14,20,16.6,63,9,25 150 | 30,193,6.9,70,9,26 151 | NA,145,13.2,77,9,27 152 | 14,191,14.3,75,9,28 153 | 18,131,8,76,9,29 154 | 20,223,11.5,68,9,30 155 | -------------------------------------------------------------------------------- /README.Rmd: -------------------------------------------------------------------------------- 1 | --- 2 | output: github_document 3 | --- 4 | 5 | ```{r, include = FALSE} 6 | knitr::opts_chunk$set( 7 | collapse = TRUE, 8 | comment = "#>" 9 | ) 10 | ``` 11 | 12 | # `targets` package minimal example 13 | 14 | [![Launch RStudio Cloud](https://img.shields.io/badge/RStudio-Cloud-blue)](https://rstudio.cloud/project/1430691) 15 | 16 | This repository is an example data analysis workflow with [`targets`](https://docs.ropensci.org/targets). The pipeline reads the data from a file, preprocesses it, visualizes it, and fits a regression model. 17 | 18 | ## How to access 19 | 20 | You can try out this example project as long as you have a browser and an internet connection. [Click here](https://rstudio.cloud/project/1430691) to navigate your browser to an RStudio Cloud instance. Alternatively, you can clone or download this code repository and install the R packages [listed here](https://github.com/wlandau/targets-minimal/blob/03835c2aa4679dcf3f28c623a06d7505b18bee17/DESCRIPTION#L25-L30). 21 | 22 | ## How to run 23 | 24 | 1. Open the R console and call `renv::restore()` to install the required R packages. 25 | 2. call the [`tar_make()`](https://wlandau.github.io/targets/reference/tar_make.html) function to run the pipeline. 26 | 3. Then, call `tar_read(hist)` to retrieve the histogram. 27 | 4. Experiment with [other functions](https://wlandau.github.io/targets/reference/index.html) such as [`tar_visnetwork()`](https://wlandau.github.io/targets/reference/tar_visnetwork.html) to learn how they work. 28 | 29 | ## File structure 30 | 31 | The most important files are: 32 | 33 | ```{r, eval = FALSE} 34 | ├── _targets.R 35 | ├── R/ 36 | ├──── functions.R 37 | ├── data/ 38 | ├──── raw_data.csv 39 | └── index.Rmd 40 | ``` 41 | 42 | File | Purpose 43 | ---|--- 44 | [`_targets.R`](https://github.com/wlandau/targets-minimal/blob/main/_targets.R) | The special R script that declares the [`targets`](https://docs.ropensci.org/targets) pipeline. See `tar_script()` for details. 45 | [`R/functions.R`](https://github.com/wlandau/targets-minimal/blob/main/R/functions.R) | An R script with user-defined functions. Unlike [`_targets.R`](https://github.com/wlandau/targets-minimal/blob/main/_targets.R), there is nothing special about the name or location of this script. In fact, for larger projects, it is good practice to partition functions into multiple files. 46 | [`data/raw_data.csv`](https://github.com/wlandau/targets-minimal/blob/main/data/raw_data.csv) | The raw `airquality` dataset. 47 | [`index.Rmd`](https://github.com/wlandau/targets-minimal/blob/main/index.Rmd): an R Markdown report that reruns in the pipeline whenever the histogram of ozone changes ([details](https://books.ropensci.org/targets/files.html#literate-programming)). 48 | 49 | ## Continuous deployment 50 | 51 | Minimal pipelines with low resource requirements are appropriate for continuous deployment. For example, when this particular GitHub repository is updated, its `targets` pipeline runs in a [GitHub Actions workflow](https://github.com/wlandau/targets-minimal/actions). The workflow pushes the results to the [`targets-runs`](https://github.com/wlandau/targets-minimal/tree/targets-runs) branch, and [GitHub Pages](https://pages.github.com/) hosts the latest version of the rendered R Markdown report at . Subsequent runs restore the output files from the previous run so that up-to-date targets do not rebuild. Follow these steps to set up continuous deployment for your own minimal pipeline: 52 | 53 | 1. Ensure your project stays within the storage and compute limitations of GitHub (i.e. your pipeline is minimal). For storage, you may choose the [AWS-backed storage formats](https://books.ropensci.org/targets/cloud.html#storage) (e.g. `tar_target(..., format = "aws_qs")`) for large outputs to reduce the burden on GitHub storage. 54 | 2. Ensure GitHub Actions are enabled in the Settings tab of your GitHub repository's website. 55 | 3. Set up your project with [`renv`](https://rstudio.github.io/renv/) ([details here](https://rstudio.github.io/renv/articles/ci.html)). 56 | * Call `targets::tar_renv(extras = character(0))` to write a `_packages.R` file to expose hidden dependencies. 57 | * Call `renv::init()` to initialize the `renv` lockfile `renv.lock` or `renv::snapshot()` to update it. 58 | * Commit `renv.lock` to your Git repository. 59 | 4. Write the [`.github/workflows/targets.yaml`](https://github.com/wlandau/targets-minimal/blob/main/.github/workflows/targets.yaml) workflow file using `targets::tar_github_actions()` and commit this file to Git. 60 | 5. Push to GitHub. A GitHub Actions workflow should run the pipeline and upload the results to the `targets-runs` branch of your repository. Subsequent runs should add new commits but not necessarily rerun targets. 61 | -------------------------------------------------------------------------------- /.github/workflows/targets.yaml: -------------------------------------------------------------------------------- 1 | # MIT License 2 | # Copyright (c) 2021 Eli Lilly and Company 3 | # Author: William Michael Landau (will.landau at gmail) 4 | # Written with help from public domain (CC0 1.0 Universal) workflow files by Jim Hester: 5 | # * https://github.com/r-lib/actions/blob/master/examples/check-full.yaml 6 | # * https://github.com/r-lib/actions/blob/master/examples/blogdown.yaml 7 | # 8 | # Permission is hereby granted, free of charge, to any person obtaining a copy 9 | # of this software and associated documentation files (the "Software"), to deal 10 | # in the Software without restriction, including without limitation the rights 11 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | # copies of the Software, and to permit persons to whom the Software is 13 | # furnished to do so, subject to the following conditions: 14 | # 15 | # The above copyright notice and this permission notice shall be included in all 16 | # copies or substantial portions of the Software. 17 | # 18 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 24 | # SOFTWARE. 25 | 26 | on: 27 | push: 28 | branches: 29 | - main 30 | - master 31 | 32 | name: targets 33 | 34 | jobs: 35 | targets: 36 | runs-on: ubuntu-latest 37 | env: 38 | GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} 39 | RENV_PATHS_ROOT: ~/.local/share/renv 40 | steps: 41 | - uses: actions/checkout@v2 42 | - uses: r-lib/actions/setup-r@master 43 | - uses: r-lib/actions/setup-pandoc@master 44 | 45 | - name: Install Mac system dependencies 46 | if: runner.os == 'macOS' 47 | run: brew install zeromq 48 | 49 | - name: Install Linux system dependencies 50 | if: runner.os == 'Linux' 51 | run: | 52 | sudo apt-get install libcurl4-openssl-dev 53 | sudo apt-get install libssl-dev 54 | sudo apt-get install libzmq3-dev 55 | 56 | - name: Cache packages 57 | uses: actions/cache@v1 58 | with: 59 | path: ${{ env.RENV_PATHS_ROOT }} 60 | key: ${{ runner.os }}-renv-${{ hashFiles('**/renv.lock') }} 61 | restore-keys: ${{ runner.os }}-renv- 62 | 63 | - name: Restore packages 64 | shell: Rscript {0} 65 | run: | 66 | if (!requireNamespace("renv", quietly = TRUE)) install.packages("renv") 67 | renv::restore() 68 | 69 | - name: Check if previous runs exists 70 | id: runs-exist 71 | run: git ls-remote --exit-code --heads origin targets-runs 72 | continue-on-error: true 73 | 74 | - name: Checkout previous run 75 | if: steps.runs-exist.outcome == 'success' 76 | uses: actions/checkout@v2 77 | with: 78 | ref: targets-runs 79 | fetch-depth: 1 80 | path: .targets-runs 81 | 82 | - name: Restore output files from the previous run 83 | if: steps.runs-exist.outcome == 'success' 84 | run: | 85 | for (dest in scan(".targets-runs/.targets-files", what = character())) { 86 | source <- file.path(".targets-runs", dest) 87 | if (!file.exists(dirname(dest))) dir.create(dirname(dest), recursive = TRUE) 88 | if (file.exists(source)) file.rename(source, dest) 89 | } 90 | shell: Rscript {0} 91 | 92 | - name: Run targets pipeline 93 | run: targets::tar_make() 94 | shell: Rscript {0} 95 | 96 | - name: Identify files that the targets pipeline produced 97 | run: git ls-files -mo --exclude=renv > .targets-files 98 | 99 | - name: Create the runs branch if it does not already exist 100 | if: steps.runs-exist.outcome != 'success' 101 | run: git checkout --orphan targets-runs 102 | 103 | - name: Put the worktree in the runs branch if the latter already exists 104 | if: steps.runs-exist.outcome == 'success' 105 | run: | 106 | rm -r .git 107 | mv .targets-runs/.git . 108 | rm -r .targets-runs 109 | 110 | - name: Upload latest run 111 | run: | 112 | git config --local user.name "GitHub Actions" 113 | git config --local user.email "actions@github.com" 114 | rm -r .gitignore .github/workflows 115 | git add --all -- ':!renv' 116 | for file in $(git ls-files -mo --exclude=renv) 117 | do 118 | git add --force $file 119 | done 120 | git commit -am "Run pipeline" 121 | git push origin targets-runs 122 | 123 | - name: Prepare failure artifact 124 | if: failure() 125 | run: rm -rf .git .github .targets-files .targets-runs 126 | 127 | - name: Post failure artifact 128 | if: failure() 129 | uses: actions/upload-artifact@main 130 | with: 131 | name: ${{ runner.os }}-r${{ matrix.config.r }}-results 132 | path: . 133 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # `targets` package minimal example 3 | 4 | [![Launch RStudio 5 | Cloud](https://img.shields.io/badge/RStudio-Cloud-blue)](https://rstudio.cloud/project/1430691) 6 | 7 | This repository is an example data analysis workflow with 8 | [`targets`](https://docs.ropensci.org/targets). The pipeline reads the 9 | data from a file, preprocesses it, visualizes it, and fits a regression 10 | model. 11 | 12 | ## How to access 13 | 14 | You can try out this example project as long as you have a browser and 15 | an internet connection. [Click 16 | here](https://rstudio.cloud/project/1430691) to navigate your browser to 17 | an RStudio Cloud instance. Alternatively, you can clone or download this 18 | code repository and install the R packages [listed 19 | here](https://github.com/wlandau/targets-minimal/blob/03835c2aa4679dcf3f28c623a06d7505b18bee17/DESCRIPTION#L25-L30). 20 | 21 | ## How to run 22 | 23 | 1. Open the R console and call `renv::restore()` to install the 24 | required R packages. 25 | 2. call the 26 | [`tar_make()`](https://wlandau.github.io/targets/reference/tar_make.html) 27 | function to run the pipeline. 28 | 3. Then, call `tar_read(hist)` to retrieve the histogram. 29 | 4. Experiment with [other 30 | functions](https://wlandau.github.io/targets/reference/index.html) 31 | such as 32 | [`tar_visnetwork()`](https://wlandau.github.io/targets/reference/tar_visnetwork.html) 33 | to learn how they work. 34 | 35 | ## File structure 36 | 37 | The most important files are: 38 | 39 | ``` r 40 | ├── _targets.R 41 | ├── R/ 42 | ├──── functions.R 43 | ├── data/ 44 | ├──── raw_data.csv 45 | └── index.Rmd 46 | ``` 47 | 48 | | File | Purpose | 49 | | --------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | 50 | | [`_targets.R`](https://github.com/wlandau/targets-minimal/blob/main/_targets.R) | The special R script that declares the [`targets`](https://docs.ropensci.org/targets) pipeline. See `tar_script()` for details. | 51 | | [`R/functions.R`](https://github.com/wlandau/targets-minimal/blob/main/R/functions.R) | An R script with user-defined functions. Unlike [`_targets.R`](https://github.com/wlandau/targets-minimal/blob/main/_targets.R), there is nothing special about the name or location of this script. In fact, for larger projects, it is good practice to partition functions into multiple files. | 52 | | [`data/raw_data.csv`](https://github.com/wlandau/targets-minimal/blob/main/data/raw_data.csv) | The raw `airquality` dataset. | 53 | 54 | [`index.Rmd`](https://github.com/wlandau/targets-minimal/blob/main/index.Rmd): 55 | an R Markdown report that reruns in the pipeline whenever the histogram 56 | of ozone changes 57 | ([details](https://books.ropensci.org/targets/files.html#literate-programming)). 58 | 59 | ## Continuous deployment 60 | 61 | Minimal pipelines with low resource requirements are appropriate for 62 | continuous deployment. For example, when this particular GitHub 63 | repository is updated, its `targets` pipeline runs in a [GitHub Actions 64 | workflow](https://github.com/wlandau/targets-minimal/actions). The 65 | workflow pushes the results to the 66 | [`targets-runs`](https://github.com/wlandau/targets-minimal/tree/targets-runs) 67 | branch, and [GitHub Pages](https://pages.github.com/) hosts the latest 68 | version of the rendered R Markdown report at 69 | . Subsequent runs restore 70 | the output files from the previous run so that up-to-date targets do not 71 | rebuild. Follow these steps to set up continuous deployment for your own 72 | minimal pipeline: 73 | 74 | 1. Ensure your project stays within the storage and compute limitations 75 | of GitHub (i.e. your pipeline is minimal). For storage, you may 76 | choose the [AWS-backed storage 77 | formats](https://books.ropensci.org/targets/cloud.html#storage) 78 | (e.g. `tar_target(..., format = "aws_qs")`) for large outputs to 79 | reduce the burden on GitHub storage. 80 | 2. Ensure GitHub Actions are enabled in the Settings tab of your GitHub 81 | repository’s website. 82 | 3. Set up your project with [`renv`](https://rstudio.github.io/renv/) 83 | ([details here](https://rstudio.github.io/renv/articles/ci.html)). 84 | - Call `targets::tar_renv(extras = character(0))` to write a 85 | `_packages.R` file to expose hidden dependencies. 86 | - Call `renv::init()` to initialize the `renv` lockfile 87 | `renv.lock` or `renv::snapshot()` to update it. 88 | - Commit `renv.lock` to your Git repository. 89 | 4. Write the 90 | [`.github/workflows/targets.yaml`](https://github.com/wlandau/targets-minimal/blob/main/.github/workflows/targets.yaml) 91 | workflow file using `targets::tar_github_actions()` and commit this 92 | file to Git. 93 | 5. Push to GitHub. A GitHub Actions workflow should run the pipeline 94 | and upload the results to the `targets-runs` branch of your 95 | repository. Subsequent runs should add new commits but not 96 | necessarily rerun targets. 97 | -------------------------------------------------------------------------------- /renv.lock: -------------------------------------------------------------------------------- 1 | { 2 | "R": { 3 | "Version": "4.1.0", 4 | "Repositories": [ 5 | { 6 | "Name": "CRAN", 7 | "URL": "https://cloud.r-project.org" 8 | } 9 | ] 10 | }, 11 | "Packages": { 12 | "DBI": { 13 | "Package": "DBI", 14 | "Version": "1.1.1", 15 | "Source": "Repository", 16 | "Repository": "CRAN", 17 | "Hash": "030aaec5bc6553f35347cbb1e70b1a17" 18 | }, 19 | "MASS": { 20 | "Package": "MASS", 21 | "Version": "7.3-54", 22 | "Source": "Repository", 23 | "Repository": "CRAN", 24 | "Hash": "0e59129db205112e3963904db67fd0dc" 25 | }, 26 | "Matrix": { 27 | "Package": "Matrix", 28 | "Version": "1.3-4", 29 | "Source": "Repository", 30 | "Repository": "CRAN", 31 | "Hash": "4ed05e9c9726267e4a5872e09c04587c" 32 | }, 33 | "R6": { 34 | "Package": "R6", 35 | "Version": "2.5.1", 36 | "Source": "Repository", 37 | "Repository": "CRAN", 38 | "Hash": "470851b6d5d0ac559e9d01bb352b4021" 39 | }, 40 | "RColorBrewer": { 41 | "Package": "RColorBrewer", 42 | "Version": "1.1-2", 43 | "Source": "Repository", 44 | "Repository": "CRAN", 45 | "Hash": "e031418365a7f7a766181ab5a41a5716" 46 | }, 47 | "base64enc": { 48 | "Package": "base64enc", 49 | "Version": "0.1-3", 50 | "Source": "Repository", 51 | "Repository": "CRAN", 52 | "Hash": "543776ae6848fde2f48ff3816d0628bc" 53 | }, 54 | "biglm": { 55 | "Package": "biglm", 56 | "Version": "0.9-2.1", 57 | "Source": "Repository", 58 | "Repository": "CRAN", 59 | "Hash": "fb9718b294f541ed3adae42b8c830ae7" 60 | }, 61 | "bit": { 62 | "Package": "bit", 63 | "Version": "4.0.4", 64 | "Source": "Repository", 65 | "Repository": "CRAN", 66 | "Hash": "f36715f14d94678eea9933af927bc15d" 67 | }, 68 | "bit64": { 69 | "Package": "bit64", 70 | "Version": "4.0.5", 71 | "Source": "Repository", 72 | "Repository": "CRAN", 73 | "Hash": "9fe98599ca456d6552421db0d6772d8f" 74 | }, 75 | "callr": { 76 | "Package": "callr", 77 | "Version": "3.7.0", 78 | "Source": "Repository", 79 | "Repository": "CRAN", 80 | "Hash": "461aa75a11ce2400245190ef5d3995df" 81 | }, 82 | "cli": { 83 | "Package": "cli", 84 | "Version": "3.0.1", 85 | "Source": "Repository", 86 | "Repository": "CRAN", 87 | "Hash": "e3ae5d68dea0c55a12ea12a9fda02e61" 88 | }, 89 | "clipr": { 90 | "Package": "clipr", 91 | "Version": "0.7.1", 92 | "Source": "Repository", 93 | "Repository": "CRAN", 94 | "Hash": "ebaa97ac99cc2daf04e77eecc7b781d7" 95 | }, 96 | "codetools": { 97 | "Package": "codetools", 98 | "Version": "0.2-18", 99 | "Source": "Repository", 100 | "Repository": "CRAN", 101 | "Hash": "019388fc48e48b3da0d3a76ff94608a8" 102 | }, 103 | "colorspace": { 104 | "Package": "colorspace", 105 | "Version": "2.0-2", 106 | "Source": "Repository", 107 | "Repository": "CRAN", 108 | "Hash": "6baccb763ee83c0bd313460fdb8b8a84" 109 | }, 110 | "cpp11": { 111 | "Package": "cpp11", 112 | "Version": "0.4.0", 113 | "Source": "Repository", 114 | "Repository": "CRAN", 115 | "Hash": "40ba3fd26c8f61d8d14d334bc7761df9" 116 | }, 117 | "crayon": { 118 | "Package": "crayon", 119 | "Version": "1.4.1", 120 | "Source": "Repository", 121 | "Repository": "CRAN", 122 | "Hash": "e75525c55c70e5f4f78c9960a4b402e9" 123 | }, 124 | "data.table": { 125 | "Package": "data.table", 126 | "Version": "1.14.0", 127 | "Source": "Repository", 128 | "Repository": "CRAN", 129 | "Hash": "d1b8b1a821ee564a3515fa6c6d5c52dc" 130 | }, 131 | "digest": { 132 | "Package": "digest", 133 | "Version": "0.6.27", 134 | "Source": "Repository", 135 | "Repository": "CRAN", 136 | "Hash": "a0cbe758a531d054b537d16dff4d58a1" 137 | }, 138 | "dplyr": { 139 | "Package": "dplyr", 140 | "Version": "1.0.7", 141 | "Source": "Repository", 142 | "Repository": "CRAN", 143 | "Hash": "36f1ae62f026c8ba9f9b5c9a08c03297" 144 | }, 145 | "ellipsis": { 146 | "Package": "ellipsis", 147 | "Version": "0.3.2", 148 | "Source": "Repository", 149 | "Repository": "CRAN", 150 | "Hash": "bb0eec2fe32e88d9e2836c2f73ea2077" 151 | }, 152 | "evaluate": { 153 | "Package": "evaluate", 154 | "Version": "0.14", 155 | "Source": "Repository", 156 | "Repository": "CRAN", 157 | "Hash": "ec8ca05cffcc70569eaaad8469d2a3a7" 158 | }, 159 | "fansi": { 160 | "Package": "fansi", 161 | "Version": "0.5.0", 162 | "Source": "Repository", 163 | "Repository": "CRAN", 164 | "Hash": "d447b40982c576a72b779f0a3b3da227" 165 | }, 166 | "farver": { 167 | "Package": "farver", 168 | "Version": "2.1.0", 169 | "Source": "Repository", 170 | "Repository": "CRAN", 171 | "Hash": "c98eb5133d9cb9e1622b8691487f11bb" 172 | }, 173 | "fastmap": { 174 | "Package": "fastmap", 175 | "Version": "1.1.0", 176 | "Source": "Repository", 177 | "Repository": "CRAN", 178 | "Hash": "77bd60a6157420d4ffa93b27cf6a58b8" 179 | }, 180 | "fs": { 181 | "Package": "fs", 182 | "Version": "1.5.0", 183 | "Source": "Repository", 184 | "Repository": "CRAN", 185 | "Hash": "44594a07a42e5f91fac9f93fda6d0109" 186 | }, 187 | "generics": { 188 | "Package": "generics", 189 | "Version": "0.1.0", 190 | "Source": "Repository", 191 | "Repository": "CRAN", 192 | "Hash": "4d243a9c10b00589889fe32314ffd902" 193 | }, 194 | "ggplot2": { 195 | "Package": "ggplot2", 196 | "Version": "3.3.5", 197 | "Source": "Repository", 198 | "Repository": "CRAN", 199 | "Hash": "d7566c471c7b17e095dd023b9ef155ad" 200 | }, 201 | "glue": { 202 | "Package": "glue", 203 | "Version": "1.4.2", 204 | "Source": "Repository", 205 | "Repository": "CRAN", 206 | "Hash": "6efd734b14c6471cfe443345f3e35e29" 207 | }, 208 | "gtable": { 209 | "Package": "gtable", 210 | "Version": "0.3.0", 211 | "Source": "Repository", 212 | "Repository": "CRAN", 213 | "Hash": "ac5c6baf7822ce8732b343f14c072c4d" 214 | }, 215 | "highr": { 216 | "Package": "highr", 217 | "Version": "0.9", 218 | "Source": "Repository", 219 | "Repository": "CRAN", 220 | "Hash": "8eb36c8125038e648e5d111c0d7b2ed4" 221 | }, 222 | "hms": { 223 | "Package": "hms", 224 | "Version": "1.1.0", 225 | "Source": "Repository", 226 | "Repository": "CRAN", 227 | "Hash": "e4bf161ccb74a2c1c0e8ac63bbe332b4" 228 | }, 229 | "htmltools": { 230 | "Package": "htmltools", 231 | "Version": "0.5.2", 232 | "Source": "Repository", 233 | "Repository": "CRAN", 234 | "Hash": "526c484233f42522278ab06fb185cb26" 235 | }, 236 | "igraph": { 237 | "Package": "igraph", 238 | "Version": "1.2.6", 239 | "Source": "Repository", 240 | "Repository": "CRAN", 241 | "Hash": "7b1f856410253d56ea67ad808f7cdff6" 242 | }, 243 | "isoband": { 244 | "Package": "isoband", 245 | "Version": "0.2.5", 246 | "Source": "Repository", 247 | "Repository": "CRAN", 248 | "Hash": "7ab57a6de7f48a8dc84910d1eca42883" 249 | }, 250 | "jquerylib": { 251 | "Package": "jquerylib", 252 | "Version": "0.1.4", 253 | "Source": "Repository", 254 | "Repository": "CRAN", 255 | "Hash": "5aab57a3bd297eee1c1d862735972182" 256 | }, 257 | "jsonlite": { 258 | "Package": "jsonlite", 259 | "Version": "1.7.2", 260 | "Source": "Repository", 261 | "Repository": "CRAN", 262 | "Hash": "98138e0994d41508c7a6b84a0600cfcb" 263 | }, 264 | "knitr": { 265 | "Package": "knitr", 266 | "Version": "1.34", 267 | "Source": "Repository", 268 | "Repository": "CRAN", 269 | "Hash": "aa958054ac6f0360926bb952ea302f0f" 270 | }, 271 | "labeling": { 272 | "Package": "labeling", 273 | "Version": "0.4.2", 274 | "Source": "Repository", 275 | "Repository": "CRAN", 276 | "Hash": "3d5108641f47470611a32d0bdf357a72" 277 | }, 278 | "lattice": { 279 | "Package": "lattice", 280 | "Version": "0.20-45", 281 | "Source": "Repository", 282 | "Repository": "CRAN", 283 | "Hash": "b64cdbb2b340437c4ee047a1f4c4377b" 284 | }, 285 | "lifecycle": { 286 | "Package": "lifecycle", 287 | "Version": "1.0.0", 288 | "Source": "Repository", 289 | "Repository": "CRAN", 290 | "Hash": "3471fb65971f1a7b2d4ae7848cf2db8d" 291 | }, 292 | "magrittr": { 293 | "Package": "magrittr", 294 | "Version": "2.0.1", 295 | "Source": "Repository", 296 | "Repository": "CRAN", 297 | "Hash": "41287f1ac7d28a92f0a286ed507928d3" 298 | }, 299 | "mgcv": { 300 | "Package": "mgcv", 301 | "Version": "1.8-36", 302 | "Source": "Repository", 303 | "Repository": "CRAN", 304 | "Hash": "93cc747b0e1ad882a4570463c3575c23" 305 | }, 306 | "munsell": { 307 | "Package": "munsell", 308 | "Version": "0.5.0", 309 | "Source": "Repository", 310 | "Repository": "CRAN", 311 | "Hash": "6dfe8bf774944bd5595785e3229d8771" 312 | }, 313 | "nlme": { 314 | "Package": "nlme", 315 | "Version": "3.1-153", 316 | "Source": "Repository", 317 | "Repository": "CRAN", 318 | "Hash": "2d632e0d963a653a0329756ce701ecdd" 319 | }, 320 | "pillar": { 321 | "Package": "pillar", 322 | "Version": "1.6.2", 323 | "Source": "Repository", 324 | "Repository": "CRAN", 325 | "Hash": "43f228eb4b49093d1c8a5c93cae9efe9" 326 | }, 327 | "pkgconfig": { 328 | "Package": "pkgconfig", 329 | "Version": "2.0.3", 330 | "Source": "Repository", 331 | "Repository": "CRAN", 332 | "Hash": "01f28d4278f15c76cddbea05899c5d6f" 333 | }, 334 | "prettyunits": { 335 | "Package": "prettyunits", 336 | "Version": "1.1.1", 337 | "Source": "Repository", 338 | "Repository": "CRAN", 339 | "Hash": "95ef9167b75dde9d2ccc3c7528393e7e" 340 | }, 341 | "processx": { 342 | "Package": "processx", 343 | "Version": "3.5.2", 344 | "Source": "Repository", 345 | "Repository": "CRAN", 346 | "Hash": "0cbca2bc4d16525d009c4dbba156b37c" 347 | }, 348 | "progress": { 349 | "Package": "progress", 350 | "Version": "1.2.2", 351 | "Source": "Repository", 352 | "Repository": "CRAN", 353 | "Hash": "14dc9f7a3c91ebb14ec5bb9208a07061" 354 | }, 355 | "ps": { 356 | "Package": "ps", 357 | "Version": "1.6.0", 358 | "Source": "Repository", 359 | "Repository": "CRAN", 360 | "Hash": "32620e2001c1dce1af49c49dccbb9420" 361 | }, 362 | "purrr": { 363 | "Package": "purrr", 364 | "Version": "0.3.4", 365 | "Source": "Repository", 366 | "Repository": "CRAN", 367 | "Hash": "97def703420c8ab10d8f0e6c72101e02" 368 | }, 369 | "readr": { 370 | "Package": "readr", 371 | "Version": "2.0.1", 372 | "Source": "Repository", 373 | "Repository": "CRAN", 374 | "Hash": "34807ea4fb5900386ddef904eef8bdb8" 375 | }, 376 | "renv": { 377 | "Package": "renv", 378 | "Version": "0.14.0", 379 | "Source": "Repository", 380 | "Repository": "CRAN", 381 | "Hash": "30e5eba91b67f7f4d75d31de14bbfbdc" 382 | }, 383 | "rlang": { 384 | "Package": "rlang", 385 | "Version": "0.4.11", 386 | "Source": "Repository", 387 | "Repository": "CRAN", 388 | "Hash": "515f341d3affe0de9e4a7f762efb0456" 389 | }, 390 | "rmarkdown": { 391 | "Package": "rmarkdown", 392 | "Version": "2.11", 393 | "Source": "Repository", 394 | "Repository": "CRAN", 395 | "Hash": "320017b52d05a943981272b295750388" 396 | }, 397 | "scales": { 398 | "Package": "scales", 399 | "Version": "1.1.1", 400 | "Source": "Repository", 401 | "Repository": "CRAN", 402 | "Hash": "6f76f71042411426ec8df6c54f34e6dd" 403 | }, 404 | "stringi": { 405 | "Package": "stringi", 406 | "Version": "1.7.4", 407 | "Source": "Repository", 408 | "Repository": "CRAN", 409 | "Hash": "ebaccb577da50829a3bb1b8296f318a5" 410 | }, 411 | "stringr": { 412 | "Package": "stringr", 413 | "Version": "1.4.0", 414 | "Source": "Repository", 415 | "Repository": "CRAN", 416 | "Hash": "0759e6b6c0957edb1311028a49a35e76" 417 | }, 418 | "tarchetypes": { 419 | "Package": "tarchetypes", 420 | "Version": "0.3.1", 421 | "Source": "Repository", 422 | "Repository": "CRAN", 423 | "Hash": "e2096abc800cee1f1280367f0433cce5" 424 | }, 425 | "targets": { 426 | "Package": "targets", 427 | "Version": "0.8.0", 428 | "Source": "Repository", 429 | "Repository": "CRAN", 430 | "Hash": "857c34fc118c677cf6bf39e9816faf5c" 431 | }, 432 | "tibble": { 433 | "Package": "tibble", 434 | "Version": "3.1.4", 435 | "Source": "Repository", 436 | "Repository": "CRAN", 437 | "Hash": "5e8ad5621e5c94b24ec07b88eee13df8" 438 | }, 439 | "tidyr": { 440 | "Package": "tidyr", 441 | "Version": "1.1.3", 442 | "Source": "Repository", 443 | "Repository": "CRAN", 444 | "Hash": "450d7dfaedde58e28586b854eeece4fa" 445 | }, 446 | "tidyselect": { 447 | "Package": "tidyselect", 448 | "Version": "1.1.1", 449 | "Source": "Repository", 450 | "Repository": "CRAN", 451 | "Hash": "7243004a708d06d4716717fa1ff5b2fe" 452 | }, 453 | "tinytex": { 454 | "Package": "tinytex", 455 | "Version": "0.33", 456 | "Source": "Repository", 457 | "Repository": "CRAN", 458 | "Hash": "6e0ad90ac5669e35d5456cb61b295acb" 459 | }, 460 | "tzdb": { 461 | "Package": "tzdb", 462 | "Version": "0.1.2", 463 | "Source": "Repository", 464 | "Repository": "CRAN", 465 | "Hash": "fb2b801053decce71295bb8cb04d438b" 466 | }, 467 | "utf8": { 468 | "Package": "utf8", 469 | "Version": "1.2.2", 470 | "Source": "Repository", 471 | "Repository": "CRAN", 472 | "Hash": "c9c462b759a5cc844ae25b5942654d13" 473 | }, 474 | "vctrs": { 475 | "Package": "vctrs", 476 | "Version": "0.3.8", 477 | "Source": "Repository", 478 | "Repository": "CRAN", 479 | "Hash": "ecf749a1b39ea72bd9b51b76292261f1" 480 | }, 481 | "viridisLite": { 482 | "Package": "viridisLite", 483 | "Version": "0.4.0", 484 | "Source": "Repository", 485 | "Repository": "CRAN", 486 | "Hash": "55e157e2aa88161bdb0754218470d204" 487 | }, 488 | "vroom": { 489 | "Package": "vroom", 490 | "Version": "1.5.5", 491 | "Source": "Repository", 492 | "Repository": "CRAN", 493 | "Hash": "9c3b3a3f947c7936cea7485349247e5b" 494 | }, 495 | "withr": { 496 | "Package": "withr", 497 | "Version": "2.4.2", 498 | "Source": "Repository", 499 | "Repository": "CRAN", 500 | "Hash": "ad03909b44677f930fa156d47d7a3aeb" 501 | }, 502 | "xfun": { 503 | "Package": "xfun", 504 | "Version": "0.26", 505 | "Source": "Repository", 506 | "Repository": "CRAN", 507 | "Hash": "a270216f7ffda25e53298293046d1d05" 508 | }, 509 | "yaml": { 510 | "Package": "yaml", 511 | "Version": "2.2.1", 512 | "Source": "Repository", 513 | "Repository": "CRAN", 514 | "Hash": "2826c5d9efb0a88f657c7a679c7106db" 515 | } 516 | } 517 | } 518 | --------------------------------------------------------------------------------