Introduction¶
Data science is an exciting discipline that allows you to transform raw data into understanding, insight, and knowledge. The goal of "R for Data Science" is to help you learn the most important tools in R that will allow you to do data science efficiently and reproducibly. After reading this book, you'll have the tools to tackle a wide variety of data science challenges, using the best parts of R.
What you will learn¶
Data science is a huge field, and there's no way you can master it all by reading a single book. The goal of this book is to give you a solid foundation in the most important tools, and enough knowledge to find the resources to learn more when necessary. Our model of the tools needed in a typical data science project looks something like this:
First you must import your data into R. This typically means that you take data stored in a file, database, or web application programming interface (API), and load it into a data frame in R. If you can't get your data into R, you can't do data science on it!
Once you've imported your data, it is a good idea to tidy it. Tidying your data means storing it in a consistent form that matches the semantics of the dataset with the way it is stored. In brief, when your data is tidy, each column is a variable, and each row is an observation. Tidy data is important because the consistent structure lets you focus your efforts on answering questions about the data, not fighting to get the data into the right form for different functions.
Once you have tidy data, a common next step is to transform it. Transformation includes narrowing in on observations of interest (like all people in one city, or all data from the last year), creating new variables that are functions of existing variables (like computing speed from distance and time), and calculating a set of summary statistics (like counts or means). Together, tidying and transforming are called wrangling, because getting your data in a form that's natural to work with often feels like a fight!
Once you have tidy data with the variables you need, there are two main engines of knowledge generation: visualisation and modelling. These have complementary strengths and weaknesses so any real analysis will iterate between them many times.
Visualisation is a fundamentally human activity. A good visualisation will show you things that you did not expect, or raise new questions about the data. A good visualisation might also hint that you're asking the wrong question, or that you need to collect different data. Visualisations can surprise you and they don't scale particularly well because they require a human to interpret them.
Models are complementary tools to visualisation. Once you have made your questions sufficiently precise, you can use a model to answer them. Models are a fundamentally mathematical or computational tool, so they generally scale well. Even when they don’t, it’s usually cheaper to buy more computers than it is to buy more brains! But every model makes assumptions, and by its very nature a model cannot question its own assumptions. That means a model cannot fundamentally surprise you.
The last step of data science is communication, an absolutely critical part of any data analysis project. It doesn't matter how well your models and visualisation have led you to understand the data unless you can also communicate your results to others.
Surrounding all these tools is programming. Programming is a cross-cutting tool that you use in nearly every part of a data science project. You don't need to be an expert programmer to be a successful data scientist, but learning more about programming pays off, because becoming a better programmer allows you to automate common tasks, and solve new problems with greater ease.
You'll use these tools in every data science project, but for most projects they're not enough. There's a rough 80-20 rule at play; you can tackle about 80% of every project using the tools that you'll learn in this book, but you'll need other tools to tackle the remaining 20%. Throughout this book, we'll point you to resources where you can learn more.
How this book is organised¶
The previous description of the tools of data science is organised roughly according to the order in which you use them in an analysis (although of course you’ll iterate through them multiple times). In our experience, however, this is not the best way to learn them:
*Starting with data ingest and tidying is sub-optimal because 80% of the time it’s routine and boring, and the other 20% of the time it’s weird and frustrating. That’s a bad place to start learning a new subject! Instead, we’ll start with visualisation and transformation of data that’s already been imported and tidied. That way, when you ingest and tidy your own data, your motivation will stay high because you know the pain is worth it.
Some topics are best explained with other tools. For example, we believe that it’s easier to understand how models work if you already know about visualisation, tidy data, and programming.
Programming tools are not necessarily interesting in their own right, but do allow you to tackle considerably more challenging problems. We’ll give you a selection of programming tools in the middle of the book, and then you’ll see how they can combine with the data science tools to tackle interesting modelling problems.
Within each chapter, we try and stick to a similar pattern: start with some motivating examples so you can see the bigger picture, and then dive into the details. Each section of the book is paired with exercises to help you practice what you’ve learned. While it’s tempting to skip the exercises, there’s no better way to learn than practicing on real problems.
What you won't learn¶
There are a number of important topics that this book doesn't cover. We believe it's important to stay ruthlessly focused on the essentials so you can get up and running as quickly as possible. That means this book can't cover every important topic.
Big data¶
This book proudly focuses on small, in-memory datasets. This is the right place to start because you can't tackle big data unless you have experience with small data. The tools you learn in this book will easily handle hundreds of megabytes of data, and with a little care, you can typically use them to work with 1-2 Gb of data. If you're routinely working with larger data (10-100 Gb, say), you should learn more about data.table. This book doesn't teach data.table because it has a very concise interface that offers fewer linguistic cues, which makes it harder to learn. However, if you're working with large data, the performance payoff is worth the extra effort required to learn it.
If your data is bigger than this, carefully consider whether your big data problem is actually a small data problem in disguise. While the complete data set might be big, often the data needed to answer a specific question is small. You might be able to find a subset, subsample, or summary that fits in memory and still allows you to answer the question that you're interested in. The challenge here is finding the right small data, which often requires a lot of iteration.
Another possibility is that your big data problem is actually a large number of small data problems in disguise. Each individual problem might fit in memory, but you have millions of them. For example, you might want to fit a model to each person in your dataset. This would be trivial if you had just 10 or 100 people, but instead you have a million. Fortunately, each problem is independent of the others (a setup that is sometimes called embarrassingly parallel), so you just need a system (like Hadoop or Spark) that allows you to send different datasets to different computers for processing. Once you've figured out how to answer your question for a single subset using the tools described in this book, you can learn new tools like sparklyr, rhipe, and ddr to solve it for the full dataset.
Python, Julia, and friends¶
In this book, you won't learn anything about Python, Julia, or any other programming language useful for data science. This isn't because we think these tools are bad. They're not! And in practice, most data science teams use a mix of languages, often at least R and Python.
However, we strongly believe that it's best to master one tool at a time. You will get better faster if you dive deep, rather than spreading yourself thinly over many topics. This doesn't mean you should only know one thing, just that you'll generally learn faster if you stick to one thing at a time. You should strive to learn new things throughout your career, but make sure your understanding is solid before you move on to the next interesting thing.
We think R is a great place to start your data science journey because it is an environment designed from the ground up to support data science. R is not just a programming language, it is also an interactive environment for doing data science. To support interaction, R is a much more flexible language than many of its peers. This flexibility comes with its downsides, but the big upside is how easy it is to evolve tailored grammars for specific parts of the data science process. These mini languages help you think about problems as a data scientist, while supporting fluent interaction between your brain and the computer.
Non-rectangular data¶
This book focuses exclusively on rectangular data: collections of values that are each associated with a variable and an observation. There are lots of datasets that do not naturally fit in this paradigm, including images, sounds, trees, and text. But rectangular data frames are extremely common in science and industry, and we believe that they are a great place to start your data science journey.
Hypothesis confirmation¶
It’s possible to divide data analysis into two camps: hypothesis generation and hypothesis confirmation (sometimes called confirmatory analysis). The focus of this book is unabashedly on hypothesis generation, or data exploration. Here you’ll look deeply at the data and, in combination with your subject knowledge, generate many interesting hypotheses to help explain why the data behaves the way it does. You evaluate the hypotheses informally, using your scepticism to challenge the data in multiple ways.
The complement of hypothesis generation is hypothesis confirmation. Hypothesis confirmation is hard for two reasons:
You need a precise mathematical model in order to generate falsifiable predictions. This often requires considerable statistical sophistication.
You can only use an observation once to confirm a hypothesis. As soon as you use it more than once you’re back to doing exploratory analysis. This means to do hypothesis confirmation you need to “preregister” (write out in advance) your analysis plan, and not deviate from it even when you have seen the data. We’ll talk a little about some strategies you can use to make this easier in modelling.
It’s common to think about modelling as a tool for hypothesis confirmation, and visualisation as a tool for hypothesis generation. But that’s a false dichotomy: models are often used for exploration, and with a little care you can use visualisation for confirmation. The key difference is how often do you look at each observation: if you look only once, it’s confirmation; if you look more than once, it’s exploration.
Prerequisites¶
We've made a few assumptions about what you already know in order to get the most out of this book. You should be generally numerically literate, and it's helpful if you have some programming experience already. If you've never programmed before, you might find Hands on Programming with R by Garrett to be a useful adjunct to this book.
There are four things you need to run the code in this book: R, RStudio, a collection of R packages called the tidyverse, and a handful of other packages. Packages are the fundamental units of reproducible R code. They include reusable functions, the documentation that describes how to use them, and sample data.
R¶
To download R, go to CRAN, the comprehensive R archive network. CRAN is composed of a set of mirror servers distributed around the world and is used to distribute R and R packages. Don't try and pick a mirror that's close to you: instead use the cloud mirror, https://cloud.r-project.org, which automatically figures it out for you.
A new major version of R comes out once a year, and there are 2-3 minor releases each year. It's a good idea to update regularly. Upgrading can be a bit of a hassle, especially for major versions, which require you to re-install all your packages, but putting it off only makes it worse. You'll need at least R 4.1.0 for this book.
RStudio¶
RStudio is an integrated development environment, or IDE, for R programming. Download and install it from http://www.rstudio.com/download. RStudio is updated a couple of times a year. When a new version is available, RStudio will let you know. It's a good idea to upgrade regularly so you can take advantage of the latest and greatest features. For this book, make sure you have at least RStudio 1.6.0.
When you start RStudio, you'll see two key regions in the interface: the console pane, and the output pane.
For now, all you need to know is that you type R code in the console pane, and press enter to run it. You'll learn more as we go along!
The tidyverse¶
You'll also need to install some R packages. An R package is a collection of functions, data, and documentation that extends the capabilities of base R. Using packages is key to the successful use of R. The majority of the packages that you will learn in this book are part of the so-called tidyverse. All packages in the tidyverse share a common philosophy of data and R programming, and are designed to work together naturally.
You can install the complete tidyverse with a single line of code:
install.packages("tidyverse")
On your own computer, type that line of code in the console, and then press enter to run it. R will download the packages from CRAN and install them on to your computer. If you have problems installing, make sure that you are connected to the internet, and that https://cloud.r-project.org/ isn't blocked by your firewall or proxy.
You will not be able to use the functions, objects, or help files in a package until you load it with library()
.
Once you have installed a package, you can load it using the library()
function:
library(tidyverse)
Warning message in system("timedatectl", intern = TRUE): “running command 'timedatectl' had status 1” ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ── ✔ ggplot2 3.3.6 ✔ purrr 0.3.4 ✔ tibble 3.1.7 ✔ dplyr 1.0.9 ✔ tidyr 1.2.0 ✔ stringr 1.4.0 ✔ readr 2.1.2 ✔ forcats 0.5.1 ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ── ✖ dplyr::filter() masks stats::filter() ✖ dplyr::lag() masks stats::lag()
This tells you that tidyverse is loading eight packages: ggplot2, tibble, tidyr, readr, purrr, dplyr, stringr, and forcats packages. These are considered to be the core of the tidyverse because you'll use them in almost every analysis.
Packages in the tidyverse change fairly frequently.
You can check whether updates are available, and optionally install them, by running tidyverse_update()
.
Other packages¶
There are many other excellent packages that are not part of the tidyverse, because they solve problems in a different domain, or are designed with a different set of underlying principles. This doesn't make them better or worse, just different. In other words, the complement to the tidyverse is not the messyverse, but many other universes of interrelated packages. As you tackle more data science projects with R, you'll learn new packages and new ways of thinking about data.
In this book we'll use three data packages from outside the tidyverse:
install.packages(c("nycflights13", "gapminder", "Lahman"))
These packages provide data on airline flights, world development, and baseball that we'll use to illustrate key data science ideas.
Running R code¶
The previous section showed you several examples of running R code. Code in the book looks like this:
1 + 2
If you run the same code in your local console, it will look like this:
> 1 + 2
[1] 3
There are two main differences.
In your console, you type after the >
, called the prompt; we don't show the prompt in the book.
In the book, output is commented out with #>
; in your console it appears directly after your code.
These two differences mean that if you're working with an electronic version of the book, you can easily copy code out of the book and into the console.
Throughout the book, we use a consistent set of conventions to refer to code:
Functions are displayed in a code font and followed by parentheses, like
sum()
, ormean()
.Other R objects (such as data or function arguments) are in a code font, without parentheses, like
flights
orx
.Sometimes, to make it clear which package an object comes from, we'll use we'll use the package name followed by two colons, like
dplyr::mutate()
, or\nycflights13::flights
. This is also valid R code.
Acknowledgements¶
This book isn't just the product of Hadley, Mine, and Garrett, but is the result of many conversations (in person and online) that we've had with many people in the R community. There are a few people we'd like to thank in particular, because they have spent many hours answering our questions and helping us to better think about data science:
Jenny Bryan and Lionel Henry for many helpful discussions around working with lists and list-columns.
The three chapters on workflow were adapted (with permission), from http://stat545.com/block002_hello-r-workspace-wd-project.html by Jenny Bryan.
Yihui Xie for his work on the bookdown package, and for tirelessly responding to my feature requests.
Bill Behrman for his thoughtful reading of the entire book, and for trying it out with his data science class at Stanford.
The #rstats Twitter community who reviewed all of the draft chapters and provided tons of useful feedback.
This book was written in the open, and many people contributed pull requests to fix minor problems. Special thanks goes to everyone who contributed via GitHub:
library(dplyr)
# git --no-pager shortlog -ns > contribs.txt
contribs <- readr::read_tsv(
"https://raw.githubusercontent.com/hadley/r4ds/main/contribs.txt",
col_names = c("n", "name")
)
contribs <- contribs |>
filter(!name %in% c("hadley", "Garrett", "Hadley Wickham",
"Garrett Grolemund", "Mine Cetinkaya-Rundel")) |>
arrange(name) |>
mutate(uname = ifelse(!grepl(" ", name), paste0("\\@", name), name))
cat("Thanks go to all contributers in alphabetical order: ")
cat("\n")
cat(paste0(contribs$uname, collapse = ", "))
cat(".\n")
Rows: 185 Columns: 2 ── Column specification ──────────────────────────────────────────────────────── Delimiter: "\t" chr (1): name dbl (1): n ℹ Use `spec()` to retrieve the full column specification for this data. ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Thanks go to all contributers in alphabetical order: \@a-rosenberg, A. s, Abhinav Singh, adi pradhan, Ahmed ElGabbas, Ajay Deonarine, \@AlanFeder, Albert Y. Kim, \@Alex, Andrea Gilardi, Andrew Landgraf, \@andrewmacfarland, Angela Li, Azza Ahmed, bahadir cankardes, \@batpigandme, \@behrman, Ben Herbertson, Ben Marwick, Ben Steinberg, Benjamin Yeh, Bianca Peterson, Bill Behrman, \@BirgerNi, \@boardtc, Brandon Greenwell, Brent Brewington, Brett Klamer, Brian G. Barkley, Charlotte Wickham, Christian G. Warden, Christian Heinrich, Christian Mongeau, Colin Gillespie, Cooper Morris, Curtis Alexander, Daniel Gromer, David Clark, David Rubinger, Derwin McGeary, Devin Pastoor, Dirk Eddelbuettel, \@djbirke, \@DSGeoff, Dylan Cashman, Earl Brown, Edwin Thoen, Eric Watt, Erik Erhardt, Etienne B. Racine, Everett Robinson, Flemming Villalona, Floris Vanderhaeghe, Garrick Aden-Buie, George Wang, Gregory Jefferis, Gustav W Delius, Hao Chen, \@harrismcgehee, Hengni Cai, Hiroaki Yutani, Hojjat Salmasian, Ian Lyttle, Ian Sealy, Ivan Krukov, Jacek Kolacz, Jacob Kaplan, Jakub Nowosad, Jazz Weisman, Jeff Boichuk, Jeffrey Arnold, Jen Ren, Jennifer (Jenny) Bryan, \@jennybc, Jeroen Janssens, Jim Hester, \@jjchern, Joanne Jang, Johannes Gruber, John Blischak, John D. Storey, John Sears, Jon Calder, \@Jonas, Jonathan Page, \@jonathanflint, Jose Roberto Ayala Solares, Josh Goldberg, \@juandering, Julia Stewart Lowndes, Julian During, Justinas Petuchovas, \@kaetschap, Kara de la Marck, Kara Woo, Katrin Leinweber, \@kdpsingh, Kenny Darrell, Kirill Müller, Kirill Sevastyanenko, \@koalabearski, Kunal Marwaha, \@KyleHumphrey, Lawrence Wu, \@lindbrook, Luke Smith, Luke W Johnston, Mara Averick, Maria Paula Caldas, Mark Beveridge, Matt Herman, Matthew Hendrickson, Matthew Sedaghatfar, \@MattWittbrodt, Mauro Lepore, Michael Henry, \@MJMarshall, Mustafa Ascha, \@nate-d-olson, \@nattalides, Nelson Areal, Nicholas Tierney, Nick Clark, \@nickelas, Nina Munkholt Jakobsen, Nirmal Patel, Nischal Shrestha, Noah Landesberg, \@nwaff, \@OaCantona, Pablo E, Patrick Kennedy, \@Paul, \@pete, Peter Hurford, Rademeyer Vermaak, Radu Grosu, Ranae Dietzel, Riva Quiroga, \@rlzijdeman, Rob Tenorio, Robert Schuessler, \@robertchu03, Robin Gertenbach, \@robinlovelace, \@robinsones, Rohan Alexander, \@RomeroBarata, S'busiso Mkhondwane, \@Saghir, Sam Firke, Seamus McKinsey, \@seamus-mckinsey, \@seanpwilliams, Sebastian Kraus, Shannon Ellis, \@shoili, \@sibusiso16, \@Sophiazj, \@spirgel, Stéphane Guillou, Steve Mortimer, \@svenski, Tal Galili, Terence Teo, Thomas Klebel, Tim Waterhouse, TJ Mahr, Tom Prior, \@twgardner2, Ulrik Lyngs, Will Beasley, \@yahwes, Yihui Xie, Yiming (Paul) Li, Yu Yu Aung, Zach Bogart, \@zeal626, Zhuoer Dong, \@蒋雨蒙.
Colophon¶
An online version of this book is available at http://r4ds.had.co.nz{.uri}. It will continue to evolve in between reprints of the physical book. The source of the book is available at https://github.com/hadley/r4ds. The book is powered by https://bookdown.org which makes it easy to turn R Markdown files into HTML, PDF, and EPUB.
This book was built with:
sessioninfo::session_info(c("tidyverse"))
- $platform
- $version
- 'R version 4.2.0 (2022-04-22)'
- $os
- 'Ubuntu 18.04.5 LTS'
- $system
- 'x86_64, linux-gnu'
- $ui
- 'X11'
- $language
- '(EN)'
- $collate
- 'en_US.UTF-8'
- $ctype
- 'en_US.UTF-8'
- $tz
- 'Etc/UTC'
- $date
- '2022-08-02'
- $pandoc
- '1.19.2.4 @ /usr/bin/pandoc'
- $packages
A packages_info: 102 × 11 package ondiskversion loadedversion path loadedpath attached is_base date source md5ok library <chr> <chr> <chr> <chr> <chr> <lgl> <lgl> <chr> <chr> <lgl> <fct> askpass askpass 1.1 NA /usr/lib/R/site-library/askpass NA FALSE FALSE 2019-01-13 CRAN (R 4.0.0) NA /usr/lib/R/site-library assertthat assertthat 0.2.1 0.2.1 /usr/lib/R/site-library/assertthat /usr/lib/R/site-library/assertthat FALSE FALSE 2019-03-21 CRAN (R 4.0.0) NA /usr/lib/R/site-library backports backports 1.4.1 1.4.1 /usr/lib/R/site-library/backports /usr/lib/R/site-library/backports FALSE FALSE 2021-12-13 CRAN (R 4.1.2) NA /usr/lib/R/site-library base64enc base64enc 0.1-3 0.1-3 /usr/lib/R/site-library/base64enc /usr/lib/R/site-library/base64enc FALSE FALSE 2015-07-28 CRAN (R 4.0.0) NA /usr/lib/R/site-library bit bit 4.0.4 4.0.4 /usr/lib/R/site-library/bit /usr/lib/R/site-library/bit FALSE FALSE 2020-08-04 CRAN (R 4.0.2) NA /usr/lib/R/site-library bit64 bit64 4.0.5 4.0.5 /usr/lib/R/site-library/bit64 /usr/lib/R/site-library/bit64 FALSE FALSE 2020-08-30 CRAN (R 4.0.2) NA /usr/lib/R/site-library blob blob 1.2.3 NA /usr/lib/R/site-library/blob NA FALSE FALSE 2022-04-10 CRAN (R 4.1.3) NA /usr/lib/R/site-library broom broom 1.0.0 1.0.0 /usr/lib/R/site-library/broom /usr/lib/R/site-library/broom FALSE FALSE 2022-07-01 CRAN (R 4.2.0) NA /usr/lib/R/site-library bslib bslib 0.4.0 NA /usr/lib/R/site-library/bslib NA FALSE FALSE 2022-07-16 CRAN (R 4.2.0) NA /usr/lib/R/site-library cachem cachem 1.0.6 NA /usr/lib/R/site-library/cachem NA FALSE FALSE 2021-08-19 CRAN (R 4.1.1) NA /usr/lib/R/site-library callr callr 3.7.1 NA /usr/lib/R/site-library/callr NA FALSE FALSE 2022-07-13 CRAN (R 4.2.0) NA /usr/lib/R/site-library cellranger cellranger 1.1.0 1.1.0 /usr/lib/R/site-library/cellranger /usr/lib/R/site-library/cellranger FALSE FALSE 2016-07-27 CRAN (R 4.0.0) NA /usr/lib/R/site-library cli cli 3.3.0 3.3.0 /usr/lib/R/site-library/cli /usr/lib/R/site-library/cli FALSE FALSE 2022-04-25 CRAN (R 4.2.0) NA /usr/lib/R/site-library clipr clipr 0.8.0 NA /usr/lib/R/site-library/clipr NA FALSE FALSE 2022-02-22 CRAN (R 4.1.2) NA /usr/lib/R/site-library colorspace colorspace 2.0-3 2.0-3 /usr/lib/R/site-library/colorspace /usr/lib/R/site-library/colorspace FALSE FALSE 2022-02-21 CRAN (R 4.1.2) NA /usr/lib/R/site-library cpp11 cpp11 0.4.2 NA /usr/lib/R/site-library/cpp11 NA FALSE FALSE 2021-11-30 CRAN (R 4.1.2) NA /usr/lib/R/site-library crayon crayon 1.5.1 1.5.1 /usr/lib/R/site-library/crayon /usr/lib/R/site-library/crayon FALSE FALSE 2022-03-26 CRAN (R 4.1.3) NA /usr/lib/R/site-library curl curl 4.3.2 4.3.2 /usr/lib/R/site-library/curl /usr/lib/R/site-library/curl FALSE FALSE 2021-06-23 CRAN (R 4.1.0) NA /usr/lib/R/site-library data.table data.table 1.14.2 NA /usr/lib/R/site-library/data.table NA FALSE FALSE 2021-09-27 CRAN (R 4.1.1) NA /usr/lib/R/site-library DBI DBI 1.1.3 1.1.3 /usr/lib/R/site-library/DBI /usr/lib/R/site-library/DBI FALSE FALSE 2022-06-18 CRAN (R 4.2.0) NA /usr/lib/R/site-library dbplyr dbplyr 2.2.1 2.2.1 /usr/lib/R/site-library/dbplyr /usr/lib/R/site-library/dbplyr FALSE FALSE 2022-06-27 CRAN (R 4.2.0) NA /usr/lib/R/site-library digest digest 0.6.29 0.6.29 /usr/lib/R/site-library/digest /usr/lib/R/site-library/digest FALSE FALSE 2021-12-01 CRAN (R 4.1.2) NA /usr/lib/R/site-library dplyr dplyr 1.0.9 1.0.9 /usr/lib/R/site-library/dplyr /usr/lib/R/site-library/dplyr TRUE FALSE 2022-04-28 CRAN (R 4.2.0) NA /usr/lib/R/site-library dtplyr dtplyr 1.2.1 NA /usr/lib/R/site-library/dtplyr NA FALSE FALSE 2022-01-19 CRAN (R 4.1.2) NA /usr/lib/R/site-library ellipsis ellipsis 0.3.2 0.3.2 /usr/lib/R/site-library/ellipsis /usr/lib/R/site-library/ellipsis FALSE FALSE 2021-04-29 CRAN (R 4.0.5) NA /usr/lib/R/site-library evaluate evaluate 0.15 0.15 /usr/lib/R/site-library/evaluate /usr/lib/R/site-library/evaluate FALSE FALSE 2022-02-18 CRAN (R 4.1.2) NA /usr/lib/R/site-library fansi fansi 1.0.3 1.0.3 /usr/lib/R/site-library/fansi /usr/lib/R/site-library/fansi FALSE FALSE 2022-03-24 CRAN (R 4.1.3) NA /usr/lib/R/site-library farver farver 2.1.1 NA /usr/lib/R/site-library/farver NA FALSE FALSE 2022-07-06 CRAN (R 4.2.0) NA /usr/lib/R/site-library fastmap fastmap 1.1.0 1.1.0 /usr/lib/R/site-library/fastmap /usr/lib/R/site-library/fastmap FALSE FALSE 2021-01-25 CRAN (R 4.0.3) NA /usr/lib/R/site-library forcats forcats 0.5.1 0.5.1 /usr/lib/R/site-library/forcats /usr/lib/R/site-library/forcats TRUE FALSE 2021-01-27 CRAN (R 4.0.3) NA /usr/lib/R/site-library ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ readr readr 2.1.2 2.1.2 /usr/lib/R/site-library/readr /usr/lib/R/site-library/readr TRUE FALSE 2022-01-30 CRAN (R 4.1.2) NA /usr/lib/R/site-library readxl readxl 1.4.0 1.4.0 /usr/lib/R/site-library/readxl /usr/lib/R/site-library/readxl FALSE FALSE 2022-03-28 CRAN (R 4.1.3) NA /usr/lib/R/site-library rematch rematch 1.0.1 NA /usr/lib/R/site-library/rematch NA FALSE FALSE 2016-04-21 CRAN (R 4.0.0) NA /usr/lib/R/site-library rematch2 rematch2 2.1.2 NA /usr/lib/R/site-library/rematch2 NA FALSE FALSE 2020-05-01 CRAN (R 4.0.0) NA /usr/lib/R/site-library reprex reprex 2.0.1 2.0.1 /usr/lib/R/site-library/reprex /usr/lib/R/site-library/reprex FALSE FALSE 2021-08-05 CRAN (R 4.1.0) NA /usr/lib/R/site-library rlang rlang 1.0.4 1.0.4 /usr/lib/R/site-library/rlang /usr/lib/R/site-library/rlang FALSE FALSE 2022-07-12 CRAN (R 4.2.0) NA /usr/lib/R/site-library rmarkdown rmarkdown 2.14 NA /usr/lib/R/site-library/rmarkdown NA FALSE FALSE 2022-04-25 CRAN (R 4.2.0) NA /usr/lib/R/site-library rstudioapi rstudioapi 0.13 0.13 /usr/lib/R/site-library/rstudioapi /usr/lib/R/site-library/rstudioapi FALSE FALSE 2020-11-12 CRAN (R 4.0.3) NA /usr/lib/R/site-library rvest rvest 1.0.2 1.0.2 /usr/lib/R/site-library/rvest /usr/lib/R/site-library/rvest FALSE FALSE 2021-10-16 CRAN (R 4.1.1) NA /usr/lib/R/site-library sass sass 0.4.2 NA /usr/lib/R/site-library/sass NA FALSE FALSE 2022-07-16 CRAN (R 4.2.0) NA /usr/lib/R/site-library scales scales 1.2.0 1.2.0 /usr/lib/R/site-library/scales /usr/lib/R/site-library/scales FALSE FALSE 2022-04-13 CRAN (R 4.1.3) NA /usr/lib/R/site-library selectr selectr 0.4-2 NA /usr/lib/R/site-library/selectr NA FALSE FALSE 2019-11-20 CRAN (R 4.0.0) NA /usr/lib/R/site-library stringi stringi 1.7.8 1.7.8 /usr/lib/R/site-library/stringi /usr/lib/R/site-library/stringi FALSE FALSE 2022-07-11 CRAN (R 4.2.0) NA /usr/lib/R/site-library stringr stringr 1.4.0 1.4.0 /usr/lib/R/site-library/stringr /usr/lib/R/site-library/stringr TRUE FALSE 2019-02-10 CRAN (R 4.0.0) NA /usr/lib/R/site-library sys sys 3.4 NA /usr/lib/R/site-library/sys NA FALSE FALSE 2020-07-23 CRAN (R 4.0.2) NA /usr/lib/R/site-library tibble tibble 3.1.7 3.1.7 /usr/lib/R/site-library/tibble /usr/lib/R/site-library/tibble TRUE FALSE 2022-05-03 CRAN (R 4.2.0) NA /usr/lib/R/site-library tidyr tidyr 1.2.0 1.2.0 /usr/lib/R/site-library/tidyr /usr/lib/R/site-library/tidyr TRUE FALSE 2022-02-01 CRAN (R 4.1.2) NA /usr/lib/R/site-library tidyselect tidyselect 1.1.2 1.1.2 /usr/lib/R/site-library/tidyselect /usr/lib/R/site-library/tidyselect FALSE FALSE 2022-02-21 CRAN (R 4.1.2) NA /usr/lib/R/site-library tidyverse tidyverse 1.3.1 1.3.1 /usr/lib/R/site-library/tidyverse /usr/lib/R/site-library/tidyverse TRUE FALSE 2021-04-15 CRAN (R 4.0.5) NA /usr/lib/R/site-library tinytex tinytex 0.40 NA /usr/lib/R/site-library/tinytex NA FALSE FALSE 2022-06-15 CRAN (R 4.2.0) NA /usr/lib/R/site-library tzdb tzdb 0.3.0 0.3.0 /usr/lib/R/site-library/tzdb /usr/lib/R/site-library/tzdb FALSE FALSE 2022-03-28 CRAN (R 4.1.3) NA /usr/lib/R/site-library utf8 utf8 1.2.2 1.2.2 /usr/lib/R/site-library/utf8 /usr/lib/R/site-library/utf8 FALSE FALSE 2021-07-24 CRAN (R 4.1.0) NA /usr/lib/R/site-library uuid uuid 1.1-0 1.1-0 /usr/lib/R/site-library/uuid /usr/lib/R/site-library/uuid FALSE FALSE 2022-04-19 CRAN (R 4.2.0) NA /usr/lib/R/site-library vctrs vctrs 0.4.1 0.4.1 /usr/lib/R/site-library/vctrs /usr/lib/R/site-library/vctrs FALSE FALSE 2022-04-13 CRAN (R 4.1.3) NA /usr/lib/R/site-library viridisLite viridisLite 0.4.0 NA /usr/lib/R/site-library/viridisLite NA FALSE FALSE 2021-04-13 CRAN (R 4.0.5) NA /usr/lib/R/site-library vroom vroom 1.5.7 1.5.7 /usr/lib/R/site-library/vroom /usr/lib/R/site-library/vroom FALSE FALSE 2021-11-30 CRAN (R 4.1.2) NA /usr/lib/R/site-library withr withr 2.5.0 2.5.0 /usr/lib/R/site-library/withr /usr/lib/R/site-library/withr FALSE FALSE 2022-03-03 CRAN (R 4.1.2) NA /usr/lib/R/site-library xfun xfun 0.31 NA /usr/lib/R/site-library/xfun NA FALSE FALSE 2022-05-10 CRAN (R 4.2.0) NA /usr/lib/R/site-library xml2 xml2 1.3.3 1.3.3 /usr/lib/R/site-library/xml2 /usr/lib/R/site-library/xml2 FALSE FALSE 2021-11-30 CRAN (R 4.1.2) NA /usr/lib/R/site-library yaml yaml 2.3.5 NA /usr/lib/R/site-library/yaml NA FALSE FALSE 2022-02-21 CRAN (R 4.1.2) NA /usr/lib/R/site-library