From 0f81fc93bbc801e89ae63d3071734dcdfbf492d9 Mon Sep 17 00:00:00 2001 From: Lane Drew Date: Thu, 13 Jun 2024 10:34:38 -0600 Subject: [PATCH] Updated to address issue with assignment templates. --- .../figure-html/unnamed-chunk-474-1.png | Bin 101956 -> 101816 bytes .../figure-html/unnamed-chunk-478-1.png | Bin 66623 -> 66446 bytes _bookdown.yml | 33 ++-- .../figure-html/unnamed-chunk-474-1.png | Bin 101956 -> 101816 bytes .../figure-html/unnamed-chunk-478-1.png | Bin 66623 -> 66446 bytes docs/index.html | 2 +- docs/reference-keys 2.txt | 168 ++++++++++++++++++ docs/search_index.json | 2 +- docs/vignettes.html | 10 +- docs/workspace-setup.html | 4 +- docs/writing-functions.html | 4 +- 11 files changed, 196 insertions(+), 27 deletions(-) create mode 100644 docs/reference-keys 2.txt diff --git a/Module1_files/figure-html/unnamed-chunk-474-1.png b/Module1_files/figure-html/unnamed-chunk-474-1.png index fef1726c7fd5aa694ebfe726008a0944657c066f..d824d8ffbc6d56be3cdd0bf18c2fc347dc5b1d45 100644 GIT binary patch literal 101816 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 z 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

{hJvdpCw?%VE>^ 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 z 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�AjOMQuL@V4wy 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 diff --git a/_bookdown.yml b/_bookdown.yml index 32bd5ee..a5f1d74 100644 --- a/_bookdown.yml +++ b/_bookdown.yml @@ -1,16 +1,17 @@ -book_filename: "Module1" -delete_merged_file: true -language: - ui: - chapter_name: "Chapter " - before_chapter_script: "rscripts/before_chapter.r" -rmd_files: - - "index.Rmd" - - "src/02-CoursePreliminaries.Rmd" - - "src/03-InstallingR.Rmd" - - "src/04-RProgrammingFundamentals.Rmd" - - "src/05-WorkingWithData.Rmd" - - "src/06-PerformingEffectiveDataAnalysis.Rmd" -output_dir: "docs" -# rmd_subdir: ["src"] # misses index.Rmd if we use this -# clean: ["src/book.bib"] # removes book.bib file when cleaned +book_filename: "Module1" +delete_merged_file: true +language: + ui: + chapter_name: "Chapter " + before_chapter_script: "rscripts/before_chapter.r" +rmd_files: + - "index.Rmd" + - "src/02-CoursePreliminaries.Rmd" + - "src/03-InstallingR.Rmd" + - "src/04-RProgrammingFundamentals.Rmd" + - "src/05-WorkingWithData.Rmd" + - "src/06-PerformingEffectiveDataAnalysis.Rmd" +output_dir: "docs" +ignore: ["assignment_templates/*"] +# rmd_subdir: ["src"] # misses index.Rmd if we use this +# clean: ["src/book.bib"] # removes book.bib file when cleaned diff --git a/docs/Module1_files/figure-html/unnamed-chunk-474-1.png b/docs/Module1_files/figure-html/unnamed-chunk-474-1.png index fef1726c7fd5aa694ebfe726008a0944657c066f..d824d8ffbc6d56be3cdd0bf18c2fc347dc5b1d45 100644 GIT binary patch literal 101816 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 z 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

{hJvdpCw?%VE>^ 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 z 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�AjOMQuL@V4wy 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 diff --git a/docs/index.html b/docs/index.html index 9d39bd3..67cfb71 100644 --- a/docs/index.html +++ b/docs/index.html @@ -344,7 +344,7 @@

R Module 1

Lane Drew2

-

11 Jun, 2024, 12:38 PM

+

13 Jun, 2024, 10:33 AM

Chapter 1 Welcome!

diff --git a/docs/reference-keys 2.txt b/docs/reference-keys 2.txt new file mode 100644 index 0000000..21319d1 --- /dev/null +++ b/docs/reference-keys 2.txt @@ -0,0 +1,168 @@ +fig:unnamed-chunk-1 +fig:unnamed-chunk-9 +fig:unnamed-chunk-12 +fig:unnamed-chunk-34 +fig:unnamed-chunk-35 +fig:unnamed-chunk-36 +fig:unnamed-chunk-49 +fig:unnamed-chunk-323 +fig:unnamed-chunk-325 +fig:unnamed-chunk-326 +fig:unnamed-chunk-327 +welcome +how-to-navigate-this-book +associated-csu-course +prelim +this-textbook +special-boxes +how-this-book-displays-code +next-steps +course-topics-syllabus +syllabus +assignment-templates +course-policies +grading-scale +running-your-first-r-code +getoutoftheclass +what-is-r +r-is-a-programming-language +r-is-software +r-is-free +r-is-open-source +r-is-an-ecosystem +r-packages +r-interfaces +the-r-community +places-to-get-help-if-youre-a-student-taking-this-class-for-credit +places-to-get-help-anyone +installing-r +computer-basics +operating-systems +files-directory-structures +downloads-and-installations +install-r-r-studio +installing-r-1 +windows +macos +linux +conclusion +installing-rstudio +windows-1 +macos-1 +conclusion-1 +successfull-installation +running-code-in-rstudio +the-r-console +r-scripts +same-examples-on-your-computer +r-markdown +workspace-setup +recommended-settings +setting-working-directory +create-rstudio-project-and-directories-for-class +create-rstudio-project +create-directory-structure +video +set +some-useful-commands-you-should-know +r-programming-fundamentals +programming-preliminaries +r-commands +comments +blank-lines +case +section +section-1 +data-types +numeric +integer +character +logical +data-structures +vectors +accessing-and-changing-elements +working-with-vectors +vectors-of-different-types +special-numeric-vectors +another-data-type-factor +combining-vectors +type-conversion +matrices +lists +lists-and-vectors +lists-of-vectors +data-frames +r-objects +everything-is-an-object-in-r +assigning-objects +attributes +null-objects +removing-objects +working-with-data +quick-example +reading-writing-data +olympic-athletes-example +locating-your-data-set +reading-csv-files +writing-csv-files +summary-statistics +quantitative-variables +categorical-variables +saving-an-rdata-file +data-formatting +raw-data-vs.-clean-data. +indexing +vectors-1 +matrices-1 +lists-1 +data-frames-1 +advanced-indexing +logical-based-indexing +negative-indexing +nested-indexing-13 +visualization +one-quantitative-variable +two-quantitative-variables +one-categorical-variable +two-categorical-variables +multiple-plots +other-types-of-plots +scatterplot-matrix +surfaces +saving-images +rcode +rstudio-plot-window +rmarkdown +plotting-wrap-up +vignettes +flood-analysis-example +map +installing-and-using-packages +downloading-the-data +explore-the-data-structure +explore-the-data +analyze-the-data +performing-effective-data-analysis +basic-control-flow +loops +nested-loops +breaking-out-of-for-loops. +if-statements +else +breaking-out-of-for-loops.-1 +formatting-conventions +writing-functions +the-components-of-a-function +writing-a-function +using-functions-for-data-analysis +function-scope +advanced-control-flow +applying-over-multiple-dimensions +applying-over-data-frame-groups +working-with-popular-packages +what-is-a-package +how-do-i-use-packages +finding-and-using-package-help. +making-beautiful-plots-with-ggplot2 +organizing-your-data-with-dplyr +working-with-character-strings-with-stringr diff --git a/docs/search_index.json b/docs/search_index.json index 0c670c3..75717e6 100644 --- a/docs/search_index.json +++ b/docs/search_index.json @@ -1 +1 @@ -[["index.html", "R Module 1 Chapter 1 Welcome!", " R Module 1 Alex Fout1 Lane Drew2 11 Jun, 2024, 12:38 PM Chapter 1 Welcome! Hi, and welcome to the R Module 1 (AKA STAT 158) course at Colorado State University! This course is the first of three 1 credit courses intended to introduce the R programming language to those with little or no programming experience. Through these Modules (courses), we’ll explore how R can be used to do the following: Perform basic computations and logic, just like any other programming language Load, clean, analyze, and visualize data Run scripts Create reproducible reports so you can explain your work in a narrative form In addition, you’ll also be exposed to some aspects of the broader R community, including: R as free, open source software The free RStudio IDE Publicly available packages which extend the capability of R Events and community groups which advocate for the use of R and the support of R users More detail will be provided in the Course Topics laid out in the next chapter. 1.0.1 How To Navigate This Book To move quickly to different portions of the book, click on the appropriate chapter or section in the the table of contents on the left. The buttons at the top of the page allow you to show/hide the table of contents, search the book, change font settings, download a pdf or ebook copy of this book, or get hints on various sections of the book. The faint left and right arrows at the sides of each page (or bottom of the page if it’s narrow enough) allow you to step to the next/previous section. Here’s what they look like: Figure 1.1: Left and right navigation arrows Department of Statistics, Colorado State University, fout@colostate.edu↩︎ Department of Statistics, Colorado State University, lane.drew@colostate.edu↩︎ "],["associated-csu-course.html", "1.1 Associated CSU Course", " 1.1 Associated CSU Course This bookdown book is intended to accompany the associated course at Colorado State University, but the curriculum is free for anyone to access and use. If you’re reading the PDF or EPUB version of this book, you can find the “live” version at https://csu-r.github.io/Module1/, and all of the source files for this book can be found at https://github.com/CSU-R/Module1. If you’re not taking the CSU course, you will periodically encounter instructions and references which are not relevant to you. For example, we will make reference to the Canvas website, which only CSU students enrolled in the course have access to. "],["prelim.html", "Chapter 2 Course Preliminaries", " Chapter 2 Course Preliminaries “Learning to code is useful no matter what your career ambitions are.” —Arianna Huffington, Founder, The Huffington Post In this chapter, we’ll discuss the preliminary details of the course. Then you’ll run some R code and learn more about R and the R community. "],["this-textbook.html", "2.1 This Textbook", " 2.1 This Textbook This course is presented as a bookdown document, and is divided into chapters and sections. Each week, you’ll be expected to read through the chapter and complete any associated exercises, quizzes, or assignments. 2.1.1 Special Boxes Throughout the book, you’ll encounter special boxes, each with a special meaning. Here is an example of each type of box: This box will prompt you to pause and reflect on your experience and/or learning. No feedback will be given, but this may be graded on completion. This box will signify a quiz or assignment which you will turn in for grading, on which the instructor will provide feedback. This box is for checking your understanding, to make sure you are ready for what follows. This box is for displaying/linking to videos in order to help illustrate or communicate concepts. This box will warn you of possible problems or pitfalls you may encounter! This box is to provide material going beyond the main course content, or material which will be revisited later in more depth. This box will prompt for your feedback on the organization of the course, so we can improve the material for everyone! Any of the boxes may include hyperlinks like this: I am a link or code like this This is code. 2.1.2 How This Book Displays Code In addition, you may see R code either as part of a sentence like this: 1+1, or as a separate block like so: 1+1 [1] 2 Sometimes (as in this example) we will also show the output (in yellow), that is, the result of running the R code. In this case the code 1+1 produced the output 2. If you hover over a code block with your mouse, you will see the option to copy the code to your clipboard, like this: Figure 2.1: copying code from this book This will be useful when you are asked to run code on your computer. 2.1.3 Next Steps When you’re ready, go to the next section to learn about the course syllabus and grading policies. Any feedback for this section? Click here "],["course-topics-syllabus.html", "2.2 Course Topics & Syllabus", " 2.2 Course Topics & Syllabus Broadly speaking, the topics of this course are described by the Chapter Titles. Here’s what each entails: Course Preliminaries: Introduction to R and the world of R Installing R: Like it sounds, setting up your computer so you can work with R. R Programming Fundamentals: The basics of programming in R, the building blocks that you need in order to do anything more interesting. Working with Data: How to do meaningful things with data sets. Probably the most useful Chapter of the book. Creating R Programs: More programming concepts to increase your R Power! 2.2.1 Syllabus First, some important details: Instructor: Lane Drew Office Hours: Schedule and location TBA. Webpages: Canvas, this textbook Course Credits: 1. This means ~1 hours of lecture and 4 hours of work outside of lecture per week. Textbook: You’re reading it right now. The textbook will be your primary learning resource. You’ll be expected to read through the required sections, watch any relevant videos, and complete any reflections, progress checks, and assessments along the way. On days when a quiz is due, you should complete the reading before you take the quiz. Prerequisites: None Assignments/What-to-turn-in: This course will be graded on three types of assignments: Progress Checks, Homeworks, and Quizzes. There will be four of each. Most weeks, you will have one of these three types of assignments due. Due dates will be specified on Canvas and assignments will be due at 11:59pm on the indicated day (please see schedule below). Progress Checks: As you work your way through the textbook, you’ll encounter purple “Progress Check” boxes. For the first Progress Check, you’ll submit your responses directly to Canvas. For Progress Checks 2-4, you’ll fill in an R Markdown document and submit it to canvas. You’ll be provided a template to fill in as you complete the progress checks. To turn in the document, you’ll knit the document to HTML or PDF and upload to Canvas. (More details coming later in the book!). Progress checks will be graded on completion, organization, and correctness. Progress Checks must be turned in by 11:59pm (Mountain) on the day they are due. Half credit will be given for a two-day window after the due date, after which no credit will be possible. Homework: There are four homeworks during the semester. You’ll complete each homework using R. Homeworks must be turned in by 11:59pm (Mountain) on the day they are due. Half credit will be given for a two-day window after the due date, after which no credit will be possible. Quizzes: There will be four 15 minute Canvas quizzes during the semester. Quizzes must be completed by 11:59pm (Mountain) on the day they are due. There are NO late quizzes accepted after the due date has passed. If you cannot complete the quiz on the day it is due, you are expected to do it early. Exams: There will be no exams in this course Lectures: Lectures will be held on Fridays. There will be mini-lectures, approximately 10-30 minutes. The mini-lectures will be based on previously read material, no new material will be presented. Students are expected to have read the material before the lecture. The remainder of the time will be student-led. We will cover questions students may have or work on homework together. Grading: The grading for the course is apportioned like so: Progress Checks: 30% Homework: 40% Quizzes: 30% 2.2.2 Assignment Templates In order to complete the progress checks and course assignments, you’ll need to start from these templates: Progress Checks (Progress Check 1 will not require a template) Progress Check 2 Progress Check 3 Progress Check 4 Assignments Homework 1 Homework 2 Homework 3 Homework 4 2.2.3 Course Policies Late Work: Homework and Progress Checks must be turned in on time to receive full credit. You may turn in Homework and Progress Checks up to 2 days late for up to 50% credit. Group Work: Students are welcome to discuss the course with each other, but all work you turn in must be your own. This means no sharing solutions to homework, progress checks, or quizzes. You may not work with other students on quizzes. You are welcome to seek help on Canvas discussion boards and during office hours. Students with Disabilities: The university is committed to providing support for students with disabilities. If you have an accommodation plan, please provide that to me as soon as possible so we can discuss appropriate arrangements. Growth Mindset: This phrase was coined by Carol Dweck to reflect how your learning outcomes can be affected by the way you view the learning process. To quote Dweck: “The view you adopt for yourself profoundly affects the way you lead your life… Believing that your qualities are carved in stone - the fixed mindset - creates an urgency to prove yourself over and over. If you have only a certain amount of intelligence, a certain personality, and a certain moral character — well, then you’d better prove that you have a healthy dose of them. It simply wouldn’t do to look or feel deficient in these most basic characteristics… There’s another mindset in which these traits are not simply a hand you’re dealt and have to live with, always trying to convince yourself and others that you have a royal flush when you’re secretly worried it’s a pair of tens. In this mindset, the hand you’re dealt is just the starting point for development. This growth mindset is based on the belief that your basic qualities are things you can cultivate through your efforts. Although people may differ in every which way — in their initial talents and aptitudes, interests, or temperaments — everyone can change and grow through application and experience.” Programming may be a very new, intimidating thing for you. That’s okay! View this course as a way to grow and gain new skills which you can use to do incredible and important things! Learn by doing: A wise statistics instructor once compared watching someone else solve statistics problems to watching someone else practice shooting basketball free throws. You may learn a little by watching, but at some point you won’t get any better until you try it yourself! The same can be said for programming. Reading a textbook and watching videos are a good start, but you’ll have to actually program in order to get any better! This textbook was designed to be interactive, and I encourage you to “code along with the book” as you read. 2.2.4 Grading Scale Grades will be assigned according to the following scale: Class.Score Letter.Grade 92%-100% A 90%-92% A- 88%-90% B+ 82%-88% B 80%-82% B- 78%-80% C+ 70%-78% C 60%-70% D 0%-60% F Any feedback for this section? Click here "],["running-your-first-r-code.html", "2.3 Running your first R Code", " 2.3 Running your first R Code Enough of the boring stuff, let’s run some R code! Normally you will run R on your computer, but since you may not have R installed yet, let’s run some R code using a website first. As you run code, you’ll see some of the things R can do. In a browser, navigate to rdrr.io/snippets, where you’ll see a box that looks like this: Figure 2.2: rdrr code entry box The box comes with some code entered already, but we want to use our own code instead, so delete all the text, from before library(ggplot2) to after factor(cyl)). In its place, type 1+1, then click the big green “Run” button. You should see the [1] 2 displayed below. So if you give R a math expression, it will evaluate it and give the result. Note: the “correct answer” to \\(1+1\\) is 2, but the output also displays [1], which we won’t explain until later, so you can ignore that for now. Next, delete the code you just wrote and type (or copy/paste) the following, and run it: factorial(10) The result should be a very large number, which is equivalent to \\(10!\\), that is, \\(10\\times9\\times8\\times7\\times6\\times5\\times4\\times3\\times2\\times1\\). This is an example of an R function, which we will discuss more later. Aside from math, R can produce plots. Try copy/pasting the following code into the website: x <- -10:10 plot(x, x^2) You should see points in a scatter plot which follow a parabola. Here’s a more complicated example, which you should copy/paste into the website and run: library(ggplot2) theme_set(theme_bw()) ggplot(mtcars, aes(y = mpg, fill = as.factor(cyl))) + geom_boxplot() + labs(title = "Engine Fuel Efficiency vs. Number of Cylinders", y = "MPG", fill = "Cylinders") + theme(legend.position = "bottom", axis.ticks.x = element_blank(), axis.text.x = element_blank()) R can be used to make many types of visualizations, which you will do more of later. This may be the first time you’ve seen R, so it’s okay if you don’t understand how to read this code. We’ll talk more later about what each statement is doing, but for now, here is a brief description of some of the code above: -10:10 This creates a sequence of numbers starting from -10 and ending at 10. That is, \\(-10, -9, -8, \\ldots, 8, 9, 10\\). library This is a function which loads an R package. R packages provide extra abilities to R. Any feedback for this section? Click here "],["getoutoftheclass.html", "2.4 What do you hope to get out of this course?", " 2.4 What do you hope to get out of this course? To close out this chapter, it would be healthy for you to reflect on what you’d like to get from this course. Take some time to think through each question below, and write down your answers. It is fine if your honest answer is I don’t know. In that case, try to come up with some possible answers that might be true. Why are you taking this course? If this course is required for your major, how do you think it is supposed to benefit you in your studies? What types of data sets related to your field of study may require data analysis? What skills do you hope to develop in this course, and how might they be applied in your major and career? Submit your answers to the above reflection to Canvas. This will be your Progress Check 1. Store your answers in a safe place, and refer to them periodically as you progress through the course. You may find that you aren’t achieving your goals and that some adjustment to how you are approaching the course may be necessary. Or you may find that your goals have changed, which is fine! Just update your goals so that you have something to refer back to. Any feedback for this section? Click here "],["what-is-r.html", "2.5 What is R?", " 2.5 What is R? What is R? This question can be answered several different ways. Here are a few of them: 2.5.1 R is a Programming Language A programming language is a way of providing instructions to a computer. Some popular languages (in no particular order) are C, C++, Java, Python, PHP, Visual Basic, and Swift. Much like other types of languages, programming languages combine text and punctuation (syntax) to create statements which provide meaningful instructions (semantics) to be performed by a computer. These instructions are called “code”. R code can be used to do many things, but primarily R was designed to easily work with data and produce graphics. The R language can be used to get a computer to do the following: Read and process a set of data in a file or database Use data to compute statistics and perform statistical tests Produce nice looking visualizations of data Save data for others to use. But this list is just the tip of the iceberg. As you will see, R can be used to do so much more! After the instructions are written, the R code is run, that is, the code is provided to the computer, and the computer performs the instructions to produce the desired results. Many other programming languages use different syntax for the same purpose. # comments out a line in R and python % comments out a line in matlab // comments out a line in C++ and javascript Similar to learning a foreign language, learning your first programming language will make it easier to understand other similar ones. 2.5.2 R is software R can also be thought of as the software program which runs R code. In other words, if R code is the computer language, then the R software is what interprets the language and makes the computer follow the instructions laid out in the code. This is sometimes called “base R”. 2.5.3 R is Free The R software is free, so anyone can download R, write R code, and run the R code in order to produce results on their computer. 2.5.4 R is Open Source The R software, which runs R code, is also made up of a bunch of code called source code. In addition to being free, R is also open source, meaning that anyone can look at the source code and understand the “deep-down nuts-and-bolts” of how R works. In addition, anyone is able to contribute to R, in order to improve it and add new features to it. What are the advantages of open-source software? What are some potential downsides? Why do you think the creators of R decided to make it open source? 2.5.5 R is an ecosystem Another way of thinking about R is to include not only the R language and the R software, but also the community of R users and programmers, and the various “add on” software they have created for R. These add on software are called “packages”. 2.5.6 R Packages An R package is software written to extend the capabilities of base R. R packages are often written in R code, so anyone who knows how to write R code can also create R packages. The importance of packages cannot be understated. One of the reasons for the incredible popularity of R is the fact that members from the community can write new packages which enable R to do more. Sometimes packages are written to help folks in particular disciplines (e.g. psychology, geosciences, microbiology, education) do their jobs better. Other times, packages are written to extend the capability of R so that people from many disciplines can use them. R can be used to make web sites, interactive applications, dynamic reproducible reports, and even textbooks (like this one!). The inclusion of R packages, combined with the free and open source nature of R software, has led to the development of an active, diverse, and supportive community of R users who can easily share their code, data, and results with one another. skimr is one example of a package. It provides a frictionless approach to summary statistics which conforms to the principle of least surprise, displaying summary statistics the user can skim quickly to understand their data. 2.5.7 R Interfaces The R software can be run in many different places, including personal computers, remote servers, and websites (as you have seen!). R works on Windows, macOS, and Linux, and R can be run using a terminal or command line (if you know what those are), or using a graphical user interface (with buttons you can click and such). By far one of the most popular ways of using R is with RStudio, which is also free and open source software. For this course, you’ll be using RStudio. Any feedback for this section? Click here "],["the-r-community.html", "2.6 The R Community", " 2.6 The R Community We already mentioned that there is an active community of R users around the world, ranging from novice to expert level. Here is a partial list of venues where R users interact (aside from the official websites, none of these links should be considered an official endorsement): R Project: The official website for R. R Project Mailing Lists: Various email lists to stay informed on R related activities. The R-announce list is a good starting point, which will keep you updated on the latest releases of the R software. Twitter #rstats: Many R Users are active on Twitter and you can find them. Tidy Tuesday is a weekly online project that focuses on understanding how to summarize, arrange, and make meaningful charts with open source data. You can see the projects others have done by following #tidytuesday on twitter. R-Ladies is a global group dedicated to promoting gender equality in the R community. They have an elaborate list of resources for learning and host educational and networking events. R-Podcast: A periodic podcast with practical advice for using R, and the latest R news. R-Bloggers: A blog website where authors can post examples of code, data analysis, and visualization. 2.6.1 Places to Get Help (If you’re a student taking this class for credit) Students taking the course for credit should seek help from these places, in order: Canvas Discussion boards Office Hours I will not answer homework/quiz/textbook related questions via email. 2.6.2 Places to Get Help (anyone) If you find yourself stuck, there are many options available to you, here are a few: Stack Overflow is a message board where users can post questions about issues they’re having. If you search for your error, there’s likely already an answered question about it. If not, you can submit one with a reproducible example that the active community can help you with. R Manuals: With so many R resources available on the internet, sometimes information gets “boiled down” or simplified for ease of communication. If you need the “official answer” to a question, these manuals are the place to go. Check out “An Introduction to R” for a good reference. Any feedback for this section? Click here "],["installing-r.html", "Chapter 3 Installing R", " Chapter 3 Installing R “Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” - Martin Fowler In the previous chapter, you ran R code on a website. The purpose of this chapter is to install R on your own computer, so that you can run R without needing access to the internet. "],["computer-basics.html", "3.1 Computer Basics", " 3.1 Computer Basics If you’re new to computers, this section will be important for you to get set up. We’ll briefly introduce some computer concepts and discuss how they’re relevant to R. If you understand the basics of operating systems, directory structures on your computer, and downloading/installing files, then you can probably skim this section, but be sure to pay attention to the R-specific information. 3.1.1 Operating Systems An operating system is a set of programs that allow you to interact with the computer, and the most popular operating systems are Windows, macOS, and Linux. R works on Windows, macOS, and several Linux-based operating systems, so if you have one of these operating systems, you’ll be able install and use R. At least, this is mostly true: Some versions of Windows that run on ARM processors cannot install R, and installing R on a Chromebook will likely be more complicated (see here). If you’re in this situation, contact the instructor immediately. R isn’t designed to work on tablets or phones which run mobile/tablet operating systems (like iOS, iPadOS, Android, ChromeOS), so these are not an option for R. 3.1.2 Files & Directory Structures A file is a collection of data stored on your computer’s hard drive. Examples of files include: A music file A video A slide presentation A text document Different types of files are often treated differently by your computer. For example, a music file is played with a music player program, a video can be viewed with a video player, and a slide presentation might be viewed with Powerpoint. Most operating systems know the type of a file by looking at the extension, which is at the very end of the file’s name. Examples include “.mp3”, “.doc”, “.txt”, and “.ppt”. When using R, we can write scripts which contain R code, and R Markdown documents, which include human readable text and code. R scripts usually have either a “.R” or “.r” extension, and we’ll also be using R Markdown, which use either a “.Rmd” or “.rmd” extension. A directory, or folder, is a collection of files, and computers use directories to logically organize sets of files. When working with R, you may have to organize several different types of files, including R code, data files, and images. It will be important to stay organized when using R, and we will address this more later in the chapter. With the increasing prevalence of the internet in everyday life, it’s becoming less common for files to exist on your computer. When writing R code, you’ll be working with files on your computer, not accessing them over the internet. 3.1.3 Downloads and Installations To install R, you’ll have to download a file from the internet which performs the installation. After you install R, you shouldn’t have to download anything to run R. The specific steps to install R will be different depending on your operating system, and this will be addressed in the next section. Any feedback for this section? Click here "],["install-r-r-studio.html", "3.2 Install R & R Studio", " 3.2 Install R & R Studio Here’s where you install R on your personal computer, but you’ll actually be installing two separate programs. The first is the R programming language. The second is a separate program called RStudio, which will be the primary way in which you interact with R in this class, we will say more about this later. 3.2.1 Installing R Installation will look slightly different depending on the operating system, but the major steps are the same. First, navigate to the CRAN Mirrors Site, which lists several locations from which R can be downloaded. Find a location near you (or not, this isn’t critical) and click on the link to be brought to the mirror site. From this point, this will change depending on your operating system. 3.2.1.1 Windows Click “Download R for Windows”, then click “base”. Finally, Click “Download R X.Y.Z for Windows”, where X, Y, and Z will be numbers. These numbers indicate which version of R you’ll be installing. As of the publishing of this book, R is on version 4.4.0. Your computer might prompt for the location on your computer that you would like to save the file. Select a location (reasonable options are your Downloads folder or the Desktop) and select “save”. When the download completes, find the downloaded file in the File Explorer and double click to run it. This will start the installation process. Follow the on screen prompts. For the most part you can click “next” and “install” as appropriate, and you don’t have to worry about changing any installation settings. Click “Finish” to complete the installation! This video shows the installation process for Windows. https://www.youtube.com/embed/7ZYn6q_pboE 3.2.1.2 macOS Click “Download R for macOS” Click “R-X.Y.Z.pkg”, where X, Y, and Z will be numbers. These numbers indicate which version of R you’ll be installing. As of the publishing of this book, R is on version 4.4.0. Your computer might prompt for the location on your computer that you would like to save the file. Select a location and select “save”. When the download completes, find the downloaded file in the Finder and double click to run it. This will start the installation process. Follow the on screen prompts. For the most part you can click “continue”, “agree”, “install”, as appropriate, and you don’t have to worry about changing any installation settings. Click “Close” to complete the installation! 3.2.1.3 Linux We will not provide details on installing R for Linux, because the process varies depending on your distribution, and because if you’re using Linux, chances are you’re more computer proficient than the average user. Suffice it to say, The first step is: Click “Download R for Linux” And you can probably figure things out from there. 3.2.1.4 Conclusion You should now have R installed! Technically speaking, nothing further is required to work with R. You can open the RGui, and start coding immediately. However, for this course we will be using RStudio, which is a very popular program with an incredibly rich set of features, which will enhance your R programming experience. 3.2.2 Installing RStudio Navigate to the RStudio Download Page, and find the download file that matches your operating system. Click the link to download the installer, which starts with “RStudio-” or “rstudio-”. Your computer might prompt for the location on your computer that you would like to save the file. Select a location (reasonable options are your Downloads folder or the Desktop) and select “save”. When the download completes, find the downloaded file and double click to run it. This will start the installation process. From this point, this will change depending on your operating system. 3.2.2.1 Windows Follow the on screen prompts. For the most part you can click “next” and “install” as appropriate, and you don’t have to worry about changing any installation settings. You should now be able to open the start menu, open the RStudio folder, and click on the RStudio icon to open RStudio This video shows the installation process for Windows. https://youtu.be/XnqENdiEb3I 3.2.2.2 macOS In the window which opens, drag the RStudio icon into the “Applications” folder. You may need to enter your password (click the “Authenticate” button) in order to do so. You should now be able to navigate to the Applications folder in Finder, and click on the RStudio icon to open RStudio. 3.2.2.3 Conclusion Rstudio also offers a cloud service that allows you to work with R in your browser. We’ll use the desktop version but you can check out the interactive primers on the cloud site. Any feedback for this section? Click here "],["successfull-installation.html", "3.3 Successfull Installation", " 3.3 Successfull Installation When you successfully install R and RStudio, you should now be able to program in R! Before moving further, you should become acquainted with the different parts of RStudio. To do so, watch the video below: This video gives an introduction to some of the main pieces of RStudio. https://youtu.be/w_3xp_3Sz6s Any feedback for this section? Click here "],["running-code-in-rstudio.html", "3.4 Running Code in RStudio", " 3.4 Running Code in RStudio Now that you’re somewhat familiar with RStudio, let’s run the same code as we ran on the website, but this time let’s run it in R. 3.4.1 The R Console: In the R console, type 1+1 and press enter. The output in the console should look like the following: Figure 3.1: code in the console Notice that the output 2 is displayed, and the cursor is on a blank line, waiting for more input. This is how coding in the console works. 3.4.2 R scripts Now let’s run the same code, but in an R script. If you haven’t already, create a new R script by clicking on the New File icon, then selecting R Script like so: Figure 3.2: Click this button to create a new file In the script window which opens, type 1+1 and press enter. Notice how now, the code did not run? In a script, you are free to write R code on several lines before you run it. You can even save the script and load it later in order to run the code it contains. There are multiple ways to run R code in a script. To run a single line of code, do one of the following: Place the cursor on the desired line, hold the <control> key, and press enter. On macOS, hold <command> key and press return instead Place the cursor on the desired line and click the Run button that looks like this: Figure 3.3: code in the console To run multiple lines of code, do one of the following: Highlight all the code you’d like to run, hold the <control> key, and press enter. On macOS, hold the <command> key and press return instead. Highlight all the code you’d like to run, and click the Run button. Run the 1+1 code using one of the methods above, and observe the output. Notice how the output is still in the console window, even though you ran the code in a script! Even though running R code from the console and an R script are done differently, they should produce the same results. Both are running R! Now that you’ve run some code in the console and from an R script, let’s try some of the other code we ran previously. 3.4.3 Same Examples, On Your Computer! In the console, type the command factorial(10). Did you get the same result as you got on the website? Now type the following two lines in an R script and run them: x <- -10:10 plot(x, x^2) This code produces a plot, which should show up in the lower right corner in the “Plots” window. Finally, copy the following code, paste it into your script, and run it: install.packages("ggplot2") library(ggplot2) theme_set(theme_bw()) ggplot(mtcars, aes(y = mpg, fill = as.factor(cyl))) + geom_boxplot() + labs(title = "Engine Fuel Efficiency vs. Number of Cylinders", y = "MPG", fill = "Cylinders") + theme(legend.position = "bottom", axis.ticks.x = element_blank(), axis.text.x = element_blank()) You’re now running R code on your computer! The above code block includes a command to install an R package! ggplot2 is a very popular plotting package that can create sophisticated and (arguably) aesthetically pleasing graphs. Imagine you are practicing programming in R and your classmate tells you they heard about an interesting new R command which they’d like you to try out. Would you run the command in an R script, or the R console? How might your answer change if you wanted to keep a record of all the interesting R commands you found? 3.4.4 R Markdown You’ve seen how to run R code in the R console, and from an R script, but there’s one more way to run R that we need to talk about: R Markdown. R scripts are convenient because they can store multiple R commands in one file. R Markdown takes this idea further and stores code alongside human readable text. There is much that could be said about R Markdown, but for now, we’ll just stick with the basics. To start, watch this video: This video gives a basic introduction to R Markdown. https://youtu.be/MhvipLohEfU As the video stated, there are three types of sections to an R Markdown document: Header Human readable text Code chunks There’s only one header, but there can be many blocks of human readable text and many code chunks. See here for more things you can do with R Markdown. As part of this class, you’ll be filling in an R Markdown document as you complete the progress checks in the book (except for the first progress check box, which you completed already) Download the progress check 2 template into your scripts folder, and follow the instructions. That document should include all progress checks from Section 3.4 through (and including) Section 4.3 The next box should be the first code chunk you will include in the document! Run the command 8 / (2 * (2 + 2)) and observe the output! This video should help get you started with the Progress Check Assignments! https://youtu.be/QLXB4kPngqM Any feedback for this section? Click here "],["workspace-setup.html", "3.5 Workspace setup", " 3.5 Workspace setup Whenever you are programming in R, and especially for this class, it’s important to stay organized. This section will give you some instructions and tips for how to organize material for this R course. 3.5.1 Recommended Settings First of all, let’s set some settings in RStudio. At the top of the R window, click Tools, then Global Options, and do the following: On the left side of the window that pops up, make sure it’s on the “General” tab Find the “Workspace” section on the right, make the following changes: uncheck “Restore .RData into workspace on startup” Change the “Save workspace to .RData on exit” option to never On the left side, select the “R Markdown” tab and make the following change: Change the “Evaluate chunks in directory” option to Project. You may need to install the rmarkdown package to populate this option. Run the line install.packages(\"rmarkdown\") and restart RStudio (you can ignore the prompt to install RTools on Windows). (Optional) On the left side, select the “Appearance” tab and make the changes: (Optional) Change the “Zoom:” setting to increase or decrease the interface text size to fit your screen best. (Optional) Change the “Editor theme:” setting to find a color scheme that looks good to you. Click “Apply”, then “OK” at the bottom of the window. Step 2 ensures that each time you open RStudio, there’s no “memory” of anything you may have been doing in R previously. This is a good option for R beginners to avoid confusion and mistakes. Step 3 ensures that when you knit R Markdown documents, code chunks will use the project directory as the working directory (more on working directories below). Changing the zoom can also be done using the shortcuts <control> <shift> + (to increase size) and <control> - (to decrease size). On macOS, the commands are <command> <shift> + and <command> -. 3.5.2 Setting working directory Every time R runs, it has a working directory, which is the folder where R “looks” when loading and saving files. In RStudio, the Files window contains the “More” menu, which has options to set as working directory or go to working directory. This will become more relevant when you start loading data and saving results later in the course. For this course, you’ll be using an RStudio project, which automatically sets the working directory. See here for more information about working directories. 3.5.3 Create RStudio Project and directories for class RStudio also has a feature called projects, which is a way of compartmentalizing your R code. This makes it easy to switch between different projects. For this class, you should set up a new project, so all of your project related files are in one place. 3.5.3.1 Create RStudio Project To create an RStudio project, follow these steps: Click on the “Project” button at the top right of the RStudio window and select “New Project”. Figure 3.4: Click this button to create a new project In the window that pops up, click on “New Directory” then “New Project”. In the box after “Directory name”, type “RModule1”, which will be the name of the project. Then click the “Browse” button to select where to place the project. You are free to choose any location on your computer that makes sense to you. It might be most convenient to place it on your desktop for now. Click on “Create Project”. You should now be in your newly created project. If you look at the Files window in the lower right pane of RStudio, you should see the files in your new project directory, which should only be one file, called “RModule1.rproj”. This file is the project file, which tells RStudio that this directory contains an R Project. When you’re working on this course, you should be working in this project. The easiest way to open up the project is to use your operating system’s file explorer and click on the project file. This will automatically set the working directory to the project directory. 3.5.3.2 Create Directory Structure To stay organized, you should also create the following folders inside your project directory scripts data_raw data_clean output You can create these either using your operating system, or the “New Folder” command in the file window within RStudio. 3.5.3.3 Video Check out this video to watch me set up a project and the new directories. https://youtu.be/0saBBd6lQDI 3.5.3.4 Set 3.5.4 Some useful commands you should know As you program in R, you’ll end up creating many different R objects (more on this later), and sometimes you might want to clear all objects in your R environment. This will reduce the amount of memory that is taken up rm(list = ls()) # Clear everything in your workspace gc() # Perform garbage collection used (Mb) gc trigger (Mb) limit (Mb) max used (Mb) Ncells 879268 47.0 1675977 89.6 NA 1322192 70.7 Vcells 1630663 12.5 8388608 64.0 102400 2584202 19.8 You might also want to clear the R console, which you can do by placing your cursor in the R console and typing <control> l (careful! that’s a lowercase L). Here’s a more complete list of RStudio shortcuts. Before moving on to the next section, take a note of all you’ve done so far. Did your R installation go smoothly? If not, could you troubleshoot the errors or find help online? Does using R remind you of other programs you have experience with? What could be some reasons that using R code written by someone else might not work on your computer? Any feedback for this section? Click here "],["r-programming-fundamentals.html", "Chapter 4 R Programming Fundamentals", " Chapter 4 R Programming Fundamentals “Computers are good at following instructions, but not at reading your mind.” - Donald Knuth In this chapter, we’ll start to learn the “nuts and bolts” of R. Think of these things as the fundamental pieces that you need to understand in order to make R do more interesting and sophisticated things later. "],["programming-preliminaries.html", "4.1 Programming Preliminaries", " 4.1 Programming Preliminaries Look at a sentence in a language you don’t know, look carefully at the symbols, spacing and characters. Recall learning a foreign language, how you had to learn the syntax and grammar rules. Now think about English (or another language you know well) and think about the syntax and grammar rules that you take for granted. All human languages rely on a set of rules called grammar, which describe how the language should be used to communicate. When two humans communicate with a language, they both must agree on the rules of that language. R also has rules that must be followed in order for a human ( you ) to communicate with a computer, i.e. in order to tell the computer what to do. In human language, grammar is often fluid and evolving, and two people may have to adapt their use of the language in order to communicate. With R, the rules are fixed, and the computer “knows” them perfectly. It is up to you to learn the rules in order to make the computer do exactly what you want it to do. Since any computer programming language will do exactly what you tell it to do, it’s important to cover some of the basic rules of the R programming language before you can learn what it can do. So let’s get started: 4.1.1 R Commands Like most programming languages, R consists of a set of commands which form the sequence of instructions which the computer completes. You can think of commands as the verbs of R, they are the actions the computer will take. Here is an example of a command, followed by the result. print("hello, world!") [1] "hello, world!" This command is telling R to print out a message. R code usually contains more than one command, and typically each command is put on a separate line. Here are multiple commands, each on a separate line: print("The air is fine!") print(1 + 1) print(4 > 5) [1] "The air is fine!" [1] 2 [1] FALSE The first command prints another message, the second command does some math then prints the result, and the third command evaluates whether the statement is true or false and prints the result. Generally, it’s a good idea to put separate commands on separate lines, but you can put multiple commands on the same line, as long as you separate them by a semicolon. See this code for example: x <- 1+1; print(x); print(x^2) [1] 2 [1] 4 In this example, three commands are given on one line. The first command creates a new variable called x, the second command prints the value of x, and the third command prints the value of x squared. We see that the semicolon, ;, serves as the command termination, because it tells R where one command ends and another begins. When a line contains a single command, no semicolon is necessary at the end, but including a semicolon doesn’t have any effect either. print("This line doesn't have a semicolon") print("This line does have a semicolon"); [1] "This line doesn't have a semicolon" [1] "This line does have a semicolon" Including multiple semicolons (e.g. print(“hello”);;) does not work! You’ve just seen your first example of assignment. That is, we created a thing called x , and assigned to it the value of 1 + 1 using the assignment operator, <-. Formally x is called an object, but we’ll talk more about objects and assignment later. So far, we’ve seen that you can place one command on one line, multiple commands on multiple lines, multiple commands on one line, so you may ask: can you can place one command on multiple lines? The answer is sometimes, depending on the command, but we will not discuss this now. At this point, we’ve introduced several new types of R commands (assigning a variable, squaring a number, etc.), and we will talk more specifically about these later. The important part of this section is how R code is arranged into different commands. Lastly, commands can be “grouped together” using left and right curly braces: { and }. Here’s an example: { print("here's some code that's all grouped together") print(2^3 - 7) w <- "hello" print(w) } [1] "here's some code that's all grouped together" [1] 1 [1] "hello" The above grouped code is indented so that it looks nice, but it doesn’t have to be: { print("here's some code that's all grouped together") print(2^3 - 7) w <- "hello" print(w) } [1] "here's some code that's all grouped together" [1] 1 [1] "hello" Indenting is an example of coding style, which are formatting decisions which don’t affect the results of the code, but are meant to enhance readability. We’ll talk more about coding style later. In some programming languages, Python for example, white space matters. That is, code indents and other spaces change the way the code runs. In R, white space does not matter, so things like indents are used purely for readability. What does it mean to “group” code? At this point there is no practical difference, each command gets executed whether or not it is grouped inside curly braces. However, code grouping will become very important later on, when we discuss control flow later. There are several helpful shortcuts that you can use in R. If you forget to put quotes around something, you can highlight and press the quote key and it will add quotes to both sides. This works with parentheses too. You can also use tab completion with functions and defined variables. Tab completion allows you to use longer, more descriptive variable names without the additional typing time. This can save you a lot of time and reduce mistakes! In RStudio, open a new R script and type in all the R commands from this section, to verify that you get the same result. It’s good practice! 4.1.2 Comments When writing R code, you may wish to include notes which explain the code to your future self or to other humans. This can be done with comments, which are ignored by R when it is running the code. The “#” symbol initiates a comment. Here’s an example of some comments: # Let's define y and z y <- 8 z <- y + 5 # Adding 5 to y and assigning the result to z ## This is still a comment, even though we're using two #'s Notice that it’s possible for a line to contain only a comment, or for part of a line to be a comment. R decides which part of a line is a comment by looking for the first “#”, and everything after that will be treated as a comment and ignored. R ignores comments, but you should not! If you’re reading code that someone else has written, it’s likely that also paying attention to their comments will greatly help you to understand what their code is doing. It’s also courteous to make good comments in your own code, if only because you may have to return to your own code in the future and re-learn what it is doing! In this book, we will use comments to help explain the R code that you will see. 4.1.3 Blank Lines Blank lines in R are ignored, but they can be used to organize code and enhance readability: print("The sky is blue") # The blank line below here is ignored print("The grass is green") [1] "The sky is blue" [1] "The grass is green" 4.1.4 CaSe SeNsItIvItY In R, variables, functions, and other objects (all of which we’ll talk about later), have names. These names are case sensitive, so you must be careful when referencing an object by name. Here we create two variables and give them different values, notice how they are different from each other: A <- 4 a <- 5 print(a) print(A) [1] 5 [1] 4 This may seem obvious, but case sensitivity applies to functions (which we’ll talk about later) too. We’ve been using the print function a lot in the above examples, which begins with a lower case p.  There is no Print function: Print("testing") Error in Print(\"testing\"): could not find function \"Print\" 4.1.5 ? One very nice thing in R is the documentation that accompanies it. Every function included in R (like print) has documentation that explains how that function works. To access the documentation, use a ? followed by the name of the function, like so: ?print The output of the above code chunk is not shown, because the result of this code is best viewed in RStudio. Go to R Studio and type in ?print and observe what happens! 4.1.6 ?? If you don’t remember the exact name of a function, or would like to search for general matches to a topic, then you can use ??. For example, trying ?Print produces an error, because there is not Print function (remember, R is case sensitive), so there’s no documentation to go with it. However, the following should still work: ??Print Programmers have a sense of humor, too! Try running ????print to see a small joke. Remember, comedic taste varies! This is a lot to remember. As you get more familiar with R, you’ll begin to memorize basic functions - and Google is always there for the rest. Want to know more about R syntax? Try typing ?Syntax in the R console (then press Enter). As we’ve seen, symbols and characters have specific meaning in R. You must be careful not to ignore things like semicolons, curly braces, parentheses, when reading R code. This takes practice! Okay, now that we’ve covered some of the basics, it’s time to start learning how to do useful things in R! The next few sections will describe the different types of data that R can handle. This video discusses programming preliminaries. https://youtu.be/EShV_T2P7sw Any feedback for this section? Click here "],["data-types.html", "4.2 Data Types", " 4.2 Data Types Think of all the things you might be expected to remember. These different items can probably be categorized into different types of information, like phone numbers, passwords, birthdays, historical events, and math theorems for example. R was designed to handle different types of data as well, though the types are different from the examples just given. R can store and manipulate different pieces of information, called data, and these data can be of several different types. Here are some examples of different types of data: a <- 12.34 # a is a number b <- "Hello" # b is a string of characters c <- TRUE # c is a special type of data that is either true or false R has special names for these examples, and there are other types of data as well. Below, we’ll talk about each data type, one at a time. The term “data” is actually plural! A single piece of data is called a “datum”. So to refer to a set of data, you would say “these data”, and to refer to a single piece of data, you would say “this datum”. 4.2.1 Numeric Many data exist as numbers, and R has a specific data type for storing those numbers, called the numeric data type. Here are some examples: a <- -11 b <- 13.37 c <- 1 / 137 Note that integers, decimals, and fractions are all examples of numeric data in R. We can prove that these are all the same data type using the class function: class(a) [1] "numeric" class(b) [1] "numeric" class(c) [1] "numeric" So far, we’ve defined the a object a few different times, which is allowed! Every time we define a, R forgets the old value. Therefore we should reuse object names with caution, because it can become difficult to remember what the latest value is! When we discuss loops later, however, we will use code to automatically change the value of an object several times in order to do useful things! When you have numeric objects, you may want to perform math operations on them. R has a number of built in functions to deal with numeric data, here are some examples: print(a + b) # Add two numeric values print(b - c) # Subtract two numeric values print(a * b) # Multiply two numeric values print(a^3) # Take the cube of a numeric value [1] 2.37 [1] 13.3627 [1] -147.07 [1] -1331 When performing math on numeric objects, R will obey order of operations, so the following two examples will give different results: a + b * c # R will perform the multiplication before the addition [1] -10.90241 (a + b) * c # R will perform the addition first, then the multiplication [1] 0.01729927 Notice that we’ve added extra spaces in the code to help you understand what’s going on. This is another example of code style, which we’ll talk more about later. Wait a second, we didn’t use the the print function just now, but R still displayed the results of the calculations! What is going on? This behavior is peculiar to something called R Markdown, which is what we used to create this book (yes, this book was creating using R! Pretty cool, huh?). If the last command given in a code block produces a result, and you don’t assign that result to anything (using <-), then R will print out that result. This means we don’t always have to use the print function when we want to display R output. Notice all the decimal points? R can be very precise when performing computations. However, viewing all of the digits stored by R can be distracting and hard to read. You can show just some of the digits by using the round function: a <- 0.123456 round(a, 3) [1] 0.123 It also turns out that R stores more digits than what it shows when it prints, though we won’t go into detail on that now. This video discusses numerics. https://youtu.be/juscNzIrmJQ 4.2.2 Integer In general, numeric data in R are treated as if they can be any decimal number (technically, they are a double precision number, if you know what that means; if not, it’s not important right now). However, there is a way to specify that a specific numeric object is an integer, by placing an “L” at the end of it, like so: x <- 20 # x will be a numeric object y <- 20L # y will be an integer object class(x) [1] "numeric" class(y) [1] "integer" Integers take half of the space in a computer’s memory or hard drive, so if you are working with or storing a lot of numbers which are integers, it might make sense to declare them as integer type in R. This will make more sense when we discuss vectors later. This video discusses integers. https://youtu.be/rNkEAPsipCk 4.2.3 Character Not all data are numbers! R also has the capability to store strings of characters, and this is the aptly named character type (or sometimes called a character string or just string). Here are some examples: d <- "Hello" # This string is defined with *double* quotes e <- 'how are you?' # This string is defined with *single* quotes! print(d) print(e) [1] "Hello" [1] "how are you?" Notice how we can define character strings using single quotes or double quotes, as long as we are consistent. So this is not valid: # Note the mismatched single/double quotes: f <- "this does not work' Error: :2:6: unexpected INCOMPLETE_STRING 1: # Note the mismatched single/double quotes: 2: f So, make sure you are consistent. However, you may see another problem with this: some strings contain quotes in them, like this: g <- 'This won't work' Error: :1:16: unexpected symbol 1: g Since single quotes are being used to define the string, they can’t be used in the string itself, because R will “think” the string is ending at the second '. One option is to change the defining quotes to be double quotes, then the single quote will be safely included in the string: g <- "I'm happy that this works!" print(g) [1] "I'm happy that this works!" Another option is to use a backslash when using quotes inside the string, so that R “knows” the quote is part of the string and not ending the definition of the string: g <- 'I\\'ve found another way that works!' print(g) [1] "I've found another way that works!" Notice that when we define g we place a \\' anywhere in the string where we want a ' to be, but when printed out, we see that R has interpreted it as just a '. Notice also that we didn’t have to change the defining quotes to be double quotes in this case. The backslash is called the escape character, and it signifies that what follows it should be interpreted literally by R, and any special meaning should be ignored. Since backslash also has special meaning itself, if you want a backslash in your string, you need to use another backslash, which functions as an escape character, like so: g <- “here is a backslash: \\\\”. You will see both backslashes when using the print function (which is meant for any data type), but if you use the special cat function (which is meant for character types specifically), all escape characters will be “processed”, and you will see just a single backslash. Try the same thing with the newline character, \\n! To see a list of special characters, try typing ?Quotes into the R console Here is an important string to know about: h <- "" # This string is empty! h is a character string with no characters, called an empty string. You can perform math on numeric data, so what can you do with strings? The answer is, quite alot, using some functions that R provides. Here are some of them: nchar(g) # This prints out the number of characters in a string [1] 34 substr(g, 6, 10) # This extracts just part of a string, using the start and stop positions you provide [1] "found" strsplit(g, " ") # This splits the string up using a specified "delimiter" string, a single space in this case [[1]] [1] "I've" "found" "another" "way" "that" "works!" When you split a string, this produces a list containing a vector of character strings. This is an example of how data can be organized in a structured way. We’ll talk more about so called data structures in the next section. paste("hello", "world") # This combines multiple strings together into one string! [1] "hello world" Remember that you can learn more about a function using ?. Type ?paste into R and read the documentation carefully. Can you determine what the “sep” argument does? What do you think would happen if we ran the code print(“hello”, “world”, sep=“-”)? There are other ways of manipulating strings, but we’ll return to this later. This video discusses characters. https://youtu.be/1JgmnulM_4g 4.2.4 Logical Numeric objects can be any number, character objects can be any string of characters, but logical objects can only be two different values: True or False. Logical data types are also known as “boolean” data types. Here we define some Logical objects: a <- TRUE b <- FALSE c <- T d <- F print(a) [1] TRUE print(b) [1] FALSE print(c) [1] TRUE print(d) [1] FALSE So you can see that we can define a logical object using the full name or just the first letter. Here’s how to get the “opposite” of a logical object !a [1] FALSE Logical data are the simplest type, but there are actually some clever things you can do with them. You can test whether simple mathematical expressions are true or false. # Create x and y x <- 3 y <- 4 # Check: is x less than y? (should give TRUE) x < y [1] TRUE The third command is a way to check if the value of x is less than the value of y. The result of this comparison is a logical, in this case, TRUE. Here are other ways of making comparisons: x <= y # Check if x is less or equal to y [1] TRUE x == y # Check if x is equal to y (note how you need two equals signs) [1] FALSE x >= y # Check if x is greater or equal to y [1] FALSE x >= y # Check if x is greater than y [1] FALSE Comparisons can be made using strings as well: x <- "Hello" y <- "hello" x == y [1] FALSE Remember that R is case sensitive, and two strings must be exactly the same to be considered equal. Of course any object (like x) will be equal to itself: x == x [1] TRUE Surprisingly, logicals can be treated as numerics, where TRUE is treated as 1 and FALSE is treated as 0. Here are some examples: TRUE + TRUE # TRUE is treated as 1 [1] 2 FALSE * 7 # FALSE is treated as 0 [1] 0 (2 < 3) + (1 == 2) # What's going on here? [1] 1 The last example deserves some thought. Start with each expression in parentheses, and decide whether it will evaluate to true or false. Then remember how logicals are treated as numbers, and determine what happens when you add them together. Numeric, integer, character, and logical data types are probably the most important data types to know in R, but there are others that were not covered here. These include: complex factor raw At least one of these (factor) will be covered later, but you can find more information about the other types here In the R console, type the following R commands and observe the result x <- \"5\" y <- 5 z <- (x == y) What data type is x? (check with R using the class function) What data type is y? What data type is z? What is the value of z, and why does this make sense? Now that we’ve discussed different types of data, we’ll now see how they can be structured together in meaningful ways. What about dates? R actually has three built-in date classes. This can be confusing at first, but packages like lubridate make it easy to work with dates in R. This video discusses logicals. https://youtu.be/GH9AZcexokU Any feedback for this section? Click here "],["data-structures.html", "4.3 Data Structures", " 4.3 Data Structures Imagine a grocery list, shopping list, or to-do list. That list consists of a set of items in a specified order, and the list also has a length. Why do you think it’s useful to organize these items into a list, rather than in some other fashion? Can you think of why it might be useful to store data in a list? Often, you will need to work with many related data, for example: - A sequence of measurements through time - A grid of values - A set of phone numbers In these circumstances, it would make sense to organize the data into a data structure. R provides multiple data structures, each of which are appropriate in various situations. By far the most popular data structure in R is the data frame, but in order to talk about data frames, we must talk about some simpler data structures first. 4.3.1 Vectors A vector is just an ordered set of elements (in other words, data), all of which have the same data type. Vectors can be created for the logical, numeric (double or integer), or character data types. Here’s an example of a vector: x <- c(1, 2, 3) # this is a vector of numeric types print(x) [1] 1 2 3 Note that to create a vector, we use the c function, where c stands for combine. This makes sense, because we are combining three numeric objects into a numeric vector. We may determine the length of any atomic vector like so: length(x) [1] 3 The class function will tell us what type of data is stored in a vector (which makes sense, because all elements of the vector have the same data type). class(x) [1] "numeric" Here’s how to create logical or numeric vectors: y <- c(TRUE, TRUE, FALSE, TRUE) z <- c("to", "be", "or", "not", "to", "be") class(y) [1] "logical" length(y) [1] 4 class(z) [1] "character" length(z) [1] 6 The above statement states that all elements of a vector must have the same data type, so what do you think will happen if you try to create a vector using elements from different data types? Here are some possibilities, can you think of another one? R will produce an error R will combine the elements somehow, but the result won’t be a vector Something else? Whatever happens, humans were behind the decision of how R should behave in this situation. If you were in charge of making this decision, what would make the most sense? Let’s try to create a vector of mixed type and see what happens. Run the following commands in R and think about the output: m <- c(TRUE, “Hello”, 5) class(m) print(m) What changes did R make when creating the vector? What’s happening in the above code is an example of type conversion, which we will talk more about later. For now, remember that every element in an R vector is the same type. You can create empty vectors as placeholders, by indicating the data type and how many elements there are: empty <- numeric(10) # this creates a numeric vector of length 10 This is the first instance of us using a name which is longer than a single character! This new vector is called empty. Let’s print the contents of the vector: print(empty) [1] 0 0 0 0 0 0 0 0 0 0 Even though we didn’t tell R what data to put in the vector, it put a 0 in each element. This is the default value for a new vector. Here’s how you can create new vectors of other types: empty_int <- integer(45) # create integer vector with 45 elements empty_cha <- character(2) # create character vector with 2 elements empty_log <- logical(1000) # create logical vector with 1000 elements!! We saw that the default value for a numeric vector is 0. Use the code above to create empty integer, character, and logical vectors, then print them out to see what default values R has given to each element. Do these make sense? What happens if we create a vector of length 1? It turns out this is the same as just creating a single instance of that data type. Observe how the following are the same. a <- numeric(1) # create vector of length 1 (default value is 0, right?) b <- 0 # create single numeric with value 0 a == b # compare a and b to see if they are the same. [1] TRUE It turns out, you can create a vector of length 0, which contains 0 elements. This may sound odd, but can happen sometimes! However, you cannot create a vector of negative length (e.g. logical(-1) won’t work), or a fractional length (e.g. character(12.7) won’t work). 4.3.1.1 Accessing and Changing Elements After you’ve created a vector, how do you put your data in them? Here’s how you can change the value of a specific element: a <- c(1, 2, 3) # create numeric vector of length 3 a[2] <- 4 # change the value of the second element of a to 4 a # print the result [1] 1 4 3 See how the second element of a has changed? So you can access a specific element using square brackets: [ and ]. In fact, if you want to know the value of the third element (without changing anything), just use: a[3] # access the third element [1] 3 What do you think will be the result of the following code (hint: the result will either be TRUE or FALSE)? vec <- c(4, 5, 6) # Create a vector vec[3] == 6 # Remember what == does? Once you make a guess, try it in R and see if you were correct. This video gives an introduction to vectors. https://youtu.be/-BlN6_ZMpKE 4.3.1.2 Working with vectors You can do many things with vectors that you can with single instances of each data type. Recall, you can add a number to a numeric object: a <- 3 # create a numeric object a + 4 # add a number to the object. [1] 7 The same thing is possible with numeric vectors: a <- c(1, 2, 3) # create a numeric vector a + 4 # add a number to EACH ELEMENT of the vector! [1] 5 6 7 This type of behavior is called elementwise behavior. That is, the operation is performed on each element separately. Here are some other elementwise operations: a - 3 [1] -2 -1 0 a * 1.5 [1] 1.5 3.0 4.5 a ^ 2 [1] 1 4 9 a == 2 [1] FALSE TRUE FALSE R has some functions which summarize the values in a vector. One such function is the sum function, which adds the values of each element in the vector: print(a) # Print the elements of a as a reminder sum(a) # Add all the elements of a together. [1] 1 2 3 [1] 6 Other examples of summary functions include max, min, mean, and sd. We’ll talk about these and other summary functions later. Some operations work on two vectors, as long as they are the same length: b <- c(1, 0, 1) a + b [1] 2 2 4 b * a [1] 1 0 3 a ^ b [1] 1 1 3 You can even compare two vectors, and the result will be a logical vector: z <- a > b # Compare a and b, element by element, assign the result to z z # Print the value of z [1] FALSE TRUE TRUE The first logical value is the result of a[1] < b[1], the second logical value is the result of a[2] < b[2], etc. what operations can we perform on character vectors? Here are some examples: z == TRUE # Which elements are TRUE? [1] FALSE TRUE TRUE This just produces z again (Do you see why?). Here’s how to get the logical “opposite” of z: z == FALSE [1] TRUE FALSE FALSE Or, as we saw before, we can use !, which operates on each element of z: !z [1] TRUE FALSE FALSE Remember how logical objects can be treated as numeric objects (either a 0 or 1)? If we use this with the sum function to determine how many elements are TRUE: sum(z) [1] 2 Here’s another example of using the sum function on a logical vector: sum(a == b) # How many elements do a and b have in common? [1] 1 So there is one element that both a and b share. Logical vectors can also be used to access all elements of a vector for which a certain condition is true. We’ll see how to do this later on. Let’s create some character vectors and explore a few things we can do with them: a <- c("I", "have", "to", "have", "a", "donkey") b <- c("You", "want", "to", "sell", "a", "donkey") First, we can do elementwise comparison (assuming equal length), just as we did for numeric vectors: a == b [1] FALSE FALSE TRUE FALSE TRUE TRUE To search for specific character strings in a character vector, you can use the grep function: grep("have", a) # Search the vector a for the phrase "have" [1] 2 4 This result shows that the phrase “have” occurs in elements 2 and 4 of a! What if we search for a phrase that doesn’t occur? grep("raddish", a) integer(0) The result is an integer vector of length 0, meaning there are no elements that match the phrase! This video continues the discussion of vectors. https://youtu.be/NgmVhLpuM5k 4.3.1.3 Vectors of different types What if we try to perform operations between vectors of different types? This will work in some cases, but not others. Here are a few examples: a <- c(1, 2, 3) b <- c("I", "am", "sam") c <- c(TRUE, TRUE, FALSE) a + b # Can you add a numeric vector to a character vector? Error in a + b: non-numeric argument to binary operator a + c # Can you add a numeric vector to a logical vector? [1] 2 3 3 We see that you can’t add a numeric vector to a character vector, but you can add a numeric vector to a logical vector. Why is this? Predict whether the following are possible: Can you can multiply a character vector with a numeric vector? Can you can multiply a logical vector with a numeric vector? Check whether you are correct by creating some vectors in R and attempting to multiply them together. Can you make sense of the answer? If you run into errors, you can include error=TRUE in your code chunk options like this: ```{r, error=TRUE} This will allow RStudio to still knit the document, even thought the code block generated errors. 4.3.1.4 Special Numeric Vectors There are a few special ways of creating a numeric vector which can be very useful, so we’ll mention them here. The first way creates a sequence of all integers between a starting and ending point: d <- 1:5 # Create sequence starting at 1 and ending at 5 d [1] 1 2 3 4 5 Here’s a longer example: d <- 1:100 # Create sequence starting at 1 and ending at 100 d [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [19] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 [37] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 [55] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 [73] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 [91] 91 92 93 94 95 96 97 98 99 100 In this example, the R output can’t be shown on a single line, so it must be placed on multiple lines. Notice that each line has a different number in brackets: [1], [19], [37] etc. This number indicates which element of the vector is the start of that line. So we finally have an explanation for the [1] which is displayed with all R output. It’s simply indicating that this is the first element of the output. This also reflects the fact stated earlier that any R object can be considered a vector of length 1! When you’re working with large data sets, it’s often helpful to see just the first few results instead of printing the entire thing. You can use head() to print the first six rows. Another way to create a numeric vector is using the seq function, which allows you to specify the interval between each vector element. For example: e <- seq(2, 100, 2) e [1] 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 [20] 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 [39] 78 80 82 84 86 88 90 92 94 96 98 100 Or you can also specify how long you want the vector to be, and seq will determine the appropriate interval to make the elements evenly spaced. seq(1, 10, length.out=3) [1] 1.0 5.5 10.0 seq(1, 10, length.out=5) [1] 1.00 3.25 5.50 7.75 10.00 4.3.1.5 Another Data Type: Factor In the previous section, we avoided talking about the factor data type, because we need the concept of vectors to appreciate their purpose, but now we are equipped to talk about them. Consider the following example of a character vector: cha_vec <- c("cheese", "crackers", "cheese", "crackers", "cheese", "crackers", "cheese") There are seven elements in this vector (length(cha_vec) is 7), but there are only two unique elements, “cheese” and “crackers”. Imagine having two write down this vector on a piece of paper, and the space it would take. Now imagine writing down instead: 1, 2, 1, 2, 1, 2, 1 1 = “cheese” 2 = “crackers” This second method writes down numbers instead of character strings, but also keeps a record of which numbers correspond to which character strings. The total amount of space taken up on the piece of paper is smaller for the second method, and the amount of space saved would be even larger if the character vector were longer and had more repeated elements. This is the essence of what a factor data type is: A character vector stored more efficiently on the computer. For a factor vector, R stores an integer vector (which often takes less space than a character vector), and also maintains a “lookup table” which keeps track of which integers correspond with which character strings. To illustrate, let’s create a factor variable: # Create a new factor variable from our existing character vector: fac_vec <- factor(cha_vec) Notice how we started with a character vector and used the factor function to create a factor from it. If we print the new vector, fac_vec [1] cheese crackers cheese crackers cheese crackers cheese Levels: cheese crackers it displays the elements as we would expect, but also includes another line of output giving Levels. This shows that there are only two unique character strings, which are called factor levels. Since R is using integers “behind the scenes” to store the vector, we can see those integers by using the as.integer function: as.integer(fac_vec) [1] 1 2 1 2 1 2 1 This is another example of type conversion, which we will discuss soon. In some situations, numbers may get treated as characters, like so: x <- c(“4”, “5”, “6”) This may pose an issue if this character vector gets converted to a factor, because the “behind the scenes” integers may not agree with the Levels, which represent the original data. This can easily happen when reading in data from a file on your computer, if you’re not careful. We’ll talk more about this later. There are a few neat things you can do with factor vectors. By changing the levels, you can quickly change all occurrences of a string at once. For example: print(fac_vec) levels(fac_vec) <- c("peas", "carrots") # Change the levels of fac_vec fac_vec [1] cheese crackers cheese crackers cheese crackers cheese Levels: cheese crackers [1] peas carrots peas carrots peas carrots peas Levels: peas carrots There is more to be said about factors, but this is all we will explore at this point. In newer versions of R, all strings are treated like factors behind the scenes, meaning there’s really no difference between factor and character types in terms of how much space they take up in the computer’s memory. However, R still treats the two types differently, so it’s important to remember that they are different! This video discusses coercion, sequences, and factors. https://youtu.be/iusiO1dRQdY 4.3.1.6 Combining Vectors Given two vectors, it’s easy to combine them into one vector: a <- c(1, 2, 3) b <- c(4, 5, 6, 7) c(a, b) # Combine vectors a and b [1] 1 2 3 4 5 6 7 The combine function (c) is smart enough to recognize that a and b are vectors, and performs concatenation to create the resultant longer vector. You can also use the combine function to add a single element to the end of a vector: a <- c("CEO", "CFO") # Initialize a <- c(a, "CTO") # Redefine a by combining a with a new element a [1] "CEO" "CFO" "CTO" In R, there may sometimes be more than one way to do the same thing, and one of the ways might be much faster or take much less computer memory to do. In other words, two sets of R commands can be correct, but one may perform better than the other. Writing “performant” (high performance) code is an advanced topic that we will not discuss much in this introductory course. You’ve just seen one way to add an element to the end of a vector, but if you do this a lot (perhaps in a for loop, which we’ll talk about later), it can be very slow. In this situation you’re better off creating the whole vector at once and updating each element as needed. What if you try to combine vectors of different types? a <- c(1, 2, 3) b <- c("four", "five") c(a, b) [1] "1" "2" "3" "four" "five" Again, we see that the c function has converted all elements to be character strings, and the resultant vector is a character vector. Since we’ve seen type conversion arise a few times now, it’s appropriate to talk more explicitly about how it works. We’ll do that in the next section. 4.3.1.7 Type Conversion There may be times when you’d like to convert from one type of data into another. An example would be the character string \"1\", which R does not view as a number. Therefore, the following does not work: "1" + "2" # R can't add two character strings Error in \"1\" + \"2\": non-numeric argument to binary operator To remedy issues like this, R provides functions in order to convert from one data type into another: - as.character: converts to character - as.numeric: converts to numeric - as.logical: converts to logical - as.factor: converts to factor Using these functions, R will “do its best” to convert whatever you start with into the desired data type, but it’s not always possible to make the conversion. Below are a few examples which do and don’t work well. Converting from a numeric to a character vector is always possible: x <- c(3, 2, 1) y <- as.character(x) # Here's how to convert to a character vector print(x) print(y) [1] 3 2 1 [1] "3" "2" "1" However, converting from a character vector to a numeric only works if the characters represent numbers. Any element that won’t convert will be given w <- c("1", "12.3", "-5", "22") # This character vector can be converted to numeric as.numeric(w) [1] 1.0 12.3 -5.0 22.0 v <- c("frank", "went", "to", "mars") # This character vector can't be converted to numeric as.numeric(v) Warning: NAs introduced by coercion [1] NA NA NA NA None of the elements can be converted into a number, so R prints a warning message, and the result is an NA in each element, which stands for “not available”. NA indicates that a value is missing, and can arise in many different ways, which we will not explain here. NA values have interesting behavior in R. Generally, anything that “touches” an NA becomes an NA. You can try out these commands for yourself to see what happens: NA * 0 NA - NA c(NA, 1, 2) If only part of a vector can be converted, then the result will contain some converted values and some NA’s: u <- c("1.2", "chicken", "33") as.numeric(u) Warning: NAs introduced by coercion [1] 1.2 NA 33.0 What other conversions are possible? Character vectors can also be converted into logical: s <- c("TRUE", "FALSE", "T", "F", "cat") # All but the last element can be converted to logical as.logical(s) [1] TRUE FALSE TRUE FALSE NA Based on the examples we’ve seen before, it should make sense that numeric vectors containing 0 or 1 can also be converted into a logical vector: as.logical(c(1, 0, 1, 0)) # Here we create the vector and convert it in the same line [1] TRUE FALSE TRUE FALSE Logical vectors can also be converted into character or numeric vectors. Based on what you know, make a prediction about what the following commands will produce: as.numeric(c(T, F, F, T)) as.character(c(T, F, F, T)) Check your predictions by running the commands in R. Remember that “solo” objects are just vectors of length 1, so any of these type conversions should work on a single object as well, like so: as.numeric("99") [1] 99 Along with the conversion functions as...., there are companion functions which simply check whether a vector is of a certain type: is.character: checks if character is.numeric: checks if numeric is.logical: checks if logical is.factor: checks if factor Here are some examples: a <- c("1", "2", "3") is.character(a) [1] TRUE is.numeric(a) [1] FALSE a <- as.numeric(a) is.character(a) [1] FALSE is.numeric(a) [1] TRUE As we’ve seen, type conversion is sometimes performed automatically, specifically when using the combine function (c). To understand more about this, try typing ?c to bring up the documentation, and have a look at the “Details” section. This video finishes the discussion of vectors. https://youtu.be/XKdZzHBRO9o 4.3.2 Matrices Not all data can be arranged as an ordered set of elements, so R has other data structures besides vectors. Another data type is the matrix, which can be thought of as a grid of numbers. Here’s an example of creating a grid: data <- c(1, 2, 3, 4, 5, 6, 7, 8, 9) A <- matrix(data, 3, 3) A [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 Here we’ve made a matrix with three rows and columns, by first creating a vector called data, and using the matrix function and giving it the data, the number of rows, and the number of columns. Notice that R fills the matrix one column at a time, from left to right. Here’s how you access the data within a matrix: A[1,1] # Get the first element of the first row [1] 1 A[2,3] # Get the third element of the second row [1] 8 A[1,] # Get the entire first row [1] 1 4 7 A[,3] # Get the entire third column [1] 7 8 9 Just like with vectors, square brackets must be used to access the elements of a matrix. Don’t use parentheses like this: A(1,2). diag(A) # Get the diagonal elements of A [1] 1 5 9 You can get the shape of a matrix with the dim function: dim(A) # How many rows & columns does A have? [1] 3 3 Which gives an integer vector telling us A has three rows and three columns. In R, create the matrix A above, and write code to compute the first element of the second row times the third element of the third row. You can do some simple math with matrices, like this: A + 1 # Add a number to each element of the matrix [,1] [,2] [,3] [1,] 2 5 8 [2,] 3 6 9 [3,] 4 7 10 A * 2 # Multiply each element by a number [,1] [,2] [,3] [1,] 2 8 14 [2,] 4 10 16 [3,] 6 12 18 A ^ 2 # Square each element [,1] [,2] [,3] [1,] 1 16 49 [2,] 4 25 64 [3,] 9 36 81 If you’ve worked with matrices in a math class, you may have talked about some of the following operations: Here we can find the transpose of a matrix (the rows become columns and the columns become rows): t(A) # Find the transpose [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 [3,] 7 8 9 # Find the trace: sum(diag(A)) # Get the diagonal elements of A, then sum them [1] 15 Here are some things you can do with two matrices: B <- matrix(1, 3, 3) # Create a 3x3 matrix of all 1's (notice how we only need one 1?) A + B # Add two matrices together [,1] [,2] [,3] [1,] 2 5 8 [2,] 3 6 9 [3,] 4 7 10 A * B # Multiply the elements of A and B together [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 A %*% B # Perform matrix multiplication between A and B [,1] [,2] [,3] [1,] 12 12 12 [2,] 15 15 15 [3,] 18 18 18 Notice the difference between the last two examples? Just using * multiplies the matching elements of A and B together, while the new operator %*% performs matrix multiplication, like you may have seen in a linear algebra class. In R, perform matrix multiplication between A and the transpose of A. If two matrices don’t have the same shape, you won’t be able to add their elements together: C <- matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), 3, 4) A * C Error in A * C: non-conformable arrays The error message: non-conformable arrays tells us that A and C have different shapes, so it’s impossible to multiply their matching elements together. But you can still perform matrix multiplication between them: A %*% C [,1] [,2] [,3] [,4] [1,] 30 66 102 138 [2,] 36 81 126 171 [3,] 42 96 150 204 Any data type (numeric, character, etc.) can be represented as a vector, but matrices only work with numeric types. A matrix is just a special case of a data structure called an array. Matrices have two dimensions (row and column), and arrays can have any number of dimensions (1, 2, 3, 4, 5, etc.). We won’t discuss arrays in this course much. Try running the following code in R, which should produce a warning message: data <- c(4.5, 6.1, 3.3, 2.0); A <- matrix(data, 2, 3); Read the warning message and the code carefully, and see if you can figure out the problem. What change would you make to the above code so that it runs? Remember everything inside a vector must have the same data type. Here we’ve seen that matrices all have to be numeric data types. Wouldn’t it be nice if there were a way to store objects of different types (without doing type conversion)? This is what lists can do! It turns out, matrices can work with non-numeric types as well! But like vectors, mixed type matrices are not allowed. For this, you’ll have to use a dataframe, as we discuss later. This video gives an introduction to Matrices. https://youtu.be/hknL1EbrIB4 4.3.3 Lists A List is an ordered set of components. This may sound similar to a vector, but the important difference is that with lists there is no requirement that the components have the same data type. Here is an example of a list: A <- list(42, "chicken", TRUE) A [[1]] [1] 42 [[2]] [1] "chicken" [[3]] [1] TRUE Here we see each component of the list printed in order, with [[1]], [[2]], and [[3]] indicating the first, second, and third components. To access just one of the components, use double square brackets ([[ and ]]): # Get the second component of A A[[2]] [1] "chicken" Notice that each component of A is a different data type (numeric, character, logical), which is not a problem for lists. Nothing was converted automatically, as we saw happen with vectors. Here’s how to add a component to an existing list: A[[4]] <- matrix(c(1, 2, 3, 4, 5, 6), 2, 3) Notice how we accessed component 4, which didn’t exist yet, and assigned it a value. We actually added a matrix as the fourth component, this is not possible with vectors! Now A has four components: A [[1]] [1] 42 [[2]] [1] "chicken" [[3]] [1] TRUE [[4]] [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 Lists can even contain other lists! If you try to assign a list to be one of its own components (e.g. A[[5]] <- A), then R will make a copy of A and assign the copy to be one of the components of A. Thus there is no “self reference”, and no issue with Russel’s Paradox. So far we’ve seen vectors, lists, matrices, and arrays. How are they different and how are they similar? List components can also have names. Here we add an component with a name: A[["color"]] <- "yellow" A [[1]] [1] 42 [[2]] [1] "chicken" [[3]] [1] TRUE [[4]] [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 $color [1] "yellow" Notice how this new component displays differently? Instead of showing [[5]], the component is labeled with a dollar sign, then its name: $color. We first use the term name for individual variables, but here we see that components of lists can also have names. When we encounter data frames later, we’ll see how each row and column can also have its own name. You can access components using their name in two ways: A[["color"]] # Use double square brackets to access a named element [1] "yellow" A$color # Use dollar sign to access a named element [1] "yellow" But the color component is also the fifth component of the list, so we can access it like this as well: A[[5]] [1] "yellow" Here’s a new list created by giving names to each element: person <- list(name = "Millard Fillmore", occupation = "President", birth_year=1800) person $name [1] "Millard Fillmore" $occupation [1] "President" $birth_year [1] 1800 Below is some R code: S1$year <- S2[2,2] + S3[[“age”]] Assuming this code works, what are the data structures of S1, S2, and S3? purrr is a very useful R package for working with lists. 4.3.3.1 Lists and Vectors Lists and Vectors are different data types, but in some ways they behave the same: Find the length of a list: length(person) # Same for vectors and lists! [1] 3 Combine two lists: c(A, person) # Same for vectors and lists! [[1]] [1] 42 [[2]] [1] "chicken" [[3]] [1] TRUE [[4]] [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 $color [1] "yellow" $name [1] "Millard Fillmore" $occupation [1] "President" $birth_year [1] 1800 A == "chicken" # Compare against a character color FALSE TRUE FALSE FALSE FALSE However, there are some things that vectors can do that lists can’t: A + 1 # Add a number to each component (won't work) Error in A + 1: non-numeric argument to binary operator A == T # Compare against a logical (won't work) Error in eval(expr, envir, enclos): 'list' object cannot be coerced to type 'logical' A == 12 # Compare against a numeric (won't work) Error in eval(expr, envir, enclos): 'list' object cannot be coerced to type 'double' So there are trade-offs when deciding whether a list or a vector is most appropriate. This video discusses lists. https://youtu.be/-Y02JkqDlWU 4.3.3.2 Lists of Vectors Certain types of lists show up all the time in R, lists of vectors: vec_1 <- c("Alice", "Bob", "Charlie") vec_2 <- c(99.4, 87.6, 22.1) vec_3 <- c("F", "M", "M") special_list <- list(name = vec_1, grade = vec_2, sex = vec_3) special_list $name [1] "Alice" "Bob" "Charlie" $grade [1] 99.4 87.6 22.1 $sex [1] "F" "M" "M" Here, each list stores a different piece of information about several people. Here’s another example: rocks <- list(specimen=c("A", "B", "C"), type=c("igneous", "metamorphic", "sedimentary"), weight=c(21.2, 56.7, 3.8), age=c(120, 10000, 5000000) ) rocks $specimen [1] "A" "B" "C" $type [1] "igneous" "metamorphic" "sedimentary" $weight [1] 21.2 56.7 3.8 $age [1] 120 10000 5000000 When defining the rocks list, we’ve spread the command across multiple lines for clarity. The commas at the end of some of the lines separate the elements of the list. R will continue reading the next line until it finds the closing parenthesis, ). There are so many sets of data that fit into this pattern, that R has a special data type called a data frame, which we will discuss in the next section. Create a matrix, a character vector, and a logical object, then place them all in a new list called “my_list”, with the names “my_matrix”, “my_vector”, and “my_logical”. 4.3.4 Data Frames At their core, data frames are just lists of vectors, but they also have some extra features as well. Here, we’ll re-define the rocks list from the previous section, but this time we’ll create it as a data frame: rocks <- data.frame(type = c("igneous", "metamorphic", "sedimentary"), weight = c(21.2, 56.7, 3.8), age = c(120, 10000, 5000000)) rocks # We'll add the specimen names later Now when R displays rocks, it arranges the data in rows and columns, similar to how it displays matrices. Unlike matrices, however, the columns don’t all have to be the same data type! Remember that a data frame is basically a list of vectors, so even though it can contain different types of data (because it is a list), each column is a vector, which means each column must have all elements of the same type. The names of the columns are the names of the components of rocks, and the rows contain the data from each component vector. Remember that a data frame is basically a list of vectors, so we can access a component by its position or name: rocks[[1]] [1] "igneous" "metamorphic" "sedimentary" rocks$weight [1] 21.2 56.7 3.8 However, we can also access a data frame as if it were a matrix: rocks[1,3] # Get the datum from the first row, third column. [1] 120 rocks[1,] # Get the first row, this gives another data frame with a single row. rocks[,2] # Get the second column, this gives a vector. [1] 21.2 56.7 3.8 Here’s how to get the shape of a data frame (number of rows and columns): dim(rocks) [1] 3 3 If we start with a list of vectors, we can convert it to a data frame with as.data.frame: people <- list(name = c("Alice", "Bob", "Charlie"), grade = c(99.4, 87.6, 22.1), sex = c("F", "M", "M")) as.data.frame(people) R comes with pre loaded with several data frames, such as mtcars, which contains data from the 1974 Motor Trend Magazine for 32 different automobiles: mtcars A list of included data sets in R can be found by running data(). Look at the column of car names on the left side of the mtcars data frame. It doesn’t have a column name (like mpg, cyl, etc.), because it’s not actually a column. These are row names, and you can access them like this: row.names(mtcars) [1] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" [4] "Hornet 4 Drive" "Hornet Sportabout" "Valiant" [7] "Duster 360" "Merc 240D" "Merc 230" [10] "Merc 280" "Merc 280C" "Merc 450SE" [13] "Merc 450SL" "Merc 450SLC" "Cadillac Fleetwood" [16] "Lincoln Continental" "Chrysler Imperial" "Fiat 128" [19] "Honda Civic" "Toyota Corolla" "Toyota Corona" [22] "Dodge Challenger" "AMC Javelin" "Camaro Z28" [25] "Pontiac Firebird" "Fiat X1-9" "Porsche 914-2" [28] "Lotus Europa" "Ford Pantera L" "Ferrari Dino" [31] "Maserati Bora" "Volvo 142E" You can also access the column names like this: names(mtcars) [1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" [11] "carb" These are two examples of attributes, which are like extra information which are attached to an object. We’ll discuss attributes more later when we discuss R objects. The column names and row names are just vectors, and you can access / modify them as such: row.names(rocks) <- c("A", "B", "C") rocks names(rocks)[[1]] <- "rock type" rocks Row and column names are allowed to have spaces in them, but you must be careful how you access them. The following code will not work: rocks$rock type , because R will stop looking for the name you are referencing once it encounters a space. To access this column, you must enclose the reference in “backticks” ( ` ) like so: rocks$`rock type`. Look at the set of available data sets in R, and pick 2 data sets. For each data set, answer the following questions: What are the column names? What are the row names? What is the data type for each column? How many rows are in the data frame? How many columns are in the data frame? This is the last section you should include in Progress Check 2. Knit your output document and submit on Canvas. Any feedback for this section? Click here This video discusses lists of vectors. https://youtu.be/9BGRIC1js04 "],["r-objects.html", "4.4 R Objects", " 4.4 R Objects Wherever you are right now, look around your environment. Pick an object and study its attributes. It probably has a shape, a color, a weight, and many other ways of describing it. Now pick another object, and note how it is different than the first in terms of its attributes. What does the word “object” really mean? It’s often easier to give examples than to give a precise definition, but generally objects are “things you can do things with”. That is, you can usually look at them, touch them, smell them, and move them around (when appropriate/possible, of course!). Another useful definition is that objects are nouns. Different objects have different purposes and attributes. Many of these ideas will be true for R objects as well. We’ve already introduced the concepts of objects in R in passing, but here we briefly focus on what they are and how to work with them. Download the progress check 3 template into your scripts folder, and follow the instructions. That document should include all progress reports from Section 4.4 through (and including) Section 5.4 4.4.1 Everything is an object in R What exactly is an object in R? As in real life, it can be difficult to give a definition, but easier to give examples. Here are some examples of objects in R: A numeric variable A vector A matrix A list A data frame A function This list is not exhaustive, but most objects we deal with will look like one of these. In many programming languages, functions are handled differently from other types of objects (i.e. they are not “first class” objects). In R, they are treated the same as any other type of object. You can assign them to variables, pass them to other functions, and can be returned from a function. This is similar to the behavior of Java and Python, but different from C. 4.4.2 Assigning Objects Any object can be assigned to a variable, as we’ve been doing already. Here’s an example: a <- "pink pineapple" The <- is called an assignment operator. This is the most common way of assigning objects in R, but there are others. Sometimes you may see: a = "pink pineapple" which in most cases, has the exact same effect as using the <-, but in a few instances, it has a different effect. Our recommendation is to always use <- when making object assignments. There are other assignment operators as well, <<-, ->>, and ->, but we will not discuss these. You can find out more with the command ?assignOps. One neat thing you can do is assign multiple variables at the same time: a <- b <- "Hello" a [1] "Hello" b [1] "Hello" Even though a and b were assigned at the same time, they are still different! So if you change a with a <- “goodbye”, then the value of b will still be “Hello”. 4.4.3 Attributes Every object in R has attributes, extra information that’s “attached” to the object. Every object has a length attribute: a <- c(1, 2, 3, 4) b <- c("bonjour", "au revoir") length(a) [1] 4 length(b) [1] 2 Every object has a length. Try creating an example of the following and examining the length: A logical vector with 5 elements A 2 x 2 matrix The mtcars dataframe Every R object has a mode as well, which tells you what type of object you have. Here are some examples: mode(a) [1] "numeric" mode(b) [1] "character" Aside from these two attributes, you can list all attributes of an object like this: attributes(mtcars) $names [1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" [11] "carb" $row.names [1] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" [4] "Hornet 4 Drive" "Hornet Sportabout" "Valiant" [7] "Duster 360" "Merc 240D" "Merc 230" [10] "Merc 280" "Merc 280C" "Merc 450SE" [13] "Merc 450SL" "Merc 450SLC" "Cadillac Fleetwood" [16] "Lincoln Continental" "Chrysler Imperial" "Fiat 128" [19] "Honda Civic" "Toyota Corolla" "Toyota Corona" [22] "Dodge Challenger" "AMC Javelin" "Camaro Z28" [25] "Pontiac Firebird" "Fiat X1-9" "Porsche 914-2" [28] "Lotus Europa" "Ford Pantera L" "Ferrari Dino" [31] "Maserati Bora" "Volvo 142E" $class [1] "data.frame" To access a specific attribute of an object, you can do this: attr(mtcars, "class") # Get the class attribute for the mtcars data frame [1] "data.frame" 4.4.4 Null Objects There is a special object called the NULL object, which really just represents “nothing”. It’s used mainly if you want to remove an element from a list: a <- list(1, 2, 3) a[[2]] <- NULL # Replace component 2 with "nothing" a [[1]] [1] 1 [[2]] [1] 3 Or if a function is supposed to return but doesn’t have an object to return (more on this later when we discuss functions). 4.4.5 Removing Objects Sometimes you want to get rid of an object! In R, you can use the rm function like so: a <- "an object" rm(a) a Error in eval(expr, envir, enclos): object 'a' not found As you can see, the error message indicates that a has been removed. Sometimes, you’d like to remove all the objects in your environment. To do this, you can use the command: rm(list=ls()) This video discusses objects. https://youtu.be/VrgoEoMo9ZM Any feedback for this section? Click here "],["working-with-data.html", "Chapter 5 Working with Data", " Chapter 5 Working with Data “The goal is to turn data into information, and information into insight.” – Carly Fiorina, former CEO of Hewlett-Packard In the previous chapter, we’ve talked about the different types of data that R stores and the different structures that R stores data in. We’ve mostly just made up numbers, character strings, and logical values for illustration. In this chapter, we’ll use R to do interesting things with real data. This is by far the most popular use of the R programming language, and arguably the most fun! You’ll learn how to read data sets into R, do interesting things with them, and save your results. "],["quick-example.html", "5.1 Quick Example", " 5.1 Quick Example Before diving into detail, let’s do a quick example so you can begin to see what is possible with data in R. As we mentioned in the last chapter, R includes some pre-packaged data sets, which you can access with the data() command. One of the data sets is Seatbelts, which documents road casualties in Great Britain between 1969 and 1984. Firstly, we need to convert Seatbelts to a data frame, because it starts out as a “Time-Series”, which we haven’t discussed. Seatbelts <- data.frame(as.matrix(Seatbelts), date = time(Seatbelts)) # Convert Time Series to data frame We’ve also added a month and year column look at the dimensions of the data set with the dim command: dim(Seatbelts) # Get the number of dimensions in the Seatbelts data frame [1] 192 9 This shows that there are 192 rows (months), and 9 columns (variables measured each month). We could also determine the number of rows and columns separately using the nrow and ncol functions. To view the first few rows of the Seatbelts data frame, use the head command: head(Seatbelts) # View first few rows of the Seatbelts dataset This is a good way to learn which variables are being measured (columns) and see some example observations (rows) for each variable. Because these data are included with R, more information about each variable can be found with: ?Seatbelts Next, let’s view a summary of each column with the summary function: summary(Seatbelts) DriversKilled drivers front rear Min. : 60.0 Min. :1057 Min. : 426.0 Min. :224.0 1st Qu.:104.8 1st Qu.:1462 1st Qu.: 715.5 1st Qu.:344.8 Median :118.5 Median :1631 Median : 828.5 Median :401.5 Mean :122.8 Mean :1670 Mean : 837.2 Mean :401.2 3rd Qu.:138.0 3rd Qu.:1851 3rd Qu.: 950.8 3rd Qu.:456.2 Max. :198.0 Max. :2654 Max. :1299.0 Max. :646.0 kms PetrolPrice VanKilled law Min. : 7685 Min. :0.08118 Min. : 2.000 Min. :0.0000 1st Qu.:12685 1st Qu.:0.09258 1st Qu.: 6.000 1st Qu.:0.0000 Median :14987 Median :0.10448 Median : 8.000 Median :0.0000 Mean :14994 Mean :0.10362 Mean : 9.057 Mean :0.1198 3rd Qu.:17202 3rd Qu.:0.11406 3rd Qu.:12.000 3rd Qu.:0.0000 Max. :21626 Max. :0.13303 Max. :17.000 Max. :1.0000 date Min. :1969 1st Qu.:1973 Median :1977 Mean :1977 3rd Qu.:1981 Max. :1985 Since each column is numeric, R shows a five number summary (minimum, first quartile, median, third quartile, maximum) and mean for each column. We learn, for example, that the average number of drivers killed per month is 1670, and that the greatest price of petrol was £0.13 per litre! Let’s view a histogram of DriversKilled: hist(Seatbelts$DriversKilled, breaks = 20) Figure 5.1: Histogram of Drivers Killed in Seatbelt data We see that in some months, more than 150 drivers were killed! We can calculate how many exactly like so: sum(Seatbelts$DriversKilled > 150) [1] 33 To investigate the effect of the seat belt law, let’s create a scatter plot of drivers killed against time: plot(Seatbelts$date, Seatbelts$DriversKilled) Figure 5.2: UK Seatbelt deaths vs time By adding a col argument to the plot function, we can color the points based on whether the law was in effect: plot(Seatbelts$date, Seatbelts$DriversKilled, col = (Seatbelts$law + 2)) Figure 5.3: UK Seatbelt deaths vs time, red = no seatbelt law, green = seatbelt law There do appear to be fewer deaths, but there is so much fluctuation in deaths each year that it’s difficult to tell. Let’s change the x-axis to reflect month of the year instead of date: plot((Seatbelts$date %% 1) * 12 + 1, Seatbelts$DriversKilled, xlab = "Month", col = Seatbelts$law + 2) Figure 5.4: UK Driver Deaths vs. Month This plot shows that there is a clear seasonal effect in the number of deaths with higher deaths occurring in the Fall/Winter compared to Spring/Summer. We can also see that within each month, the traffic deaths after enacting the Seatbelt law are among the lowest. Another data set included in R is mtcars. Following the example above, find the dimension of mtcars and have R print out a summary of each column, then create a scatter plot of fuel economy (mpg) versus engine displacement. What do you observe about the relationship between these two variables? This concludes the quick example. In the rest of this chapter, we’ll talk in more detail about the different steps of working with data, and how to complete them using R! People often use data in order to answer questions, but often times, learning about data can generate even more questions than it answers. Take a moment to think of a question that you have about the Seatbelts dataset. Do you think the question can be answered using the data alone? If not, what other sources of data might be available which can help answer the question? Any feedback for this section? Click here "],["reading-writing-data.html", "5.2 Reading / Writing Data", " 5.2 Reading / Writing Data Of course, if we want work on data which is NOT included in R, we have to read that data into R in order to work with it. That is, the data are normally somewhere on your computer’s hard drive (or SSD), and you must run a command in R which reads that data into your R environment. 5.2.1 Olympic Athletes Example Let’s look at another example, this time with a data set of Olympic athletes. This is just a subset of the full dataset, to make it easier for you to work with. Here’s how we’ll read them into R: # Read the csv file into a data frame called athletes athletes <- read.csv("data_raw/olympic_athletes.csv") # Print a summary of the data frame summary(athletes) X ID Name Sex Min. : 1 Min. : 4 Length:5000 Length:5000 1st Qu.:1251 1st Qu.: 35321 Class :character Class :character Median :2500 Median : 68266 Mode :character Mode :character Mean :2500 Mean : 68668 3rd Qu.:3750 3rd Qu.:102377 Max. :5000 Max. :135559 Age Height Weight Team Min. :12.00 Min. :139.0 Min. : 33.00 Length:5000 1st Qu.:21.00 1st Qu.:168.5 1st Qu.: 61.00 Class :character Median :25.00 Median :175.0 Median : 70.00 Mode :character Mean :25.65 Mean :175.4 Mean : 70.91 3rd Qu.:28.00 3rd Qu.:183.0 3rd Qu.: 80.00 Max. :74.00 Max. :223.0 Max. :182.00 NA's :183 NA's :1109 NA's :1131 NOC Games Year Season Length:5000 Length:5000 Min. :1896 Length:5000 Class :character Class :character 1st Qu.:1960 Class :character Mode :character Mode :character Median :1988 Mode :character Mean :1978 3rd Qu.:2002 Max. :2016 City Sport Event Medal Length:5000 Length:5000 Length:5000 Length:5000 Class :character Class :character Class :character Class :character Mode :character Mode :character Mode :character Mode :character The above command only works because the data set is in a particular location (the data folder), and is in a particular format (csv). In the sections that follow, we’ll discuss how to address both of these issues. 5.2.2 Locating your data set R is capable of reading data from your computer, no matter where it is, as long as you “point” R to the correct location. The location is usually specified with a file path, which is a character string that specifies the folder structure that holds your file. By default, R starts “looking” from the current working directory, and the file path used was data_raw/olympic_athletes.csv. This means that R will look inside the current working directory for a folder called data_raw, and if it exists, R will look inside data_raw for a file called olympic_athletes.csv. In this class, you should be working within an RStudio project, which automatically sets the working directory. If you created the folders as instructed earlier, then you should already have a data_raw folder in your project directory. Download the olympic athletes data set from this link and save it in your data_raw folder. In your progress check document, simply write: “Olympic Data Downloaded”. 5.2.3 Reading CSV files A common way of storing data in a computer file is called CSV, which stands for comma-separated values. These files are plain text, so you can open them in any text editor like Word, Notepad, or even Google Docs. Just like a data frame, these files contain data in rows and columns, where on each line, the columns are separated from each other with a comma (,), which is technically called a delimiter. Programs like Excel, Google Sheets, and R can read these files and understand their row-column structure. In R, the function to read CSV files (as you saw above) is read.csv. In addition, if you call up the help file for read.csv using ?, you’ll see that there are other similar functions as well, including read.table, and read.delim. In many object oriented languages, the “dot” (.) is a special symbol used to access an attribute or method of an object. In R, however, variable names and function names can contain a dot, and the dot has no special purpose. There are some exceptions, however, that relate to function overloading, and R formulas, but these are advanced topics that will not be discussed here. These functions are actually all different variations of the same, generic, function called read.table. The difference is that read.csv, read.delim, and the others make different assumptions about what delimiters are being used, and how decimal numbers are displayed (e.g. one-and-a-half may be written as 1.5, or 1,5 depending on where you live). We will discuss functions and arguments more in the next chapter, but for now, see the following table for when to use each function: Function Delimiter Decimals read.table Must specify with sep=… . read.csv , . read.csv2 ; , read.delim tab) . read.delim2 tab) , Any of these functions accepts the argument header=FALSE, which indicates that the first row of the file does not contain column names. Without this argument, R will assume the first row does contain column names. If our Olympic athletes data did not contain headers in the first row, we would use this: athletes <- read.csv("data_raw/olympic_athletes.csv", header=FALSE) 5.2.4 Writing CSV files R also has the capability to write a data frame to a CSV file on your computer, that could then be read by Excel, Sheets, etc. Let’s suppose we wanted to save a version of the athletes data with only the Sex and Age columns. We could use the write.csv function: # Make a new data frame with only the Sex and Age columns athletes2 <- athletes[,c("Sex", "Age")] # Save the new data frame as a CSV in the clean data folder write.csv(athletes2, "data_clean/olympic_athletes_age_sex.csv") Notice we created a new data frame by selecting only the desired columns. We will talk more about different ways to select data when we discuss indexing. Notice also that the write.csv function requires that we give it the name of the data frame being saved (athletes2), then the file path for the csv file that the data will be written to (\"data_clean/olympic_athletes_age_sex.csv\"). write.csv is an example of a function which takes multiple arguments, separating them with a comma (,). Usually, these arguments must be specified in order, but more will be said about this later. Create a version of the athletes data frame which contains the athletes’ names and their sports. Save the new data frame as a CSV file in your data_clean folder with the file name “olympic_athletes_name_sport.csv”. Include the code in your progress check assignment. The read and write terminology may seem odd if you have not heard those terms before. Your computer’s hard drive (or SSD) will store data which will be remembered even after you turn off your computer. The process of getting data from, and putting data on your hard drive (or SSD) is called reading and writing. Any feedback for this section? Click here "],["summary-statistics.html", "5.3 Summary Statistics", " 5.3 Summary Statistics Reading and writing data is useful, but the power of R is doing interesting things with the data! Let’s perform a few operations with the Olympic athletes data to demonstrate some important functions for data analysis. As we’ve seen, the summary function automatically performs some summary statistics on each column of a data frame. Let’s see how to produce these and other results manually. 5.3.1 Quantitative Variables To showcase the functions R provides to summarize quantitative variables, we’ll look at the Age column of our data frame, which is stored as an integer vector in R. What other R data types might be used to store quantitative data? However, Age contains NA values, as we know from running the following function: sum(is.na(athletes$Age)) # Count how many NA's are in the Age column [1] 183 Pause and think through what’s happening in the above code. The is.na function returns a logical array which is true whenever the Age column is NA. So why does the sum function produce the number of NA’s? As a cleaning step, we must first remove the NA values: age <- athletes$Age # Assign the Ages column to a variable age <- age[!is.na(age)] # Extract only the elements which are not NA (more on this when we discuss advanced indexing) This type of “data cleaning” is a very common first step when performing data analysis. You will get more opportunities to clean data later in the course. Here are some functions R provides to summarize quantitative variables. age_min <- min(age) # Find the minimum age age_med <- median(age) # Find the median age age_max <- max(age) # Find the maximum age age_mean <- mean(age) # Find the average age age_sd <- sd(age) # Find the standard deviation of age age_var <- var(age) # Find the variance of age Let’s put all these results in a named list. In the following code, read the comments carefully to understand how the code is being organized onto multiple lines. # Create a list containing all the stats age_stats <- list( # R knows that this command continues until a closed parenthesis min = age_min, median = age_med, max = age_max, mean = age_mean, sd = age_sd, var = age_var ) # This could all go on one line, but it looks more organized this way. age_stats $min [1] 12 $median [1] 25 $max [1] 74 $mean [1] 25.65373 $sd [1] 6.495693 $var [1] 42.19402 Using the Olympic Athletes data, create a list called weight_stats with the mean, median, and standard deviation of the Weight column. If you get NA values for the statistics, you should include the na.rm=T argument like so: mean(weight, na.rm=T), to remove the NA values before computing the statistics. Visualization will be discussed more later, but we’ll show one plot now, to show how multiple summary statistics can be shown at the same time. hist(age, breaks = 50) abline(v = age_mean, col = "blue", lty = 2, lwd = 3) abline(v = age_med, col = "red", lty = 2, lwd = 3) It looks like the distribution of Age is right skewed, consistent with the fact that the mean is greater than the median. Of course, having more than one quantitative variable allows us to compare them against each other. Here’s how to compute the covariance between two quantitative variables: cov(athletes$Age, athletes$Height, use="complete.obs") [1] 6.483675 The argument use=“complete.obs” is one way to deal with NA values in the cov function. This makes R remove any observations which are NA in either the first or second variable. There are other ways as well, which you can check using the help function: ?cov. You can also compute the correlation between two variables like so: cor(athletes$Age, athletes$Height, use="complete.obs") [1] 0.1104457 Using the cov or cor functions on an entire data frame or matrix will produce a correlation matrix of the columns. Here’s an example with the mtcars data frame: cor(mtcars) mpg cyl disp hp drat wt mpg 1.0000000 -0.8521620 -0.8475514 -0.7761684 0.68117191 -0.8676594 cyl -0.8521620 1.0000000 0.9020329 0.8324475 -0.69993811 0.7824958 disp -0.8475514 0.9020329 1.0000000 0.7909486 -0.71021393 0.8879799 hp -0.7761684 0.8324475 0.7909486 1.0000000 -0.44875912 0.6587479 drat 0.6811719 -0.6999381 -0.7102139 -0.4487591 1.00000000 -0.7124406 wt -0.8676594 0.7824958 0.8879799 0.6587479 -0.71244065 1.0000000 qsec 0.4186840 -0.5912421 -0.4336979 -0.7082234 0.09120476 -0.1747159 vs 0.6640389 -0.8108118 -0.7104159 -0.7230967 0.44027846 -0.5549157 am 0.5998324 -0.5226070 -0.5912270 -0.2432043 0.71271113 -0.6924953 gear 0.4802848 -0.4926866 -0.5555692 -0.1257043 0.69961013 -0.5832870 carb -0.5509251 0.5269883 0.3949769 0.7498125 -0.09078980 0.4276059 qsec vs am gear carb mpg 0.41868403 0.6640389 0.59983243 0.4802848 -0.55092507 cyl -0.59124207 -0.8108118 -0.52260705 -0.4926866 0.52698829 disp -0.43369788 -0.7104159 -0.59122704 -0.5555692 0.39497686 hp -0.70822339 -0.7230967 -0.24320426 -0.1257043 0.74981247 drat 0.09120476 0.4402785 0.71271113 0.6996101 -0.09078980 wt -0.17471588 -0.5549157 -0.69249526 -0.5832870 0.42760594 qsec 1.00000000 0.7445354 -0.22986086 -0.2126822 -0.65624923 vs 0.74453544 1.0000000 0.16834512 0.2060233 -0.56960714 am -0.22986086 0.1683451 1.00000000 0.7940588 0.05753435 gear -0.21268223 0.2060233 0.79405876 1.0000000 0.27407284 carb -0.65624923 -0.5696071 0.05753435 0.2740728 1.00000000 However, this only works if all columns of the data frame (or matrix) are numeric. Here’s what happens if we try the same thing on the athletes data: cor(athletes) Error in cor(athletes): 'x' must be numeric 5.3.2 Categorical Variables To showcase the functions R provides for categorical variables, we’ll look, at the Sport column, which is stored as a character vector in R. What other R data types might be used to store categorical data? Are there any NA values in this column? sport <- athletes$Sport sum(is.na(sport)) [1] 0 It turns out the answer is no, so there’s no need to remove anything. In a character vector like this, we expect there to be many duplicated values. We can see a list of all the unique values with the following: unique(sport) [1] "Hockey" "Wrestling" [3] "Swimming" "Basketball" [5] "Biathlon" "Speed Skating" [7] "Fencing" "Weightlifting" [9] "Equestrianism" "Archery" [11] "Cross Country Skiing" "Gymnastics" [13] "Tennis" "Athletics" [15] "Cycling" "Bobsleigh" [17] "Shooting" "Sailing" [19] "Alpine Skiing" "Art Competitions" [21] "Canoeing" "Football" [23] "Rowing" "Figure Skating" [25] "Nordic Combined" "Judo" [27] "Short Track Speed Skating" "Water Polo" [29] "Snowboarding" "Taekwondo" [31] "Diving" "Handball" [33] "Softball" "Boxing" [35] "Tug-Of-War" "Ski Jumping" [37] "Table Tennis" "Ice Hockey" [39] "Modern Pentathlon" "Golf" [41] "Baseball" "Volleyball" [43] "Luge" "Badminton" [45] "Trampolining" "Curling" [47] "Beach Volleyball" "Polo" [49] "Rugby Sevens" "Synchronized Swimming" [51] "Triathlon" "Skeleton" [53] "Freestyle Skiing" "Military Ski Patrol" [55] "Lacrosse" "Rhythmic Gymnastics" [57] "Rugby" Using the numbers in brackets to the left as our guide, we can see that there are 57 unique values, but this can also be determined by running: length(unique(sport)) [1] 57 It would be nice to see how many times each entry occurs in the data set. This is what the table function does: table(sport) sport Alpine Skiing Archery Art Competitions 148 41 64 Athletics Badminton Baseball 728 32 19 Basketball Beach Volleyball Biathlon 98 18 100 Bobsleigh Boxing Canoeing 53 121 112 Cross Country Skiing Curling Cycling 174 8 205 Diving Equestrianism Fencing 56 121 184 Figure Skating Football Freestyle Skiing 44 138 9 Golf Gymnastics Handball 5 498 61 Hockey Ice Hockey Judo 101 83 76 Lacrosse Luge Military Ski Patrol 1 25 2 Modern Pentathlon Nordic Combined Polo 37 25 4 Rhythmic Gymnastics Rowing Rugby 9 190 4 Rugby Sevens Sailing Shooting 6 126 218 Short Track Speed Skating Skeleton Ski Jumping 23 4 45 Snowboarding Softball Speed Skating 19 10 104 Swimming Synchronized Swimming Table Tennis 399 9 36 Taekwondo Tennis Trampolining 10 45 4 Triathlon Tug-Of-War Volleyball 6 5 50 Water Polo Weightlifting Wrestling 79 85 123 Let’s save this table to a list as before: # Assign summary statistics to variables sport_n_unique <- length(unique(sport)) sport_counts <- table(sport) # Combine them into a list sport_stats <- list( number_unique = sport_n_unique, counts = sport_counts ) Again, a visualization may be useful here: par(mar = c(5, 15, 4, 2) + 0.1) # Command to make the labels fit barplot(table(sport), horiz = T, las = 2) # Bar plot So we see that in our data set, athletics, swimming, and gymnastics have the most athletes (remember, each row is an athlete). Using the Olympic athletes data, create a list called season_stats with a table of counts for the Season variable. It’s always important to remember what the rows of your data set represent. In the Olympic athletes example, one athlete may occupy multiple rows, if they competed in multiple olympic games. This impacts how you should interpret the summary statistics computed above (mean, median, counts, etc.). Since an athlete may show up for multiple olympic games, what impact could this have on summary statistics for the Height, Weight, and Sex variables? Can you give an example of what might happen? What other variables may be impacted? What R code would you write to determine if an athlete occurred multiple times in the data frame? 5.3.3 Saving an RData file Finally, we may want to save these results for use in R later. First, we’ll create a new list to put our two stats list in (remember, we can have lists inside of other lists!). # Create list athlete_stats <- list( age = age_stats, sport = sport_stats ) Remember that the names function retrieves the column names for a data frame? It also retrieves the names of a list (after all, a data frame is just a fancy list, right?)! The following commands may be useful for remembering what the contents of our stats list: names(athlete_stats) names(athlete_stats$age) names(athlete_stats$sport) To save these results, we can use the saveRDS function: saveRDS(athlete_stats, "data_clean/athlete_stats.rds") Later, we can use the following command to load the RDS file back into R: rm(athlete_stats) # Remove athlete stats to prove we are loading it from the hard drive athlete_stats <- readRDS("data_clean/athlete_stats.rds") # Load the RDS file and name it athlete_stats athlete_stats$age # Show that we have loaded the data by printing the age stats $min [1] 12 $median [1] 25 $max [1] 74 $mean [1] 25.65373 $sd [1] 6.495693 $var [1] 42.19402 Notice the file ends with .rds, indicating that this is a special RDS type which can only be read by R. This is different from other data formats like CSV, which are plain text and can be read by other programs like Excel or Sheets. RDS should only be used when you want to save work that you want to resume in R later. If at all possible, you should prefer using plain text formats rather than RDS. RDS stands for R Data Serialization. This is R’s version of object serialization, just like the io.Serializable interface in Java or the pickle module in Python. As with other languages, R’s serialization can only be used in R. The RDS format works for any R Object, not just lists, so it can be used for vectors, matrices, factors, and even functions. Any feedback for this section? Click here "],["data-formatting.html", "5.4 Data Formatting", " 5.4 Data Formatting Before we continue working with data, here are a few comments about data formatting. Many data sets can be thought of as one or more observations of one or more variables. R functions work best when the data are formatted into rows and columns, so that each row is an observation, and each column is a variable. Unfortunately, sometimes data do not follow this convention, or worse, it may not be clear what the observations or variables are. Working with data often involves answering multiple questions, and different questions may require thinking of observations and variables differently. In R, there are ways of changing the structure of data to suit your particular needs, but these are intermediate topics which will not be discussed here. One concept related to data organization is called “Tidy Data”, which you can read more about here. This focus on tidyness has led to the development of a set of R packages collectively called the “tidyverse”, which has become very popular for R analysis. The tidyverse will not be covered in this class, but a later module will provide extensive experience with it. 5.4.1 “Raw” data vs. “Clean” data. Why is there a “data_raw” folder and a “data_clean” folder, and not just a “data” folder? The idea is that the data_raw folder contains all of the original data sets that you start with, before any cleaning or summarization take place, and any cleaned, modified, or created data sets that result from your data analysis should be stored in the “data_clean” folder (or possibly even a “results” folder). This distinction ensures that the original data sets are preserved in their unedited state, just in case you need to start over from the beginning to answer a different question, and in order for others to easily replicate your work. This is why the data in the folder should be thought of as read only. Sometimes people even modify the permissions of the raw data files on their computer to prevent anyone from accidentally deleting or overwriting the raw data. The “clean” moniker comes from the fact that often times data sets need some “cleaning” such as removing duplicates, removing NA values, discarding irrelevant data, etc. There are many other ways of organizing data, but the principle here is to separate the original data sets from any intermediate data sets. Perhaps you’ve never thought about how data should be structured. Consider an experiment which measures the temperatures of five guinea pigs for each of four different days. Think about organizing each row to be a guinea pig and each column to be a day. Can you think of an R function to compute the average temperature on day 1? How about the average temperature for guinea pig 3? How do your answers change if the data are arranged with days as the rows and guinea pigs as columns? Can you think of another way to organize the data? This is the last section you should include in Progress Check 3. Knit your output document and submit on Canvas. Any feedback for this section? Click here "],["indexing.html", "5.5 Indexing", " 5.5 Indexing Part of doing interesting things with data is being able to select just the data that you need for a particular circumstance. You’ve already seen how to get a particular element from a vector or matrix, or a specific component from a list, using indices. A datum’s index is its position in the vector or list. For example, to get the second element of a vector A, we use the index 2 in square brackets: A[2]. The process of selecting elements using their indices is called indexing, and R provides multiple ways of indexing vectors. Below we’ll cover some basic indexing and more advanced indexing for the different data structures in R. Download the progress check 4 template and follow the instructions. That document should include all progress reports from Section 5.5 through (and including) Section 6.1. 5.5.1 Vectors Let’s define a vector and access an element in the way you already know: # Create an example vector V <- c("A", "B", "C", "D", "E", "F", "G", "H", "I") # Access the 5th element V[5] [1] "E" Unlike many other languages, R indices start with 1, not 0! so the first element is accessed as A[1], etc. Here are some other ways you can index as well. You can access multiple indices at the same time using a numeric vector of indices: V[c(1, 2, 5)] # Access elements 1, 2, and 5 [1] "A" "B" "E" If you need to access several indices in a row, you can use a colon (:): V[2:7] # Access elements 2 through 7 [1] "B" "C" "D" "E" "F" "G" You can even combine these two methods: V[c(1:3, 6)] # Access elements 1, 2, 3, and 6 [1] "A" "B" "C" "F" Note that the following are all equivalent ways to access the first three elements of V: V[1:3] V[c(1,2,3)] V[c(1:3)] V[c(1:2,3)] can you think of another example? But the first way would probably be the most clear for someone else to understand. All of these methods can work with assignment as well: V[c(1, 7:9)] <- "X" # Change elements 1, 7, 8, and 9 to "X" V [1] "X" "B" "C" "D" "E" "F" "X" "X" "X" Even though these examples use a character vector, this indexing works on vectors of any type. 5.5.2 Matrices To access an element of a matrix, we have to specify the row and the column. Let’s create a matrix from the V vector and access one of its elements: M <- matrix(V, 3, 3) # Create matrix M with data from vector V M [,1] [,2] [,3] [1,] "X" "D" "X" [2,] "B" "E" "X" [3,] "C" "F" "X" M[1,2] # Access the element in row 1, column 2 [1] "D" Recall that we can access an entire row or column by leaving the other index blank: M[1,] # Access the entire first row [1] "X" "D" "X" M[,2] # Access the entire second column [1] "D" "E" "F" But any of the indexing we just used for vectors can also be used on matrices M[1:2, c(2, 3)] # Access the elements in rows 1 and 2, columns 2 and 3. [,1] [,2] [1,] "D" "X" [2,] "E" "X" Finally, there is one more way of indexing Matrices (for now), that provides only one index: M[5] # Access the "5th" element of the matrix [1] "E" If you give one index, then R will count down the first row, then the second, then the third, etc., until it reaches the index you specified. Notice how this agrees with the 5th element of the vector V, which was used to make our matrix! And finally, as before, any of these indexing methods can be used to change an element’s value: M[2, 1:3] <- "Hats" M [,1] [,2] [,3] [1,] "X" "D" "X" [2,] "Hats" "Hats" "Hats" [3,] "C" "F" "X" 5.5.3 Lists So far we’ve discussed three different ways of accessing elements in a list: L <- list(A = "apple", b = "banana", c = "cherry") L[[1]] # Access using index number [1] "apple" L[["b"]] # Access using component name [1] "banana" L$c # Access using component name and dollar sign notation [1] "cherry" And these are basically the only options. Unfortunately, you cannot use a vector of indices in order to access multiple list components at once: L[[1:3]] # This does not work Error in L[[1:3]]: recursive indexing failed at level 2 What L[[1:3]] actually does (as the error message might suggest), is access elements within a nested list, but that is beyond the scope of this class. Create a vector containing the numbers 1 through 1000 in order (hint: try using 1:1000 on the right of the assignment operator). Then, change elements 4, 196, and 501 through 556 to “brussel sprouts”. What happened to the other elements in the vector? 5.5.4 Data Frames Remember that data frames are just lists of vectors, so the same indexing rules for lists and vectors apply. But remember that matrix indexing rules also apply! Here are some examples with the Olympic athletes data. athletes3 <- athletes[1:20, 1:5] # Get the first 20 rows and first 5 columns, and assign it to athletes3 athletes3$Name # Get the Name column [1] "Berta Hrub" [2] "Joaquim Vital" [3] "Madelon Baans" [4] "Achille Canna" [5] "Antje Buschschulte (-Meeuw)" [6] "Ludwig Gredler" [7] "Pawe Abratkiewicz" [8] "Jerzy Zdzisaw Janikowski" [9] "Giuseppe \\"Peppino\\" Tanti" [10] "Carl-Jan Gustaf David Hamilton" [11] "Bla Nagy" [12] "Vincent Vittoz" [13] "Joyce May Racek (-Markley, -Budrunas)" [14] "Seiichiro Kashio" [15] "Surzer" [16] "Dimitrios Kantzias" [17] "Kim Gwang-Suk" [18] "Joshua Noel \\"Josh\\" Laban" [19] "Alejandro Vidal Arellano" [20] "Mariusz Latkowski" Remember that each column of a data frame is just a vector, so we can use list indexing to access the Name column, then immediately use vector indexing to get only the indices that we want: athletes3$Name[1:3] # Get the first three elements of the Name column [1] "Berta Hrub" "Joaquim Vital" "Madelon Baans" Notice how with lists, you cannot access multiple components (which is what data frame columns are) at the same time, but with matrices you can access multiple columns at once. Since data frames can use matrix formatting, you can select multiple columns at once, as the first example above showed. You can also access columns by name like so: athletes3[,c("Name", "Sex")] # Access Name and Sex columns (and if your rows have names, you can access rows by name as well). Using the mtcars data frame (included in R), get the mpg for the cars in rows 15 through 20, and assign it to a vector. Now find the average mpg of those cars. Think it’s weird that data frames can be indexed like matrices? It gets weirder. When vectors have names, they can be indexed like lists! Try for yourself: create a vector a <- c(1, 2, 3) and set the names with names(a) <- c(\"angus\", \"brillow\", \"chandelier\") , then see what happens if you type a[[\"angus\"]]! Matrices can also be accessed using names as well. 5.5.5 Advanced Indexing There are even more ways to select the data you need from your R data structures, let’s look at some more advanced techniques. 5.5.5.1 Logical Based Indexing One very useful method that R provides is to access elements of a vector using a different, logical vector of the same length. As the following example will show, R will give only the elements which are true in the logical vector: v <- c("alpha", "bravo", "charlie", "delta") # The vector we want to access i <- c(FALSE, TRUE, FALSE, TRUE) # The logical vector we'll use to index # Index v using i: v[i] [1] "bravo" "delta" Why is this so useful? Remember that you can create logical vectors by comparing any type of vector to some value: v == "delta" [1] FALSE FALSE FALSE TRUE This means you can create a logical vector in order to extract only the elements of a vector which match some criterion. For example, let’s create a logical vector based on whether an Olympic athlete’s sport was “Tug-Of-War”. plays_tug_of_war <- athletes$Sport == "Tug-Of-War" # Create logical vector sum(plays_tug_of_war) # Count how many TRUEs [1] 5 Now let’s use that logical vector to get the names of the athletes: athletes$Name[plays_tug_of_war] [1] "Edgar Lindenau Aabye" "Willie Slade" "William Hirons" [4] "Ernest Walter Ebbage" "William Penn" Using the Olympic athletes data, create a logical vector which is true when an athlete’s sport is wrestling. Then access the age of all wrestlers, and assign the ages to another vector. Finally, compute the average age of the wrestlers vector (remember, there may be duplicate athlete names, so this average won’t mean much; the emphasis is on indexing right now) Logical vectors can also be used to subset a data frame based on some condition. That is, we take entire rows which meet a condition, rather than just a single variable. For example: # Subset the athletes data frame to get only Summer athletes. athletes_summer <- athletes[athletes$Season == "Summer",] In the last example, we are creating the logical vector and immediately using it to index the rows. Pause and think through what’s happening in this example if it’s not quite clear. Also note the placement of the comma (,), which indicates that we’re indexing rows, not columns, of the data frame. You can specify multiple conditions using “and” (&) and “or” (|) like this: # Create logical vector which is true for female gymnasts (female AND gymnast) index <- (athletes$Sex == "F") & (athletes$Sport == "Gymnastics") # Select only female gymnasts fem_gym <- athletes[index,] # Create logical vector which is true if sport is basketball OR gymnastics index <- (athletes$Sport == "Basketball") | (athletes$Sport == "Gymnastics") # Select athletes whose sport is basketball OR gymnastics. bb_gy <- athletes[index,] Create a data frame called athletes_winter with only the rows whose Season is “Winter” Another common use for Logical indexing is filling in missing values. As part of data cleaning, you may decide to change NA’s to some other value. This is easy since we can create a logical vector which is TRUE when a value is NA. We can do this with the is.na function: # For athletes with no medal, replace `NA` with "No Medal" athletes$Medal[is.na(athletes$Medal)] <- "No Medal" Run the above code to replace NA values with “No Medal”, and save the file in your data_clean folder as “athletes_clean.csv” This is not an endorsement of a particular approach to handling missing values. There are many situation dependent considerations that should be made in order to decide the best thing to do. 5.5.5.2 Negative Indexing Sometimes it’s easier to specify which columns or rows should be excluded from indexing, rather than those that should be included. To select every column except the first one, you can use a negative index: athletes[,-1] # Leave out the ID column This also works with numeric vectors: athletes[-c(1:10),] # Access all but the first 10 rows. 5.5.5.3 Nested Indexing: [[1]][3] In R, it’s likely that at some point you will encounter nested data structures, such as vectors within lists (data frames!) and lists within lists. This might make indexing more confusing at first, but a little practice will help you keep things organized in your mind. Consider the following example: # Create a vector and a matrix V <- 1:16 M <- matrix(V, 4, 4) # Create a list which contains them: L <- list(V, M) # Create a character vector C <- c("I", "think", "therefore", "I", "am") # Create another list which will contain L and C: L2 <- list(L, C) With lists like this, it’s easy to see code like L2[[1]][[2]][2,3] and get confused about what is happening. It’s best to break down the statement from left to right L2 # The second list, L2 L2[[1]] # The first component of L2, which is the first list, L L2[[1]][[2]] # The second element of L, which is the matrix M L2[[1]][[2]][2,3] # The second row and third column of M. We have discussed quite a few ways to index data, but rest assured there are more ways that we did not discuss! We won’t address them now, to keep things simple! Any feedback for this section? Click here "],["visualization.html", "5.6 Visualization", " 5.6 Visualization R is incredibly useful for creating visualizations and graphics which are easy to customize and automate, and entire university courses are dedicated to creating visualizations with R. Here we will only introduce the basics of creating visualizations in R. In this course, we focus on the visualizations in “base R”, not the capabilities provided by outside sources. This means we will not discuss the very popular ggplot2 package, which has a very different way of constructing visualizations that could be confusing if included here. R can make several different types of plots, and the type of plot will depend on what kind of data you are dealing with. Below, we’ll explore common types of plots for various types of data. 5.6.1 One Quantitative Variable One of the most popular ways of visualizing quantitative variables is with a histogram, where each bar represents the observations falling within a specific range. The height of each bar reflects how many observations fall within that range. In the Olympic athletes data, Height is a quantitative variable, so let’s create a histogram using the hist function: hist(athletes$Height) This histogram shows that most heights are between roughly 160 and 190 centimeters, and the distribution looks unimodal. Notice that R has decided how many bins (bars) to use, but this can be changed with the breaks option: hist(athletes$Height, breaks = 70) R will “try” to create the number of bins equal to breaks, but sometimes won’t make exactly that number. Instead of just giving a single number breaks, you could also give a vector of numbers, which specify the start and stop points of the bins: hist(athletes$Height, breaks = c(120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230)) By default, R adds a title and axis labels to the plot, but for presentation purposes, it’s probably a good idea to change them. This can be done with the main, xlab, and ylab options: hist(athletes$Height, breaks = 60, main = "Olympic Athlete Heights", xlab = "Height (cm)", ylab = "") These arguments work with many plot types in R. In this example, we removed the y label by setting it to be an empty string. Using the clean athletes data, make a histogram of height for athletes whose sport is Basketball. Hint: It might be easiest to create a new data frame with only basketball players first. Give it an appropriate title and axis labels. To see more options for the hist function, run ?hist. Another way to summarize a quantitative variable is with a boxplot, which shows a box whose boundaries are the first and third quartiles. Inside the box, a line denotes the median, and the “whiskers” outside the box show which points are outliers (those outside the whiskers). boxplot(athletes$Height) In this case, there are no default title or labels, but we can still add them: boxplot(athletes$Height, main = "Olympic Athlete Height", ylab = "Height (cm)") Hint: In RMarkdown, boxplots may look too wide by default. You can control the width of a figure by using the fig.height and fig.width commands in the chunk header like this: ```{r, fig.height=3, fit.width=5} These are the values used for the boxplot above. The boxplot function also allows you to split up a quantitative variable using another variable, using the tilde (~). Here are some examples: boxplot(athletes$Height ~ athletes$Sex) # Make a boxplot of height, split by sex par(mar = c(11, 4, 4, 2) + 0.1) # Command to make the labels fit boxplot(athletes$Height ~ athletes$Sport, las = 2, xlab = "") # Make a boxplot of height, split by sport Here we’ve added a few more bits to fit all the sport labels in: the las option rotates the labels, and the par function is used to increase the bottom margin below the graph. boxplot(athletes$Height ~ athletes$Age) Different software will use different rules to determine how far out the “whiskers” go (and therefore which points are outliers). The default in R is 1.5 times the interquartile range, but this can be changed. When you view a boxplot, never assume what rule was used! Using the clean athletes data, make boxplots of Height for athletes whose Sport is “Cycling”, separated by Medal. Give it an appropriate title and axis labels. Comment on the differences in Height between the different categories. How many Cyclists have no height reported (that is, how many have NA for Height) and how many athletes have a height? How should this affect your interpretation of the boxplots? 5.6.2 Two Quantitative Variables The most straightforward way to visualize two quantitative variables is with a scatter plot. In R, this is created with the plot function. Let’s look at the relationship between height and weight in the Olympic athletes data, but only for a few sports. # Select only some sports gy_bb_wr <- athletes[athletes$Sport %in% c("Gymnastics", "Basketball", "Wrestling"),] plot(gy_bb_wr$Height, gy_bb_wr$Weight) # Plot height vs weight Above we saw another nice way to index: the %in% command. This returns a logical vector which is true for elements that are found in the search list. There are a lot of points, so it may be useful to decrease the size of the circles using the cex option, which has a default value of 1: plot(gy_bb_wr$Height, gy_bb_wr$Weight, cex = 0.4) # Make circles smaller Another option would be to change the type of marker, which can be selected using the pch option. We’ll choose a smaller, solid circle, which is marker number 20: plot(gy_bb_wr$Height, gy_bb_wr$Weight, pch = 20) # Try filled circles We can also set the color using the col argument. There are multiple ways to specify a color, but we’ll use the rgb function, which allows us to specify how much red, green, and blue the color has. color <- rgb(0.5, 0, 1) plot(gy_bb_wr$Height, gy_bb_wr$Weight, pch = 20, col = color) # Change color Lastly, we can also make the points less visible, so it’s easier to see when they are overlapping one another. This is done when defining the color, by giving a fourth value called the alpha, which represents how visible a point is. An alpha value of 0 is invisible, and a value of 1 is fully visible. color <- rgb(0.5, 0, 1, 0.1) # Set the alpha level low, so points are transparent plot(gy_bb_wr$Height, gy_bb_wr$Weight, pch = 20, col = color) # Make points partially transparent We can also color by sport, by converting the Sport column to a factor, then giving that as the color argument: colors <- as.factor(gy_bb_wr$Sport) plot(gy_bb_wr$Height, gy_bb_wr$Weight, pch = 20, col = colors) # Color by sport We convert Sport to a factor because the col option in plot is expecting either a single color (as in the first example) or a vector of numbers indicating which color should be used for each point (remember, factors are represented as numbers). The numbers tell R which color in its palette it should use (for the default palette, 1=black, 2=reddish, 3=greenish, etc.), so factor level 1 (Basketball) is colored black, level 2 (Gymnastics) is colored reddish, and level 3 (Wrestling) is colored greenish. The default colors in R are sometimes not very appealing, so we can define our own color palette: palette(c(rgb(1, 0, 0, 0.1), rgb(0, 1, 0, 0.1), rgb(0, 0, 1, 0.1))) # Create color palette plot(gy_bb_wr$Height, gy_bb_wr$Weight, pch = 20, col = colors) In some cases, it might be appropriate to use lines instead of points. This can be done by setting the type option to “l”: x <- (1:10) / 10 * 2 * pi y <- sin(x) plot(x, y, type = "l") You can use points and lines at the same time using “b”: plot(x, y, type = "b") Another option for plotting two quantitative variables, especially when there are many overlapping points, is the smooth scatter: smoothScatter(gy_bb_wr$Height, gy_bb_wr$Weight) Create a scatter plot of athlete height (y axis) vs. year (x axis) for athletes with Sport “Weightlifting”, and color the points by Sex. Create an appropriate title and axis titles. What was the first year to allow Female Weightlifters? 5.6.3 One Categorical Variable One useful way to visualize categorical variables is barplots. Before creating a barplot, we need to create a summary table of the variable of interest: sport_tab <- table(gy_bb_wr$Sport) barplot(sport_tab, col = rgb(0.2, 0.2, 1)) Create a barplot for the Season variable, with an appropriate title and axis labels. Which Season has more rows in the data frame? 5.6.4 Two Categorical Variables With two categorical variables, you can create a mosaicplot, where the size of each region is relative to the number of observations in that group. mosaicplot(gy_bb_wr$Sport ~ gy_bb_wr$Sex, col = c("blue", "orange"), main = "Athlete Sex by Sport", xlab = "Sport", ylab = "Sex") 5.6.5 Multiple plots One nice feature of R’s plotting capability is that you can plot multiple things at the same time. One way to do this is to create a plot and then add another plot on top of it, using either the points or lines function. points will add a scatter plot using points/dots, and lines will add a scatter plot using a line. Normally, a plotting function like plot or hist will create a new plot figure, erasing what may have been plotted before. But with the points and lines functions, R just adds to the existing figure. Here’s an example of each: # Create some data to plot x <- (1:100) / 100 y1 <- x y2 <- sin(3 / x) * x plot(x, y2,) # Plot x against y2 points(x, y1, col = "blue") # Add points of x against y1 (on same figure) lines(x, -y1, col = "red") # Add lines of x against -y1 (on same figure) 5.6.6 Other types of plots The following plots that are less common, but may be useful for you, and this is an opportunity to show some other capabilities of R! 5.6.6.1 Scatterplot Matrix Given several quantitative variables, there are many different possible scatterplots you could make. The pairs function takes in a matrix or data frame and creates a matrix of all possible scatter plots. Here’s an example using the iris data set which is included in R: pairs(iris, pch = 20) To know the x axis for one of these plots, look up/down to the diagonal, which will tell you the variable on the x axis. To know the y axis for one of these plots, look left/right to the diagonal, which will tell you the variable on the y axis. 5.6.6.2 Surfaces If you need to plot a surface, there are a few options for visualization. The first is contour, which shows level curves of the surface in a 2d plane: # Make a surface using the rep function n <- 100 x <- rep(1:n, n) / n * 2 * pi y <- rep(1:n, each = n) / n * 2 * pi z <- matrix(sin(x) + cos(y), n, n) contour(z, nlevels = 20) The second option is persp, which gives a 3d perspective of the surface: persp(z, theta = 45, phi = 30, shade = 0.5) 5.6.7 Saving Images Creating visualizations in R wouldn’t be very useful if there were no way to save them onto your hard drive (or SSD). Thankfully, R provides various ways of doing this, depending on where the plot “lives”. We’ll talk through each of these below. 5.6.7.1 RCode The most universal way to save plots is to use R code itself! This will work anywhere that R code can be run, whether that’s the RStudio console, an R script, or an RMarkdown document. All you have to do is type a few simple commands. The idea is, that normally R “sends” a plot to the plotting window (in the lower right of RStudio), or to the output of a code chunk (if you’re using RMarkdown), but to save the file, you just have to change where R is sending the plot. For example, if you add put the png function before a plotting command, then instead of sending the plot to wherever it normally does, R will send the plot into the png file you specify. Here’s an example: png("output/test_plot.png") # Start "sending" plots to the png file called "test_plot.png" plot(y1, y2) # This plot will go to "test_plot.png" dev.off() # Stop sending plots to "test_plot.png" quartz_off_screen 2 After you’re done sending plots to a file, use the command dev.off() to reset where R is sending the plots. R graphics works with objects called “graphics devices”. The png function creates a new graphics device which is a file on your computer. The dev.off() shuts down the current graphics device, so no more plots are sent to the file. You can check out other dev. functions by running `?dev.off(). There are other commands like png as well, including bmp for bitmap images, and jpeg for jpeg images. When you’re sending a plot to a file, it will not display in the plot window. 5.6.7.2 RStudio Plot Window If you run code to generate a plot from the console or an R script, then the plot will show up in the RStudio plot window. To save a figure displayed in the plot window, use the “Export” button in the plot window menu. 5.6.7.3 RMarkdown If you’re plotting inside of an RMarkdown document, then plots will be shown inside your document. One way to get them “out of RStudio” is simply to knit the document. But if you want the plot by itself, then right click on the plot and select “Save image as”. Choose a plot that you previously created, and write code to save the plot to a png file in the “output” directory of your RStudio project. Choose an appropriate filename for the file. 5.6.8 Plotting Wrap Up These examples of plotting are only scratching the surface. There are many more things possible with base R graphics, not to mention the numerous other capabilities provided by community developed Packages. Before ending this section, we’ll leave you with an example from the ggplot2 package, just to give you a taste of what’s possible. library(ggplot2) ggplot(gy_bb_wr, aes(Height, Weight, color=Sex)) + geom_point(alpha = 0.2) + theme_bw() + labs(title = "Athlete Height vs. Weight") + facet_grid(Sex~Sport) Warning: Removed 199 rows containing missing values or values outside the scale range (`geom_point()`). Any feedback for this section? Click here "],["vignettes.html", "5.7 Vignettes", " 5.7 Vignettes In this section, you’ll gain more experience working with data by following along with some more data analysis examples. 5.7.1 Flood analysis example In this example we will learn how to analyze flood data to better understand the history of flooding in the last ten years in the Cache La Poudre river which runs through Fort Collins. This vignette will help you learn three key ideas: Data can be read into R directly from online data services using packages which you will learn about later in this book. We can use this ‘live’ data to understand both past and present river conditions in the river. We can use R to look at changes over time in river flow and water height. 5.7.1.1 Map The river monitoring location for the Cache La Poudre River is right at Lincoln Bridge near Odell Brewing. 5.7.1.2 Installing and using packages In order to download river flow and height data we will first need to load a package called dataRetrieval this is a package run by the United States Geological Survey (USGS) and it provides access to data from over 8000 river monitoring stations in the United States and millions of water quantity and quality records. You can learn more about the data from the USGS here. To use packages we first have to install them using the command install.packages and then load them using the command library. # Install the package if it's not already installed by uncommenting the line # below #install.packages('dataRetrieval') # Load the package library(dataRetrieval) 5.7.1.3 Downloading the data Once we have loaded the package we can use the special functions that it brings to the table. In this case, dataRetrival provides a function called readNWISdv which can download daily data (or daily values, hence readNWISdv) for specific monitoring locations. But how do we use this function? Try ?readNWISdv to get more details. So the readNWISdv command requires a few key arguments. First siteNumbers, these are simply the site identifiers that the USGS uses to track different monitoring stations and in our case that number for the Cache La Poudre is 06752260, which you can find here. The second argument is the parameterCd which is a cryptic code that indicates what kind of data you want to download. In this case we want to download river flow data. River flow tells us how much water is moving past a given point and is correlated with the height of the river water. This code is 00060 for discharge which means river flow. Lastly we need to tell the readNWISdv command the time period for which we want data which is startDate which we will set to 2010, and endDate which we will set to the current day using the command Sys.Date(). These arguments should be in the YYYY-MM-DD format. With all this knowledge of how the command works, we can finally download some data, directly into R! poudre <- readNWISdv(siteNumbers = '06752260', parameterCd = c('00060'), startDate = '2010-10-01', endDate = Sys.Date()) 5.7.1.4 Explore the data structure Now that we have our dataframe called poudre, we can explore the properties of this data frame using commands we have already learned. First let’s see what the structure of the data is using the head command, which will print the first 6 rows of data. head(poudre) It looks like we have a dataframe that is 5 columns wide with columns agency_cd which is just the USGS, site_no which is just the site id we already told it. Since we only asked for data from one site, we don’t really need this column. A Date column which tells us… the date! There are two more columns that are kind of weird which are labeled X_00060_00003 which is the column that actually has values of river flow in Cubic Feet Per Second (cfs), or the amount of water that is flowing by a location per second in Cubic Feet volume units (1 cubic foot ~ 7.5 gallons). Finally X_00060_00003_cd tells us something about the quality of the data. For now we will ignore this final column, but if you were doing an analysis of this data for a project, you would want to investigate what codes are acceptable for high quality analyses. To make working with this data a little easier let’s rename and remove some of our columns in a new, simpler dataframe. # Remove the first two columns pq <- poudre[,-c(1,2,5)] # Rename the remaining columns names(pq) <- c('Date','q_cfs') 5.7.1.5 Explore the data Now that we have cleaned up our data frame a little, let’s explore the data. First we can use the summary function to just quickly look at the variables we have. summary(pq) Date q_cfs Min. :2010-10-01 Min. : 1.31 1st Qu.:2014-03-04 1st Qu.: 22.90 Median :2017-08-05 Median : 62.35 Mean :2017-08-05 Mean : 222.52 3rd Qu.:2021-01-06 3rd Qu.: 147.00 Max. :2024-06-10 Max. :7150.00 It looks like we have data from 2010 to 2024-06-11 and a range in river flow (q_cfs) from 2.6 cfs all the way up to 7150 cfs. If you’re a hydrologist, hopefully these flow numbers look right, but another way to check to make sure is to simply plot the data as we do below. plot(pq$q_cfs ~ pq$Date, type = 'l', ylab = 'River Flow (cfs)', xlab = 'Date', col = 'blue3') The above plot is called a “hydrograph” or a plot of how river flow has changed over time. In the Cache La Poudre, what might explain the peaks and valleys of the data? What controls river flow in Colorado rivers? 5.7.1.6 Analyze the data Now that we’ve plotted the data we can see some interesting patterns that we might want to explore. For example, how has the average flow changed in the last ten years. To analyze this, we need to use the concept of a Water Year. Simply put, a water year is a way to analyze yearly variation in flow, which doesn’t map well to a calendar year. Water years in the USA are typically from October 1 to September 30th. Luckily for us, the dataRetrieval package has a function that calculates water year for us. It’s simply called addWaterYear. pq_wy <- addWaterYear(pq) To look at variation per year we can use the function tapply which can take the mean, max or any summary function of groups of data (more on this in the next chapter, but you can type ?tapply for more info). In this case, we want to look at the mean river flow for each water year. Now to use tapply we use the following code annual <- tapply(pq_wy$q_cfs, pq_wy$waterYear, mean) Now let’s plot the data, where the values (y) are the annual average flow and the years (x) are the names of the annual vector from the tapply function. plot(names(annual), annual, xlab = "Water Year", ylab = "Annual Average Flow (cfs)") Has annual mean river flow declined over the past ten years? What about the last 6? Any feedback for this section? Click here "],["performing-effective-data-analysis.html", "Chapter 6 Performing Effective Data Analysis", " Chapter 6 Performing Effective Data Analysis “Learning to write programs stretches your mind, and helps you think better, creates a way of thinking about things that I think is helpful in all domains.” —Bill Gates In the previous chapter, you learned how to load a data set, compute summary statistics, and create visualizations. Suppose instead of just one data set, you had to do analysis on 100 different data sets. Will you have to write 100 times the amount of code? Now suppose that instead of 100 data sets, you have one data set and 100 columns, and you would like to create a visualization of each column. As you’ve seen, different types of data merit different types of visualizations. Will you have to manually examine each column and write the appropriate code to visualize that column? Clearly these scenarios (and many others) would benefit from smarter R programs. In this Chapter you’ll discover ways to make R do more work and letting you do less. This is where the true power of R as a programming language will be harnessed, and you will be able to write less code and perform more effective analysis. You will also be able to reduce mistakes and increase consistency in analysis, as well as better communicate your work to others. This chapter is where you will gain the skills to move you from being able to work with data to being able to perform effective data analysis. It will all start with basic logic, in the next section! "],["basic-control-flow.html", "6.1 Basic Control Flow", " 6.1 Basic Control Flow When you write R code, you are creating commands that R will execute one at a time in order, from top to bottom. This is the basic flow of an R program, but R also provides ways that you can control the flow, using basic logic. In this section, we’ll introduce a few ways of controlling the flow of an R program, but first, we need a data set to work with. Our working example for this chapter will be the latest (as of this book’s writing) provisional estimates of COVID-19 Deaths in the United States, available from the Centers for Disease Control at this link. We’ve downloaded the data and saved it in the data_raw folder, and you should do the same (the data are also available here). First, let’s load the data and do some minor cleaning: # Load the data # The "Footnote" column has hyphens, # which only display correctly if we specify "UTF-8" encoding covid <- read.csv("data_raw/Provisional_COVID-19_Death_Counts_by_Sex__Age__and_State.csv", fileEncoding = "UTF-8") # Remove rows with state totals, this will mess up our summary statistics later covid <- covid[!grepl("Total", covid$State),] # Remove all ages category covid <- covid[covid$Age.group != "All ages",] Download the covid data into your ‘data_raw’ folder, and load/clean it using the code above. 6.1.1 Loops One of the first things we might like to do with our data set is create visualizations. This data contains deaths data for different states, age groups, and sexes. Let’s pick a state and sex, create a bar chart for deaths in different age groups, and save the image to the output directory: # Select only Females from Colorado covid_co_f <- covid[(covid$State == "Colorado") & (covid$Sex == "Female"),] # Save a barplot of the deaths by age group png("output/covid_deaths_by_agegroup_colorado_female.png") par(mar = c(9, 4, 2, 2)) # The COVID.19.Deaths vector doesn't have row names, # so we specify the bar labels with names.arg barplot(covid_co_f$COVID.19.Deaths, names.arg = covid_co_f$Age.group, las = 2, main = "Deaths By Age Group") dev.off() Here’s the plot we just created: covid_co_f <- covid[(covid$State == "Colorado") & (covid$Sex == "Female"),] par(mar = c(9, 4, 2, 2)) barplot(covid_co_f$COVID.19.Deaths, names.arg = covid_co_f$Age.group, las = 2, main = "Deaths By Age Group") Note that three age groups have more than 0 but less than 9 cases, so the counts have been omitted from the data set to maintain confidentiality of the victims. Let’s repeat this process for two other states: # Deaths by age group for Females in Wyoming covid_wy_f <- covid[(covid$State == "Wyoming") & (covid$Sex == "Female"),] png("output/covid_deaths_by_agegroup_wyoming_female.png") par(mar = c(9, 4, 2, 2)) barplot(covid_wy_f$COVID.19.Deaths, names.arg = covid_wy_f$Age.group, las = 2, main = "Deaths By Age Group") dev.off() # Deaths by age group for Females in New Mexico covid_nm_f <- covid[(covid$State == "New Mexico") & (covid$Sex == "Female"),] png("output/covid_deaths_by_agegroup_newmexico_female.png") par(mar = c(9, 4, 2, 2)) barplot(covid_nm_f$COVID.19.Deaths, names.arg = covid_nm_f$Age.group, las = 2, main = "Deaths By Age Group") dev.off() Here are these plots, too: Now, if we wanted to do this for all states in our dataset, this would take a lot of code. But, did you notice that the code we wrote in each case was very similar? This is a perfect opportunity to use looping. Looping involves running the same R commands multiple times, usually making small changes in between. The most common form of loop is called a for-loop. Here’s a simple example: vec <- c("a", "b", "c") # Create a vector for(i in vec){ # Loop through the elements of the vector print(i) # Print out the current element } # Stop the loop [1] "a" [1] "b" [1] "c" This for-loop printed out each element of the vec variable, one at a time. Here’s the way this works: for tells R that we want to repeat code multiple times. When R “sees” the for command, it knows that the code that follows will be repeated. the parentheses (( and )) specify a vector that will be looped over (vec in this example), and a variable name to use while looping (i in this example). On each iteration of the loop, the variable (i) will have a different value. In this example, the first time through the loop, i will have the value of the first element of vec (\"a\"), the second time through the loop, i will have the value of the second element of vec (\"b\"), etc. The name for-loop is common in many programming languages, which reflects the fact that R is running the loop for each element of the vector. The braces ({ and }) specify which code should be run each time through the loop. In this example, we’re just printing out the value of i, so the result is that each element of vec is printed in order. Recall that braces are a way of specifying a block of code, and R knows that everything inside the block should be run while looping. After it finishes looping, R proceeds to run any code below the for-loop. Here’s another example of a for-loop: for(j in 1:10){ print(j^2) } print(j + 1) [1] 1 [1] 4 [1] 9 [1] 16 [1] 25 [1] 36 [1] 49 [1] 64 [1] 81 [1] 100 [1] 11 There are a few things to learn from this second example: The variable used in the loop doesn’t have to be i. It can be any name you like. You can create vectors in the for-loop. Here we use 1:10 to generate a sequence of numbers from 1 to 10 (remember this?). The value of j (or whatever your looping variable is called) still exists after the for-loop is over. Here the last value of j was 10, so printing j+1 produced 11. Don’t forget to include the curly braces ({, }) after your for-loop, or else R may not include your code in the loop. In some languages, white space like tabs and spaces are significant, meaning they imply something about what should happen when the code is run. In R, spaces and tabs don’t change anything about how code is run, and usually are used to make code more readable. For example, it’s common to indent for-loops, for clarity, but it’s not strictly necessary for the code to run. This is another example of coding style. Technically, you don’t need to include braces after the for-loop, but if you leave them out, then R will only run the first command it finds after the for(...). Now, let’s gradually change the first example into a loop that runs visualizations for each state in our data set. First, instead of looping over c(\"a\", \"b\", \"c\"), let’s loop over state names: for(i in c("Colorado", "Wyoming", "New Mexico")){ print(i) } [1] "Colorado" [1] "Wyoming" [1] "New Mexico" Now, instead of just printing the state name, let’s create a data frame of just that state, for females: for(i in c("Colorado", "Wyoming", "New Mexico")){ covid_state_f <- covid[(covid$State == i) & (covid$Sex == "Female"),] } Remember, each time through the loop, the value of i matches one of the state names in the vector. So covid$State == i will produce a logical vector which is true for the rows specific to whichever state name we’re on. Notice that each time through the loop, the covid_state_f data frame will also change, containing only the rows for the state we’re on. Now that we are selecting only the state of interest, let’s produce a bar plot of cases, split by age group: # Loop though three states for(i in c("Colorado", "Wyoming", "New Mexico")){ # Select only the rows from the state covid_state_f <- covid[(covid$State == i) & (covid$Sex == "Female"),] # Create the file name using the state's name file_name <- paste("output/covid_deaths_by_agegroup_", i, "_female.png", sep="") # Produce the plot png(file_name) par(mar = c(9, 4, 2, 2)) barplot(covid_state_f$COVID.19.Deaths, names.arg = covid_state_f$Age.group, las = 2, main = paste("Deaths By Age Group, ", i, sep="")) dev.off() } We’ve used the paste function a few times in this loop, remember that it combines multiple strings using a separator, which we’ve set as an empty string (so no separator between the strings being combined). This is some of the longest and most complex code that we’ve discussed so far! It’s important that you fully understand what each line is doing, so take your time and review the code chunk above until you’re comfortable with it. Here comes the real power of this method. So far, we’ve just produced plots for three states, but with one small change, we can produce plots for each state in the data frame: for(i in unique(covid$State)){ # <<------ Here's the one change we made! covid_state_f <- covid[(covid$State == i) & (covid$Sex == "Female"),] file_name <- paste("output/covid_deaths_by_agegroup_", i, "_female.png", sep="") png(file_name) par(mar = c(9, 4, 2, 2)) barplot(covid_state_f$COVID.19.Deaths, names.arg = covid_state_f$Age.group, las = 2, main = paste("Deaths By Age Group, ", i, sep="")) dev.off() } This code will now loop through every unique value in the State column and produce identical visualizations for each state! Write a for-loop which loops through each age group category, and prints the total number of COVID-19 deaths across all states (Hint: each time through the loop, subset based on the age group, then find the sum of the deaths column, then print the result). R has other functions for looping as well, but for-loops are by far the most common. Another option is while which, rather than looping through a vector, just continues looping forever as long as some condition is true. Try ?Control for more info. 6.1.1.1 Nested Loops Sometimes, it becomes necessary to loop over multiple vectors at once. This is possible by nesting the for-loops (putting one inside the other) like so: for(i in c(10, 50)){ for(j in c(1, 2)){ print(i + j) } } [1] 11 [1] 12 [1] 51 [1] 52 Look carefully at the output, and notice that j is changing “faster” than i: First i is 10, and j cycles through 1 and 2, then i is 50, and j cycles through 1 and 2 again. Notice that when nesting for-loops, each for-loop has its own set of braces ({, }). Don’t forget to put the second ending brace }! Another reason to use indenting is to catch mistakes like a missing ending brace. Let’s apply this concept to our COVID-19 data. So far, we’ve been generating plots for the females only, but we can include another loop which cycles through each Sex for each state (changes to the code are marked with comments): for(i in unique(covid$State)){ for(j in unique(covid$Sex)){ # Add a nested loop for sex covid_state_sex <- covid[(covid$State == i) & (covid$Sex == j),] # Compare covid$Sex to j # Add j to the file name file_name <- paste("output/covid_deaths_by_agegroup_", i, "_", j, ".png", sep="") png(file_name) par(mar = c(9, 4, 2, 2)) barplot(covid_state_f$COVID.19.Deaths, names.arg = covid_state_f$Age.group, las = 2, main = paste("Deaths By Age Group,", i, j)) # Change add Sex to title dev.off() } } Nested for-loops can be useful and even necessary, but nesting can sometimes take a very long time to run. If two nested for-loops each run through 1,000 vector elements, that means a total of 1,000,000 iterations through the inner loop’s code! It’s possible to have a set of three nested for-loops or even more, but generally this is not wise practice, and in most cases there is a way to accomplish the same goal without so much looping. 6.1.1.2 Breaking Out of For-Loops. Sometimes it’s necessary to stop a loop earlier than expected. This can be done with break, but this is best explained after discussing if/else statements. 6.1.2 If Statements So far, you’ve seen how to control the flow of a program by having R run the same chunk of code multiple times. Another common way of controlling flow is to change the code that runs based on some condition. Let’s return to the COVID example for motivation. Suppose we wanted to create a visualization of the data in each column of the data frame. Remember that the choice of visualization is affected by the type of variable being visualized (quantitative or categorical). If the column is quantitative, we’d like to produce a histogram, perhaps, and if the column is categorical, we’d like to produce a bar graph. Remember that looping runs the same code each time through the loop, so how are we supposed to change the plot method to suit the variable type? The answer is to use if statements. Before going further, here’s a quick example: if("cat" == "dog"){ print("Something doesn't make sense!") } This code produces precisely no output. Even though there is a print command, R does not print anything! The reason is that the print command is inside of an if statement, and R only runs that code if the specified condition is met. Here’s how it works: The if indicates the start of the if statement. R expects the parentheses to contain a logical statement that produces either TRUE or FALSE. In this example, we are comparing the character strings \"cat\" and \"dog\" (which are not the same, so the result is FALSE). If the condition is TRUE, then the code block in curly braces is run (not true for this example). If the condition is FALSE, then the code block is not run (which is why the above example did not print). Whether the code block is run or not, R will then proceed to run any code below the if statement. In the simple example above, the logical condition (“cat” == “dog”) is obviously false, so every time we run the code, the print statement will not be run. If the code never runs, then why go through the trouble of including it? The answer is that this simple example isn’t realistic, and you should look at the next example. Let’s see how if statements can be used inside of a for-loop. for(i in 1:5){ if(i == 4){ print(i) } } [1] 4 Here we have a for-loop which loops through the vector 1:5. Remember that the value of i is changing each time through the loop to a different element of the vector. Each time through the loop, R evaluates the condition i == 4. If it is true, then the value of i is printed. Otherwise, nothing happens because there is no other code in the for-loop. i takes on the value 4 exactly once, in which case the print statement runs and we see the value of i. To summarize, the for-loop code ran five times, four of these times the if condition was FALSE and nothing happened, but one time the if condition was TRUE. 6.1.2.1 Else If statements can also be written with an else block, which specifies code to run if the logical condition is FALSE: for(i in 1:5){ if(i == 4){ # Condition to test print(i) # Code to run if condition is TRUE } else { print("Not 4") # Code to run if condition is FALSE } } [1] "Not 4" [1] "Not 4" [1] "Not 4" [1] 4 [1] "Not 4" Here you can see that rather than doing nothing when the condition is not true, the second code block (after else) is run instead. Returning to the COVID example, let’s loop through each of the columns of the data frame, and use an if statement to determine if it is a character or numeric mode (remember mode?). Then let’s choose an appropriate visualization based on the mode: for(col_name in names(covid)){ col <- covid[[col_name]] if(mode(col) == "numeric"){ # Check if mode is numeric hist(col, main = col_name) # Plot histogram } else { # Not numeric, assume character barplot(table(col), main = col_name) # Plot barplot } } Admittedly, these plots are a little crude, but the point is that the code is able to create the appropriate plot depending on the type of variable. This is another way in which you can control the flow of an R program. Looking at visualizations like this for variables in a data set can be a useful way to identify potential problems. Look at the barplot for State, and notice that one category has more observations than the others. Which state this is (hint: the table and sort functions might be useful)? Create a new data frame by subsetting on the outlier state, and examine it. Is there cause for concern? Why or why not? There are other variations on if statements, including using else if to test a second condition if the first is not met, and the switch function which matches an argument to one of several possibilities, and runs different code for each match. These are more advanced topics that will not be covered here. Create a for-loop which loops through each state. In the for-loop, determine whether there are more male or female deaths in the 45-54 age group. If there are more females, print “There are more female deaths in <State>”, where <State> is the state name for that iteration in the loop. If there are more males or the deaths are the same, the print “There are not more female deaths in <State>”. 6.1.2.2 Breaking Out of For Loops. Sometimes it’s useful to be able to stop a for-loop before it has finished looping through the whole vector. This can be done with the break statement, which is usually placed within an if statement. Here’s an example: for(i in 1:10){ if(i == 6){ break } print(i) } [1] 1 [1] 2 [1] 3 [1] 4 [1] 5 The if condition is FALSE until i is 6, at which point the if condition is TRUE, so the break statement is run. The break statement causes R to exit from the loop before 6 is printed and before i is updated to 7. Hence we see the numbers 1-5 printed but not the numbers 6-10. 6.1.3 Formatting Conventions Since R is a programming language, it is not immune to the common debates between programmers regarding proper formatting. For example, the following for-loops are all equivalent: for(i in 1:3){ print(i) } [1] 1 [1] 2 [1] 3 for(i in 1:3) { print(i) } [1] 1 [1] 2 [1] 3 for(i in 1:3) {print(i)} [1] 1 [1] 2 [1] 3 for(i in 1:3) print(i) [1] 1 [1] 2 [1] 3 But different programmers (and sometimes programming communities) will have different ideas about what is best. For this book, we’ll use the first convention, but you could reasonably choose the second as well. The third and fourth conventions should probably only be used if the code block is very short (e.g. a single command). Mainly, we raise these differences because you may have to read code written by someone with different conventions from yourself. This is the last section you should include in Progress Check 4. Knit your output document and submit on Canvas. Any feedback for this section? Click here "],["writing-functions.html", "6.2 Writing Functions", " 6.2 Writing Functions Throughout this course, we’ve been using various R functions, like print, sum, is.na, and hist. Each of these functions does different things, but they all obey similar rules. First we’ll think carefully about what all R functions have in common, then we’ll see how you can write your own functions to suit your needs! 6.2.1 The Components Of A Function As an example, consider the sum function: v <- c(1, 2, 3) sum(v) [1] 6 When R runs this function, it takes a numeric vector and computes the sum of its elements. The numeric vector is specified by you, the programmer, and it’s formally called an argument. The argument can be thought of as the “input” into the function. Some functions use more than one argument, like the seq function: # Create a sequence of numbers from 3 to 9 seq(3, 9) [1] 3 4 5 6 7 8 9 while others functions might have no arguments, like getwd: # Get the current working directory getwd() [1] "/Users/lanedrew/Documents/Teaching/STAT158_SU23/Module1" Other functions can work with different numbers of arguments, like the combine function, c: c(1) [1] 1 c(1,2) [1] 1 2 c(1,2,3) [1] 1 2 3 Thinking back to the sum example, we also notice that the function produces a result, which is the sum of the elements of the vector. This result is called a return value, because it’s something that the function “returns” back to you after it has finished running. Return values can be assigned to R objects: s <- sum(v) print(s) [1] 6 The combine function’s output is a vector, which we can assign to an object called w: # The return value of c() is assigned to w w <- c("a", "b", "c") print(w) [1] "a" "b" "c" Sometimes a function doesn’t have a return value, as with the rm function: # rm doesn't have a return value, which is why result is NULL (i.e. no object) result <- rm(w) print(result) NULL Remember what the rm function does? Aside from the arguments and the return value of a function, we can talk about what the function actually does. The sum function obviously computes the sum of a vector, but the sqrt function takes the square root of a number: sqrt(58) [1] 7.615773 As we will see shortly, what a function does is determined by the code in its body. That’s right, functions are basically a collection of code that is combined in a convenient package. We can even examine the code for a function by typing its name without parentheses. Here’s the sort function: # View the code of the sort function sort function (x, decreasing = FALSE, ...) { if (!is.logical(decreasing) || length(decreasing) != 1L) stop("'decreasing' must be a length-1 logical vector.\\nDid you intend to set 'partial'?") UseMethod("sort") } <bytecode: 0x11a66a380> <environment: namespace:base> Now, there are some things in this output that may be confusing and that we won’t explain in this book, but at least some of the output should look like R code to you! Here’s another example, the mean function: # View the code of the mean function (or so we think) mean function (x, ...) UseMethod("mean") <bytecode: 0x11b948678> <environment: namespace:base> This example doesn’t seem to have as much R code in it, so where is the code for this function? The answer is that both sort and mean (and many other R functions) are written in a different programming language, C, which isn’t human readable once it’s compiled. Don’t worry too much about this, except that we will use the same method to view the code of our own functions later. The way we’ve described R functions as being arguments, a body, and a return value, is mostly correct, but there is also something called the environment of the function, which is essentially scoping, if you are familiar with that concept from other programming languages. We will discuss scoping briefly here but not in detail. For more on functions, check out this link. 6.2.2 Writing A Function The beauty of functions in R is that you can write your own! All you have to do is specify the arguments, body, and return value for your function. Here’s a simple example how to define a function: # Create function which adds 1 to the input argument add_one <- function(x){ y <- x + 1 return(y) } # Test out the function add_one(100) [1] 101 Here we define a function called add_one, using the assignment operator <-, just like when we define new vectors, data frames, integers, etc. The statement function signifies that we are defining a new function, and the parentheses surround any arguments that this function accepts. Here, we have just one argument called x. The body of the code has just two commands. The first command creates a new variable y by adding 1 to the argument x. The second command specifies that y will be the return value of the function. The function is used by writing its name add_one and specifying the arguments in parentheses (100). Technically we are specifying that the value of x is 100. When the function is run, we see the return value (100 + 1) displayed in the output. Let’s view the code of the function we just wrote: add_one function(x){ y <- x + 1 return(y) } Here it shows us exactly the code that we used to create the function. Let’s use the function a few more times: number <- add_one(10) # Assign the return value of add_one to `number` number [1] 11 # Nest our function add_one(add_one(add_one(1))) [1] 4 It’s possible re-define the built in R functions by choosing a function name that already exists (print for example), but this is a very bad idea. This can make your code very difficult to understand, and potentially unpredictable! Sometimes it’s not necessary to specify a return value. If you don’t, then R will take any output generated by the last command in the function and return it: add_two <- function(x){ x + 2 # R will return the result of x + 2 } add_two(12) [1] 14 But you must be careful, because some commands produce no output. Remember that if we type math, then R will print the result: 1 + 1 [1] 2 but if we assign the result to a variable, R will not print anything (the result is assigned to the variable instead): two <- 1 + 1 This is how it works for function return values as well. So if we write a statement at the end of a function, but assign the result to a variable, R will not return the value. add_three <- function(x){ y <- x + 3 # The results are assigned to y, but y is not returned } add_three(4) # This returns nothing This is technically not true. The above function does return the value of y, but it is “invisible”. To display the output, you can wrap the result in parentheses like this: (add_three(4)) Now let’s look at a more complicated example that has two arguments: # Function to raise x to the y-th power pow <- function(x, y){ # Here we specify the function has two arguments. p <- x^y return(p) } # Test the arguments with x=2 and y=3 pow(2, 3) [1] 8 There’s an important lesson to learn from this example. When we tested the function, R used 2 as the value of x and 3 for the value of y (after all, 2 cubed is 8), and this is because of the order that the arguments were supplied. When we defined the function, we specified that x and y are the arguments, in that order. Then when we called the function, we put 2 first and 3 second. Perhaps this is obvious, but strange things are possible, because R also allows you to specify the arguments by name like so: pow(x = 2, y = 3) [1] 8 So far this gives the same result, but watch what happens if we do this instead: pow(y = 2, x = 3) [1] 9 This time, R computed 3 squared instead of 2 cubed, even though we specified y first and x second. When you specify parameters by name, R will ignore the order that they are given in. R also allows you to specify some arguments by name and some by position, as long as the position arguments come first. For more, see here. (No need to turn this in) Write a function called math which has three arguments, a, b, and c. In the body of the function, write code which computes a - b * c, store the result as x, then specify the return value of the function to be x. Demonstrate the use of your function with a few examples. 6.2.3 Using Functions for Data Analysis Functions offer many of the same advantages as loops: They allow you to write less code and do more. Let’s see how functions might be used for data analysis. Suppose we want to compare deaths between men and women for particular states and age groups. Here’s a barplot for Colorado in the 45-54 age group: # Extract just the state and age group of interest covid2 <- covid[(covid$State == "Colorado") & (covid$Age.group == "45-54 years"),] # Create a bar plot barplot(covid2$COVID.19.Deaths, # Specify column to plot names.arg = covid2$Sex, # Specify bar names main = "Sex Comparison: Colorado 45-54 years", # Title ylab = "COVID-19 Deaths") # y label Suppose we wanted to view this information for more states and age groups. Rather than repeat the above code each time, let’s put it in a function: # Create a function called plot_fm with two arguments: state and ages plot_fm <- function(state, ages){ covid2 <- covid[(covid$State == state) & (covid$Age.group == ages),] barplot(covid2$COVID.19.Deaths, names.arg = covid2$Sex, main = paste("Sex Comparison:", state, ages), ylab = "COVID-19 Deaths") return(NULL) } Now let’s try out the code on a few states and age groups: plot_fm("Colorado", "45-54 years") NULL plot_fm("Texas", "65-74 years") NULL plot_fm("New York", "85 years and over") NULL Notice that our function doesn’t actually return anything, but it does produce a plot while running. The plots produced by this function are one example of side effects, which are changes that persist after the function is completed, and that aren’t the return value. If you tried to run plot_fm(\"Colorado\", \"5-14 years\"), R would produce an error. This is because both the COVID.19.Deaths column for that State/Age group is NA, and R needs at least one non-NA value to determine the limits of the y axis. To get around this error, we could write extra code to manually set the y limits and specify them while plotting, like so: covid2 <- covid[(covid$State == state) & (covid$Age.group == ages),] # Set the maximum y limit manually, in case there are NA values ymax = max(covid2$COVID.19.Deaths, na.rm = T) if(ymax == -Inf) ymax <- 1 # Create the plot barplot(covid2$COVID.19.Deaths, names.arg = covid2$Sex, main = paste(\"Sex Comparison:\", state, ages), ylab = \"COVID-19 Deaths\", ylim = c(0, ymax)) return(NULL) (No need to turn this in) Make a function with arguments for state, sex, and age group, and print out the COVID 19 deaths, Total Deaths, Pneumonia Deaths, and Influenza Deaths for that demographic. 6.2.4 Function Scope There’s another important concept for functions in R, called scope, which is best illustrated through the following example: simple_f <- function(){ XYZ <- 2 return(XYZ) } print(XYZ) Error in eval(expr, envir, enclos): object 'XYZ' not found print(simple_f()) [1] 2 This function has no arguments, but it does create a new object called XYZ, which is returned from the function. Notice, however, that printing out XYZ gives an error. This is because the object XYZ only exists in the scope of the function simple_f, and is “forgotten” after the function finishes running. This is true for any objects created inside any function (with one exception, noted in the bonus block below). Variables defined outside of functions are in the global scope, which means they can be accessed anywhere, both inside and outside functions: y <- "hello" say_hello <- function(){ print(y) } say_hello() [1] "hello" It’s also important to realize that variables in different scopes can have the same name without conflict. For example, we can use x as the argument to a function and as a variable outside of the function. R will search the current scope first, then look outside of the current scope if it can’t find an object. # Define x and y in the global scope x <- "a" y <- "b" f <- function(x){ print(x) # This is NOT the global x print(y) # There's no y in the function scope, this is the global y } f("c") [1] "c" [1] "b" In the above example, x was defined inside the function f (it’s the name of the first argument), so the global x is ignored. However, y is not defined inside the function, so R uses the y from the global scope. In an earlier chapter, we briefly mentioned the assignment operators <<- and ->>, but didn’t say what made them special. It turns out, they are able to assign objects in the global scope from inside functions. You can test this by altering the simple_f function in a previous example (above) by replacing the command XYZ <- 2 with the command XYZ <<- 2 and observing the result. This assignment operator should almost never be used, as it can cause confusion and unpredictable behavior if used in a more complicated R program. When writing functions, it helps to start simple. It’s easy to make a complicated function, but when you try to put it into use and it doesn’t work, debugging the issue can be equally complicated. You may be familiar with “pointers” in other languages, and the difference between “pass by value” and “pass by reference”. In most ordinary circumstances with R, there is only pass by value. (No need to turn this in) When discussing Objects in a previous chapter, we mentioned that everything in R is an object, and every object has a mode and length. Pick an R function, or create your own function, and print its mode and length. Any feedback for this section? Click here "],["advanced-control-flow.html", "6.3 Advanced Control Flow", " 6.3 Advanced Control Flow In this section, we’ll discuss more ways to control the flow of your code. Specifically, we’ll talk about the apply family of functions, starting with sapply. To show what sapply does, let’s look at the following function: square_plus_one <- function(x){ return(x^2 + 1) } This function returns the result of squaring the input argument and adding 1. Suppose we wanted to run this function to every element of a vector. One option would be to write a for-loop: # The function we want to apply our function to x <- 1:10 # Create an empty vector to hold the result y <- numeric(10) # Loop through x and apply the function for(i in 1:10){ y[i] <- square_plus_one(x[i]) } y [1] 2 5 10 17 26 37 50 65 82 101 Here’s another way to do the same thing using the sapply function: # Apply the function square_plus_one to every element in x z <- sapply(x, square_plus_one) # z agrees with y! print(z == y) # z is a vector mode(z) [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE [1] "numeric" In words, the sapply function says “loop through every element of this vector, and apply this function to it.” All you have to specify is which vector to loop through, and which function to apply. The “s” in sapply stands for “simplify”, meaning the result will be simplified to a vector, matrix, or higher dimensional array. In some cases, you may want the result to be returned as a list, instead of a vector. In this case, the lapply function can be used: # Apply the function square_plus_one to every element in x w <- lapply(x, square_plus_one) # w is a list mode(w) [1] "list" lapply and sapply can also be used if the function doesn’t always return the same type or length of data. Here’s an example: make_vector <- function(n){ # Make a vector of length n numbered from 1 to n 1:n } # Apply make_vector to each element of x: x <- c(2, 2, 3, 1, 6) lapply(x, make_vector) [[1]] [1] 1 2 [[2]] [1] 1 2 [[3]] [1] 1 2 3 [[4]] [1] 1 [[5]] [1] 1 2 3 4 5 6 The differences between lapply and sapply (and other functions in the apply family) can be subtle and very confusing at times, even after reading the documentation using ?lapply, but here is one way they are different: x <- list(1, 2, 3) l <- lapply(x, square_plus_one) print(mode(l)) s <- sapply(x, square_plus_one) print(mode(s)) [1] "list" [1] "numeric" The input x started as a list, so the default return of lapply is a list. However, sapply simplified the result to a vector. If you know the type of data that will be returned, you can use the vapply function, which can be faster than sapply in some cases. ch <- vapply(x, square_plus_one, 1) Here we’ve supplied an extra argument (1) to tell R that the elements will be numeric types. The differences between lapply, sapply, and vapply are not easy to understand, especially because they give the same results sometimes. A simple yet imperfect rule is that sapply will work in most cases, but you can use lapply if you don’t want lists to be simplified, and use vapply if you know what type the result will be. 6.3.1 Applying Over Multiple Dimensions Suppose we want to find the variance of each row of a matrix. The lapply or sapply only work on each element of a matrix, not each row. For this, we need the apply function: m <- matrix(c(1, 1, 1, 1, 2, 3, 2, 4, 6), 3, 3, byrow = T) apply(m, 1, var) [1] 0 1 4 The arguments to this function are: m: The matrix to be iterated over 1: The axis to iterate over var: The function to apply over the axis 6.3.2 Applying Over Data Frame Groups Lastly, we’ll show how you can apply a function to each group specified by a grouping variable. Suppose we wanted to add the COVID deaths across all Age groups for each state. Then we could use the tapply function, with COVID.19.Deaths as the vector to iterate over, State as the grouping variable, and sum as the function to use. Here’s the result: state_deaths <- tapply(covid$COVID.19.Deaths, covid$State, sum, na.rm = T) sort(state_deaths) Alaska Hawaii Montana 0 0 0 Wyoming Puerto Rico Vermont 0 13 26 South Dakota North Dakota West Virginia 68 91 93 Idaho Maine Utah 107 107 183 Oregon Nebraska Kansas 232 270 302 Arkansas New Hampshire Oklahoma 332 367 398 New Mexico Delaware Nevada 502 503 567 District of Columbia Kentucky Tennessee 633 644 656 Iowa Wisconsin Rhode Island 762 810 912 South Carolina Missouri Mississippi 957 1001 1193 North Carolina Washington Alabama 1205 1223 1244 Minnesota Colorado Virginia 1469 1623 2062 Arizona Georgia Ohio 2430 2534 2686 Indiana Louisiana Maryland 2719 3082 3607 Texas Connecticut Florida 3693 4007 4331 Michigan Illinois California 5588 6637 7089 Pennsylvania Massachusetts New York 7216 7741 11238 New Jersey New York City United States 13806 20450 390745 Here we also had to specify the na.rm=T parameter so that NA values are removed when computing the sum. Remember that these totals may not match the All Ages number from each state, because some counts are suppressed. Here’s another example where we sum the deaths across all states for each Age group # Remove US total numbers first covid <- covid[covid$State != "United States",] agegroup_deaths <- tapply(covid$COVID.19.Deaths, covid$Age.group, sum, na.rm=T) sort(agegroup_deaths) 1-4 years 5-14 years Under 1 year 15-24 years 0 0 0 54 25-34 years 35-44 years 45-54 years 55-64 years 730 2246 6451 15821 65-74 years 75-84 years 85 years and over 27117 34351 42639 Remember that these totals may not match the United States values from the dataset because some counts are suppressed. Any feedback for this section? Click here "],["working-with-popular-packages.html", "6.4 Working With Popular Packages", " 6.4 Working With Popular Packages 6.4.1 What is a package? Up to this point in this book/course, we have really focused on using base R. By base, we simply mean the functions, data sets, and arguments that come pre-packaged with R. While this book has (hopefully) shown you just how much these basic functions can do, R can do so much more by relying on packages. Packages are an integral part of R programming, and you have been using them throughout this book and class. A package is a contained set of arguments, operations, data, and/or other tools that don’t come with R. In general these are built by the vast community of R users and they cover tools from making beautiful maps in R to doing financial time-series analyses to downloading and analyzing hydrology data (see Vignettes). In fact, you have been using packages this whole time. For example, In order to knit a document using RMarkdown, you have to have the RMarkdown package installed. On many (most?) projects, the most efficient way to complete whatever task you are doing is to spend at least some time checking out whether there is a package that makes it easier for you to do things like: Download data from the internet Perform statistical analyses Plot data Make maps Add interactivity to your R code (like zoomable maps or plots) And so much more! 6.4.2 How do I use packages? There are always at least two steps to using any package. Install the package using install.packages(). You only have to do this once. Load the package using library(). You have to do this every time you want to use the capabilities of that package, but only once per Script or once per RMarkdown document. Here is an example with an extremely common plotting package ggplot2 that has been mentioned in the course (and that you have probably already seen on the internet) install.packages('ggplot2') Now that we’ve installed the package, we can load it into R using library(). library('ggplot2') Now that we have installed the package, we will need to learn how to use it. Where can we go to for help? 6.4.3 Finding and using package help. All R packages installed with install.packages will come from the Comprehensive R Archive Network (“CRAN”). In order for you to work with them they have to have gone through a minimum overview, which ensures that they will at least have a minimum help page. So, for any package you want to read more about you can simply search for: CRAN <package name>. For ggplot2 this will lead you to this website. This site outlines many of the resources for using ggplot2, but they can be hard to find. The two most important places to look for help are the Reference manual and the URL. The reference manual will outline every function that the package can perform and how to use the functions. ggplot2 is a big package so it has tons of functions, which is why you might not want to only use the PDF, which can be hard to navigate. Luckily they made a website that is more clear and has far more examples here. 6.4.4 Making Beautiful Plots with ggplot2 Our package is now loaded, and we have a manual for reference so let’s use it! # Making up data for plotting dat <- data.frame( response = c(1, 5, 10, 30, 100, 300), driver = c(1, 2, 3, 4, 5, 6)) # Make a scatter plot with x and y ggplot(dat, aes(x = driver, y = response)) + geom_point() In the above command ggplot2 uses the data frame dat and the aesthetics (aes) argument to map which columns go where. In this case we want the driver variable to be on the x-axis and the response variable to be on the y-axis. Finally we want to use points to display this relationship between x and y (geom_point). Note: ggplot2 connects a series of arguments using + operator. This is unique to ggplot, but it’s a helpful way to make complex plots by combining simpler pieces. This can be difficult to get used to, but can be very powerful once you get the hang of it. Let’s add some lines to connect the points using the geom_line() command. ggplot(dat, aes(x = driver, y = response)) + geom_point() + geom_line() # Add lines to connect the points The geom prefix on the geom_point and geom_line functions stands for geometry. ggplot2 comes with many different types of geometries (see here ), and some folks have created their own packages to add even more options! We can also change the way the lines and points look with arguments in the geom_point and geom_line functions: ggplot(dat, aes(x = driver, y = response)) + geom_point(color = "blue") + # Make the points blue geom_line(linetype = "dashed", color = "blue") # Make the lines dashed and blue We can add a title and axis labels using the labs function: ggplot(dat, aes(x = driver, y = response)) + geom_point(color = "blue") + geom_line(linetype = "dashed", color = "blue") + labs(title = "Driver vs. Response", x = "Driver", y = "Response") # Add labels to the plot Finally, we can use one of the included ggplot2 themes to change how the plot looks, using the theme_set function: theme_set(theme_minimal()) # Change the theme ggplot(dat, aes(x = driver, y = response)) + geom_point(color = "blue") + geom_line(linetype = "dashed", color = "blue") + labs(title = "Driver vs. Response", x = "Driver", y = "Response") Here’s another example using the mtcars data frame, where we color the points based on their fuel economy (mpg) and annotate a few cars. mtcars$car <- row.names(mtcars) # Turn row names into a column so we can label with them ggplot(mtcars, aes(x = hp, y = disp, color = mpg, label = car)) + geom_point() + geom_text(color = "black", hjust = 0, nudge_x = 5, alpha = 0.8, size = 2) + # Annotate each car scale_color_viridis_c(option = "D") + # Change color scale to use labs(title = "Motor Trend Car Comparison", x = "Horsepower", y = "Displacement", color = "MPG") This is only scratching the surface of what ggplot2 can do, but hopefully this introduction is enough to hint at the possibilities. You can find many more examples at The R Graph Gallery. (No need to turn this in) Create a plot of wt vs. mpg using the mtcars data frame using ggplot2. Make the points green. 6.4.5 Organizing Your Data With dplyr As we saw, ggplot2 is a package intended to make nice looking visualizations in R easy. This is interesting, because R already has the capability to make plots, it’s just that ggplot2 is another way of making plots which many people think is more powerful. The same can be said about the next package we’ll discuss, dplyr (rhymes with “deep liar”), which is another way of manipulating data in R. We’ve spent a considerable amount of time on indexing, and you may have found the process somewhat confusing. Well, dplyr is another way of indexing data frames that many people find to be more intuitive. As always, you have to install dplyr if you haven’t already. install.packages("dplyr") # Install using quotes! Then whenever you’d like to use the package, you have to load it: library(dplyr) # Load without using quotes! Let’s look at some examples of base R indexing and compare that to how dplyr accomplishes the same task. In base R, to select columns matching a certain condition, you create a logical vector and use it to index rows of the data frame. index <- (mtcars$cyl == 4) & (mtcars$wt < 2) # Select only columns with 4 cylinders and a weight under 2 tons mtcars[index,] In dplyr, the same thing can be accomplished with the filter function: filter(mtcars, cyl == 4, wt < 2) # Select only columns with 4 cylinders and a weight under 2 tons This might already seem like an improvement, because it requires less code, but most people use the filter function differently than this. dplyr uses a pipe (which looks like this %>%) to structure arguments differently. Here’s how the same function looks with the pipe: # Do the same filtering, but use the pipe, %>% mtcars %>% filter(cyl == 4, wt < 2) Basically, the pipe operator says “Take the thing on the left and use it as the first argument for the function on the right”. This may seem backwards at first, but it allows the chaining of multiple functions together in an order that reflects the order of computation that R will use (more on this after the next example). Recall that here’s how we select a column in base R: mtcars[,"qsec"] # Select the qsec column [1] 16.46 17.02 18.61 19.44 17.02 20.22 15.84 20.00 22.90 18.30 18.90 17.40 [13] 17.60 18.00 17.98 17.82 17.42 19.47 18.52 19.90 20.01 16.87 17.30 15.41 [25] 17.05 18.90 16.70 16.90 14.50 15.50 14.60 18.60 And here’s how to do the same thing in dplyr: mtcars %>% select(qsec) Notice that dplyr has maintained the data frame structure, while indexing has not. We can get the same thing from indexing if we use the drop = F argument: mtcars[,"qsec", drop = F] The pipe works with the select function because the first argument of select is the data frame to select from, so the pipe says “Use mtcars as the first argument of the select function”. Here’s how we would do the filtering and selection at the same time in dplyr: mtcars %>% filter(cyl == 4, wt < 2) %>% select(qsec) Since the result of the filter function is a data frame (which is why it printed in the result in the example above!), that data frame can be piped into the select function. This easy chaining of arguments is one reason why people love to work with tidyverse packages. The pipe operator is one of the most common elements of the tidyverse group of packages. One of the tidyverse packages called magrittr even uses the pipe operator as its official logo, with the slogan “Ceci n’est pas un pipe”, a reference to this famous work of art. dplyr can also summarize columns in different groups similarly to the tapply function. Here’s an example of tapply: # Find the mean mpg for different numbers of cylinders: tapply(mtcars$mpg, mtcars$cyl, mean) 4 6 8 26.66364 19.74286 15.10000 In dplyr this is accomplished with the group_by and summarize functions: mtcars %>% group_by(cyl) %>% summarize(ave_mpg = mean(mpg)) With only a few functions, we can now start to chain together quite complex operations in a human readable way: mtcars %>% filter(wt > 2) %>% # Filter out cars below 2 tons group_by(cyl, gear) %>% # Group by number of cylinders and number of gears summarize(n = n(), # Compute number of cars in each group ave_mpg = mean(mpg), # Compute average mpg sd_mpg = sd(mpg)) # Compute standard deviation of mpg `summarise()` has grouped output by 'cyl'. You can override using the `.groups` argument. Again, this is only a teaser of the capabilities of dplyr, but the hope is that if/when you encounter dplyr in the future, you will at least have an introduction to some of the basic concepts. 6.4.6 Working With Character Strings with stringr stringr is another tidyverse package that provides functions for easily working with character strings. # install.packages("stringr") # Install if you haven't before library(stringr) To show some of the capabilities of the stringr package, we’ll read in “Pride and Prejudice” which is available on Project Gutenberg here. lines <- readLines(file("data_raw/pride_and_prejudice.txt", "rt")) length(lines) # The book is now a long character vector [1] 14594 The first thing we’ll do is convert the text into “UTF-8” formatting using stringr’s str_conv function: lines <- str_conv(lines, "UTF-8") Right now, each element of lines is just a single line from the original text file. Let’s collapse all the elements into a single character string: book <- str_c(lines, collapse=" ") nchar(book) [1] 775739 Now we can split the book in a more sensible way. Let’s split the string at the end of each sentence using the strsplit function (this is a base R function, actually). sent <- strsplit(book, "(?<=[[:punct:]])\\\\s(?=[A-Z])", perl = T) # Split by end of sentences sent <- unlist(sent) # Convert list to character vector length(sent) [1] 5175 The strsplit function above used something called a regular expression to identify patterns that indicate the end of a sentence. Regular expressions are commonly used in programming, and can be confusing when first encountered. This is okay! You might want to take a look at this resource if you want more info on regular expressions in R. The sent vector now contains sentences as elements. Let’s look at an arbitrary sentence: sent[300] [1] "I should think she had as good a chance of happiness as if she were to be studying his character for a twelvemonth." We notice that there are some extra spaces in the sentence, which probably result from the formatting of the original text file. Ignoring that for now, we can find all sentences containing the word “Jane”: has_jane <- str_detect(sent, "Jane") # Returns logical vector sum(has_jane) [1] 265 We see there are 265 sentences with the string “Jane” in them. Let’s look at some of them: jane_sent <- sent[has_jane] jane_sent[100:105] [1] "She could think of nothing else; and yet whether Bingley’s regard had really died away, or were suppressed by his friends’ interference; whether he had been aware of Jane’s attachment, or whether it had escaped his observation; whatever were the case, though her opinion of him must be materially affected by the difference, her sister’s situation remained the same, her peace equally wounded. A day or two passed before Jane had courage to speak of her feelings to Elizabeth; but at last, on Mrs." [2] "It cannot last long. He will be forgot, and we shall all be as we were before.” Elizabeth looked at her sister with incredulous solicitude, but said nothing. “You doubt me,” cried Jane, slightly colouring; “indeed, you have no reason." [3] "A little time, therefore—I shall certainly try to get the better.” With a stronger voice she soon added, “I have this comfort immediately, that it has not been more than an error of fancy on my side, and that it has done no harm to anyone but myself.” “My dear Jane!” exclaimed Elizabeth, “you are too good." [4] "My dear Jane," [5] "You shall not, for the sake of one individual, change the meaning of principle and integrity, nor endeavour to persuade yourself or me, that selfishness is prudence, and insensibility of danger security for happiness.” “I must think your language too strong in speaking of both,” replied Jane; “and I hope you will be convinced of it by seeing them happy together." [6] "They may wish many things besides his happiness; they may wish his increase of wealth and consequence; they may wish him to marry a girl who has all the importance of money, great connections, and pride.” “Beyond a doubt, they do wish him to choose Miss Darcy,” replied Jane; “but this may be from better feelings than you are supposing." We can also count the number of occurrences of a string in the book using the str_count function: str_count(book, "pride") [1] 46 str_count(book, "prejudice") [1] 8 To see more capability of the stringr package, you can check out this cheat sheet. Any feedback for this section? Click here "],["404.html", "Page not found", " Page not found The page you requested cannot be found (perhaps it was moved or renamed). You may want to try searching to find the page's new location, or use the table of contents to find the page you are looking for. "]] +[["index.html", "R Module 1 Chapter 1 Welcome!", " R Module 1 Alex Fout1 Lane Drew2 13 Jun, 2024, 10:33 AM Chapter 1 Welcome! Hi, and welcome to the R Module 1 (AKA STAT 158) course at Colorado State University! This course is the first of three 1 credit courses intended to introduce the R programming language to those with little or no programming experience. Through these Modules (courses), we’ll explore how R can be used to do the following: Perform basic computations and logic, just like any other programming language Load, clean, analyze, and visualize data Run scripts Create reproducible reports so you can explain your work in a narrative form In addition, you’ll also be exposed to some aspects of the broader R community, including: R as free, open source software The free RStudio IDE Publicly available packages which extend the capability of R Events and community groups which advocate for the use of R and the support of R users More detail will be provided in the Course Topics laid out in the next chapter. 1.0.1 How To Navigate This Book To move quickly to different portions of the book, click on the appropriate chapter or section in the the table of contents on the left. The buttons at the top of the page allow you to show/hide the table of contents, search the book, change font settings, download a pdf or ebook copy of this book, or get hints on various sections of the book. The faint left and right arrows at the sides of each page (or bottom of the page if it’s narrow enough) allow you to step to the next/previous section. Here’s what they look like: Figure 1.1: Left and right navigation arrows Department of Statistics, Colorado State University, fout@colostate.edu↩︎ Department of Statistics, Colorado State University, lane.drew@colostate.edu↩︎ "],["associated-csu-course.html", "1.1 Associated CSU Course", " 1.1 Associated CSU Course This bookdown book is intended to accompany the associated course at Colorado State University, but the curriculum is free for anyone to access and use. If you’re reading the PDF or EPUB version of this book, you can find the “live” version at https://csu-r.github.io/Module1/, and all of the source files for this book can be found at https://github.com/CSU-R/Module1. If you’re not taking the CSU course, you will periodically encounter instructions and references which are not relevant to you. For example, we will make reference to the Canvas website, which only CSU students enrolled in the course have access to. "],["prelim.html", "Chapter 2 Course Preliminaries", " Chapter 2 Course Preliminaries “Learning to code is useful no matter what your career ambitions are.” —Arianna Huffington, Founder, The Huffington Post In this chapter, we’ll discuss the preliminary details of the course. Then you’ll run some R code and learn more about R and the R community. "],["this-textbook.html", "2.1 This Textbook", " 2.1 This Textbook This course is presented as a bookdown document, and is divided into chapters and sections. Each week, you’ll be expected to read through the chapter and complete any associated exercises, quizzes, or assignments. 2.1.1 Special Boxes Throughout the book, you’ll encounter special boxes, each with a special meaning. Here is an example of each type of box: This box will prompt you to pause and reflect on your experience and/or learning. No feedback will be given, but this may be graded on completion. This box will signify a quiz or assignment which you will turn in for grading, on which the instructor will provide feedback. This box is for checking your understanding, to make sure you are ready for what follows. This box is for displaying/linking to videos in order to help illustrate or communicate concepts. This box will warn you of possible problems or pitfalls you may encounter! This box is to provide material going beyond the main course content, or material which will be revisited later in more depth. This box will prompt for your feedback on the organization of the course, so we can improve the material for everyone! Any of the boxes may include hyperlinks like this: I am a link or code like this This is code. 2.1.2 How This Book Displays Code In addition, you may see R code either as part of a sentence like this: 1+1, or as a separate block like so: 1+1 [1] 2 Sometimes (as in this example) we will also show the output (in yellow), that is, the result of running the R code. In this case the code 1+1 produced the output 2. If you hover over a code block with your mouse, you will see the option to copy the code to your clipboard, like this: Figure 2.1: copying code from this book This will be useful when you are asked to run code on your computer. 2.1.3 Next Steps When you’re ready, go to the next section to learn about the course syllabus and grading policies. Any feedback for this section? Click here "],["course-topics-syllabus.html", "2.2 Course Topics & Syllabus", " 2.2 Course Topics & Syllabus Broadly speaking, the topics of this course are described by the Chapter Titles. Here’s what each entails: Course Preliminaries: Introduction to R and the world of R Installing R: Like it sounds, setting up your computer so you can work with R. R Programming Fundamentals: The basics of programming in R, the building blocks that you need in order to do anything more interesting. Working with Data: How to do meaningful things with data sets. Probably the most useful Chapter of the book. Creating R Programs: More programming concepts to increase your R Power! 2.2.1 Syllabus First, some important details: Instructor: Lane Drew Office Hours: Schedule and location TBA. Webpages: Canvas, this textbook Course Credits: 1. This means ~1 hours of lecture and 4 hours of work outside of lecture per week. Textbook: You’re reading it right now. The textbook will be your primary learning resource. You’ll be expected to read through the required sections, watch any relevant videos, and complete any reflections, progress checks, and assessments along the way. On days when a quiz is due, you should complete the reading before you take the quiz. Prerequisites: None Assignments/What-to-turn-in: This course will be graded on three types of assignments: Progress Checks, Homeworks, and Quizzes. There will be four of each. Most weeks, you will have one of these three types of assignments due. Due dates will be specified on Canvas and assignments will be due at 11:59pm on the indicated day (please see schedule below). Progress Checks: As you work your way through the textbook, you’ll encounter purple “Progress Check” boxes. For the first Progress Check, you’ll submit your responses directly to Canvas. For Progress Checks 2-4, you’ll fill in an R Markdown document and submit it to canvas. You’ll be provided a template to fill in as you complete the progress checks. To turn in the document, you’ll knit the document to HTML or PDF and upload to Canvas. (More details coming later in the book!). Progress checks will be graded on completion, organization, and correctness. Progress Checks must be turned in by 11:59pm (Mountain) on the day they are due. Half credit will be given for a two-day window after the due date, after which no credit will be possible. Homework: There are four homeworks during the semester. You’ll complete each homework using R. Homeworks must be turned in by 11:59pm (Mountain) on the day they are due. Half credit will be given for a two-day window after the due date, after which no credit will be possible. Quizzes: There will be four 15 minute Canvas quizzes during the semester. Quizzes must be completed by 11:59pm (Mountain) on the day they are due. There are NO late quizzes accepted after the due date has passed. If you cannot complete the quiz on the day it is due, you are expected to do it early. Exams: There will be no exams in this course Lectures: Lectures will be held on Fridays. There will be mini-lectures, approximately 10-30 minutes. The mini-lectures will be based on previously read material, no new material will be presented. Students are expected to have read the material before the lecture. The remainder of the time will be student-led. We will cover questions students may have or work on homework together. Grading: The grading for the course is apportioned like so: Progress Checks: 30% Homework: 40% Quizzes: 30% 2.2.2 Assignment Templates In order to complete the progress checks and course assignments, you’ll need to start from these templates: Progress Checks (Progress Check 1 will not require a template) Progress Check 2 Progress Check 3 Progress Check 4 Assignments Homework 1 Homework 2 Homework 3 Homework 4 2.2.3 Course Policies Late Work: Homework and Progress Checks must be turned in on time to receive full credit. You may turn in Homework and Progress Checks up to 2 days late for up to 50% credit. Group Work: Students are welcome to discuss the course with each other, but all work you turn in must be your own. This means no sharing solutions to homework, progress checks, or quizzes. You may not work with other students on quizzes. You are welcome to seek help on Canvas discussion boards and during office hours. Students with Disabilities: The university is committed to providing support for students with disabilities. If you have an accommodation plan, please provide that to me as soon as possible so we can discuss appropriate arrangements. Growth Mindset: This phrase was coined by Carol Dweck to reflect how your learning outcomes can be affected by the way you view the learning process. To quote Dweck: “The view you adopt for yourself profoundly affects the way you lead your life… Believing that your qualities are carved in stone - the fixed mindset - creates an urgency to prove yourself over and over. If you have only a certain amount of intelligence, a certain personality, and a certain moral character — well, then you’d better prove that you have a healthy dose of them. It simply wouldn’t do to look or feel deficient in these most basic characteristics… There’s another mindset in which these traits are not simply a hand you’re dealt and have to live with, always trying to convince yourself and others that you have a royal flush when you’re secretly worried it’s a pair of tens. In this mindset, the hand you’re dealt is just the starting point for development. This growth mindset is based on the belief that your basic qualities are things you can cultivate through your efforts. Although people may differ in every which way — in their initial talents and aptitudes, interests, or temperaments — everyone can change and grow through application and experience.” Programming may be a very new, intimidating thing for you. That’s okay! View this course as a way to grow and gain new skills which you can use to do incredible and important things! Learn by doing: A wise statistics instructor once compared watching someone else solve statistics problems to watching someone else practice shooting basketball free throws. You may learn a little by watching, but at some point you won’t get any better until you try it yourself! The same can be said for programming. Reading a textbook and watching videos are a good start, but you’ll have to actually program in order to get any better! This textbook was designed to be interactive, and I encourage you to “code along with the book” as you read. 2.2.4 Grading Scale Grades will be assigned according to the following scale: Class.Score Letter.Grade 92%-100% A 90%-92% A- 88%-90% B+ 82%-88% B 80%-82% B- 78%-80% C+ 70%-78% C 60%-70% D 0%-60% F Any feedback for this section? Click here "],["running-your-first-r-code.html", "2.3 Running your first R Code", " 2.3 Running your first R Code Enough of the boring stuff, let’s run some R code! Normally you will run R on your computer, but since you may not have R installed yet, let’s run some R code using a website first. As you run code, you’ll see some of the things R can do. In a browser, navigate to rdrr.io/snippets, where you’ll see a box that looks like this: Figure 2.2: rdrr code entry box The box comes with some code entered already, but we want to use our own code instead, so delete all the text, from before library(ggplot2) to after factor(cyl)). In its place, type 1+1, then click the big green “Run” button. You should see the [1] 2 displayed below. So if you give R a math expression, it will evaluate it and give the result. Note: the “correct answer” to \\(1+1\\) is 2, but the output also displays [1], which we won’t explain until later, so you can ignore that for now. Next, delete the code you just wrote and type (or copy/paste) the following, and run it: factorial(10) The result should be a very large number, which is equivalent to \\(10!\\), that is, \\(10\\times9\\times8\\times7\\times6\\times5\\times4\\times3\\times2\\times1\\). This is an example of an R function, which we will discuss more later. Aside from math, R can produce plots. Try copy/pasting the following code into the website: x <- -10:10 plot(x, x^2) You should see points in a scatter plot which follow a parabola. Here’s a more complicated example, which you should copy/paste into the website and run: library(ggplot2) theme_set(theme_bw()) ggplot(mtcars, aes(y = mpg, fill = as.factor(cyl))) + geom_boxplot() + labs(title = "Engine Fuel Efficiency vs. Number of Cylinders", y = "MPG", fill = "Cylinders") + theme(legend.position = "bottom", axis.ticks.x = element_blank(), axis.text.x = element_blank()) R can be used to make many types of visualizations, which you will do more of later. This may be the first time you’ve seen R, so it’s okay if you don’t understand how to read this code. We’ll talk more later about what each statement is doing, but for now, here is a brief description of some of the code above: -10:10 This creates a sequence of numbers starting from -10 and ending at 10. That is, \\(-10, -9, -8, \\ldots, 8, 9, 10\\). library This is a function which loads an R package. R packages provide extra abilities to R. Any feedback for this section? Click here "],["getoutoftheclass.html", "2.4 What do you hope to get out of this course?", " 2.4 What do you hope to get out of this course? To close out this chapter, it would be healthy for you to reflect on what you’d like to get from this course. Take some time to think through each question below, and write down your answers. It is fine if your honest answer is I don’t know. In that case, try to come up with some possible answers that might be true. Why are you taking this course? If this course is required for your major, how do you think it is supposed to benefit you in your studies? What types of data sets related to your field of study may require data analysis? What skills do you hope to develop in this course, and how might they be applied in your major and career? Submit your answers to the above reflection to Canvas. This will be your Progress Check 1. Store your answers in a safe place, and refer to them periodically as you progress through the course. You may find that you aren’t achieving your goals and that some adjustment to how you are approaching the course may be necessary. Or you may find that your goals have changed, which is fine! Just update your goals so that you have something to refer back to. Any feedback for this section? Click here "],["what-is-r.html", "2.5 What is R?", " 2.5 What is R? What is R? This question can be answered several different ways. Here are a few of them: 2.5.1 R is a Programming Language A programming language is a way of providing instructions to a computer. Some popular languages (in no particular order) are C, C++, Java, Python, PHP, Visual Basic, and Swift. Much like other types of languages, programming languages combine text and punctuation (syntax) to create statements which provide meaningful instructions (semantics) to be performed by a computer. These instructions are called “code”. R code can be used to do many things, but primarily R was designed to easily work with data and produce graphics. The R language can be used to get a computer to do the following: Read and process a set of data in a file or database Use data to compute statistics and perform statistical tests Produce nice looking visualizations of data Save data for others to use. But this list is just the tip of the iceberg. As you will see, R can be used to do so much more! After the instructions are written, the R code is run, that is, the code is provided to the computer, and the computer performs the instructions to produce the desired results. Many other programming languages use different syntax for the same purpose. # comments out a line in R and python % comments out a line in matlab // comments out a line in C++ and javascript Similar to learning a foreign language, learning your first programming language will make it easier to understand other similar ones. 2.5.2 R is software R can also be thought of as the software program which runs R code. In other words, if R code is the computer language, then the R software is what interprets the language and makes the computer follow the instructions laid out in the code. This is sometimes called “base R”. 2.5.3 R is Free The R software is free, so anyone can download R, write R code, and run the R code in order to produce results on their computer. 2.5.4 R is Open Source The R software, which runs R code, is also made up of a bunch of code called source code. In addition to being free, R is also open source, meaning that anyone can look at the source code and understand the “deep-down nuts-and-bolts” of how R works. In addition, anyone is able to contribute to R, in order to improve it and add new features to it. What are the advantages of open-source software? What are some potential downsides? Why do you think the creators of R decided to make it open source? 2.5.5 R is an ecosystem Another way of thinking about R is to include not only the R language and the R software, but also the community of R users and programmers, and the various “add on” software they have created for R. These add on software are called “packages”. 2.5.6 R Packages An R package is software written to extend the capabilities of base R. R packages are often written in R code, so anyone who knows how to write R code can also create R packages. The importance of packages cannot be understated. One of the reasons for the incredible popularity of R is the fact that members from the community can write new packages which enable R to do more. Sometimes packages are written to help folks in particular disciplines (e.g. psychology, geosciences, microbiology, education) do their jobs better. Other times, packages are written to extend the capability of R so that people from many disciplines can use them. R can be used to make web sites, interactive applications, dynamic reproducible reports, and even textbooks (like this one!). The inclusion of R packages, combined with the free and open source nature of R software, has led to the development of an active, diverse, and supportive community of R users who can easily share their code, data, and results with one another. skimr is one example of a package. It provides a frictionless approach to summary statistics which conforms to the principle of least surprise, displaying summary statistics the user can skim quickly to understand their data. 2.5.7 R Interfaces The R software can be run in many different places, including personal computers, remote servers, and websites (as you have seen!). R works on Windows, macOS, and Linux, and R can be run using a terminal or command line (if you know what those are), or using a graphical user interface (with buttons you can click and such). By far one of the most popular ways of using R is with RStudio, which is also free and open source software. For this course, you’ll be using RStudio. Any feedback for this section? Click here "],["the-r-community.html", "2.6 The R Community", " 2.6 The R Community We already mentioned that there is an active community of R users around the world, ranging from novice to expert level. Here is a partial list of venues where R users interact (aside from the official websites, none of these links should be considered an official endorsement): R Project: The official website for R. R Project Mailing Lists: Various email lists to stay informed on R related activities. The R-announce list is a good starting point, which will keep you updated on the latest releases of the R software. Twitter #rstats: Many R Users are active on Twitter and you can find them. Tidy Tuesday is a weekly online project that focuses on understanding how to summarize, arrange, and make meaningful charts with open source data. You can see the projects others have done by following #tidytuesday on twitter. R-Ladies is a global group dedicated to promoting gender equality in the R community. They have an elaborate list of resources for learning and host educational and networking events. R-Podcast: A periodic podcast with practical advice for using R, and the latest R news. R-Bloggers: A blog website where authors can post examples of code, data analysis, and visualization. 2.6.1 Places to Get Help (If you’re a student taking this class for credit) Students taking the course for credit should seek help from these places, in order: Canvas Discussion boards Office Hours I will not answer homework/quiz/textbook related questions via email. 2.6.2 Places to Get Help (anyone) If you find yourself stuck, there are many options available to you, here are a few: Stack Overflow is a message board where users can post questions about issues they’re having. If you search for your error, there’s likely already an answered question about it. If not, you can submit one with a reproducible example that the active community can help you with. R Manuals: With so many R resources available on the internet, sometimes information gets “boiled down” or simplified for ease of communication. If you need the “official answer” to a question, these manuals are the place to go. Check out “An Introduction to R” for a good reference. Any feedback for this section? Click here "],["installing-r.html", "Chapter 3 Installing R", " Chapter 3 Installing R “Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” - Martin Fowler In the previous chapter, you ran R code on a website. The purpose of this chapter is to install R on your own computer, so that you can run R without needing access to the internet. "],["computer-basics.html", "3.1 Computer Basics", " 3.1 Computer Basics If you’re new to computers, this section will be important for you to get set up. We’ll briefly introduce some computer concepts and discuss how they’re relevant to R. If you understand the basics of operating systems, directory structures on your computer, and downloading/installing files, then you can probably skim this section, but be sure to pay attention to the R-specific information. 3.1.1 Operating Systems An operating system is a set of programs that allow you to interact with the computer, and the most popular operating systems are Windows, macOS, and Linux. R works on Windows, macOS, and several Linux-based operating systems, so if you have one of these operating systems, you’ll be able install and use R. At least, this is mostly true: Some versions of Windows that run on ARM processors cannot install R, and installing R on a Chromebook will likely be more complicated (see here). If you’re in this situation, contact the instructor immediately. R isn’t designed to work on tablets or phones which run mobile/tablet operating systems (like iOS, iPadOS, Android, ChromeOS), so these are not an option for R. 3.1.2 Files & Directory Structures A file is a collection of data stored on your computer’s hard drive. Examples of files include: A music file A video A slide presentation A text document Different types of files are often treated differently by your computer. For example, a music file is played with a music player program, a video can be viewed with a video player, and a slide presentation might be viewed with Powerpoint. Most operating systems know the type of a file by looking at the extension, which is at the very end of the file’s name. Examples include “.mp3”, “.doc”, “.txt”, and “.ppt”. When using R, we can write scripts which contain R code, and R Markdown documents, which include human readable text and code. R scripts usually have either a “.R” or “.r” extension, and we’ll also be using R Markdown, which use either a “.Rmd” or “.rmd” extension. A directory, or folder, is a collection of files, and computers use directories to logically organize sets of files. When working with R, you may have to organize several different types of files, including R code, data files, and images. It will be important to stay organized when using R, and we will address this more later in the chapter. With the increasing prevalence of the internet in everyday life, it’s becoming less common for files to exist on your computer. When writing R code, you’ll be working with files on your computer, not accessing them over the internet. 3.1.3 Downloads and Installations To install R, you’ll have to download a file from the internet which performs the installation. After you install R, you shouldn’t have to download anything to run R. The specific steps to install R will be different depending on your operating system, and this will be addressed in the next section. Any feedback for this section? Click here "],["install-r-r-studio.html", "3.2 Install R & R Studio", " 3.2 Install R & R Studio Here’s where you install R on your personal computer, but you’ll actually be installing two separate programs. The first is the R programming language. The second is a separate program called RStudio, which will be the primary way in which you interact with R in this class, we will say more about this later. 3.2.1 Installing R Installation will look slightly different depending on the operating system, but the major steps are the same. First, navigate to the CRAN Mirrors Site, which lists several locations from which R can be downloaded. Find a location near you (or not, this isn’t critical) and click on the link to be brought to the mirror site. From this point, this will change depending on your operating system. 3.2.1.1 Windows Click “Download R for Windows”, then click “base”. Finally, Click “Download R X.Y.Z for Windows”, where X, Y, and Z will be numbers. These numbers indicate which version of R you’ll be installing. As of the publishing of this book, R is on version 4.4.0. Your computer might prompt for the location on your computer that you would like to save the file. Select a location (reasonable options are your Downloads folder or the Desktop) and select “save”. When the download completes, find the downloaded file in the File Explorer and double click to run it. This will start the installation process. Follow the on screen prompts. For the most part you can click “next” and “install” as appropriate, and you don’t have to worry about changing any installation settings. Click “Finish” to complete the installation! This video shows the installation process for Windows. https://www.youtube.com/embed/7ZYn6q_pboE 3.2.1.2 macOS Click “Download R for macOS” Click “R-X.Y.Z.pkg”, where X, Y, and Z will be numbers. These numbers indicate which version of R you’ll be installing. As of the publishing of this book, R is on version 4.4.0. Your computer might prompt for the location on your computer that you would like to save the file. Select a location and select “save”. When the download completes, find the downloaded file in the Finder and double click to run it. This will start the installation process. Follow the on screen prompts. For the most part you can click “continue”, “agree”, “install”, as appropriate, and you don’t have to worry about changing any installation settings. Click “Close” to complete the installation! 3.2.1.3 Linux We will not provide details on installing R for Linux, because the process varies depending on your distribution, and because if you’re using Linux, chances are you’re more computer proficient than the average user. Suffice it to say, The first step is: Click “Download R for Linux” And you can probably figure things out from there. 3.2.1.4 Conclusion You should now have R installed! Technically speaking, nothing further is required to work with R. You can open the RGui, and start coding immediately. However, for this course we will be using RStudio, which is a very popular program with an incredibly rich set of features, which will enhance your R programming experience. 3.2.2 Installing RStudio Navigate to the RStudio Download Page, and find the download file that matches your operating system. Click the link to download the installer, which starts with “RStudio-” or “rstudio-”. Your computer might prompt for the location on your computer that you would like to save the file. Select a location (reasonable options are your Downloads folder or the Desktop) and select “save”. When the download completes, find the downloaded file and double click to run it. This will start the installation process. From this point, this will change depending on your operating system. 3.2.2.1 Windows Follow the on screen prompts. For the most part you can click “next” and “install” as appropriate, and you don’t have to worry about changing any installation settings. You should now be able to open the start menu, open the RStudio folder, and click on the RStudio icon to open RStudio This video shows the installation process for Windows. https://youtu.be/XnqENdiEb3I 3.2.2.2 macOS In the window which opens, drag the RStudio icon into the “Applications” folder. You may need to enter your password (click the “Authenticate” button) in order to do so. You should now be able to navigate to the Applications folder in Finder, and click on the RStudio icon to open RStudio. 3.2.2.3 Conclusion Rstudio also offers a cloud service that allows you to work with R in your browser. We’ll use the desktop version but you can check out the interactive primers on the cloud site. Any feedback for this section? Click here "],["successfull-installation.html", "3.3 Successfull Installation", " 3.3 Successfull Installation When you successfully install R and RStudio, you should now be able to program in R! Before moving further, you should become acquainted with the different parts of RStudio. To do so, watch the video below: This video gives an introduction to some of the main pieces of RStudio. https://youtu.be/w_3xp_3Sz6s Any feedback for this section? Click here "],["running-code-in-rstudio.html", "3.4 Running Code in RStudio", " 3.4 Running Code in RStudio Now that you’re somewhat familiar with RStudio, let’s run the same code as we ran on the website, but this time let’s run it in R. 3.4.1 The R Console: In the R console, type 1+1 and press enter. The output in the console should look like the following: Figure 3.1: code in the console Notice that the output 2 is displayed, and the cursor is on a blank line, waiting for more input. This is how coding in the console works. 3.4.2 R scripts Now let’s run the same code, but in an R script. If you haven’t already, create a new R script by clicking on the New File icon, then selecting R Script like so: Figure 3.2: Click this button to create a new file In the script window which opens, type 1+1 and press enter. Notice how now, the code did not run? In a script, you are free to write R code on several lines before you run it. You can even save the script and load it later in order to run the code it contains. There are multiple ways to run R code in a script. To run a single line of code, do one of the following: Place the cursor on the desired line, hold the <control> key, and press enter. On macOS, hold <command> key and press return instead Place the cursor on the desired line and click the Run button that looks like this: Figure 3.3: code in the console To run multiple lines of code, do one of the following: Highlight all the code you’d like to run, hold the <control> key, and press enter. On macOS, hold the <command> key and press return instead. Highlight all the code you’d like to run, and click the Run button. Run the 1+1 code using one of the methods above, and observe the output. Notice how the output is still in the console window, even though you ran the code in a script! Even though running R code from the console and an R script are done differently, they should produce the same results. Both are running R! Now that you’ve run some code in the console and from an R script, let’s try some of the other code we ran previously. 3.4.3 Same Examples, On Your Computer! In the console, type the command factorial(10). Did you get the same result as you got on the website? Now type the following two lines in an R script and run them: x <- -10:10 plot(x, x^2) This code produces a plot, which should show up in the lower right corner in the “Plots” window. Finally, copy the following code, paste it into your script, and run it: install.packages("ggplot2") library(ggplot2) theme_set(theme_bw()) ggplot(mtcars, aes(y = mpg, fill = as.factor(cyl))) + geom_boxplot() + labs(title = "Engine Fuel Efficiency vs. Number of Cylinders", y = "MPG", fill = "Cylinders") + theme(legend.position = "bottom", axis.ticks.x = element_blank(), axis.text.x = element_blank()) You’re now running R code on your computer! The above code block includes a command to install an R package! ggplot2 is a very popular plotting package that can create sophisticated and (arguably) aesthetically pleasing graphs. Imagine you are practicing programming in R and your classmate tells you they heard about an interesting new R command which they’d like you to try out. Would you run the command in an R script, or the R console? How might your answer change if you wanted to keep a record of all the interesting R commands you found? 3.4.4 R Markdown You’ve seen how to run R code in the R console, and from an R script, but there’s one more way to run R that we need to talk about: R Markdown. R scripts are convenient because they can store multiple R commands in one file. R Markdown takes this idea further and stores code alongside human readable text. There is much that could be said about R Markdown, but for now, we’ll just stick with the basics. To start, watch this video: This video gives a basic introduction to R Markdown. https://youtu.be/MhvipLohEfU As the video stated, there are three types of sections to an R Markdown document: Header Human readable text Code chunks There’s only one header, but there can be many blocks of human readable text and many code chunks. See here for more things you can do with R Markdown. As part of this class, you’ll be filling in an R Markdown document as you complete the progress checks in the book (except for the first progress check box, which you completed already) Download the progress check 2 template into your scripts folder, and follow the instructions. That document should include all progress checks from Section 3.4 through (and including) Section 4.3 The next box should be the first code chunk you will include in the document! Run the command 8 / (2 * (2 + 2)) and observe the output! This video should help get you started with the Progress Check Assignments! https://youtu.be/QLXB4kPngqM Any feedback for this section? Click here "],["workspace-setup.html", "3.5 Workspace setup", " 3.5 Workspace setup Whenever you are programming in R, and especially for this class, it’s important to stay organized. This section will give you some instructions and tips for how to organize material for this R course. 3.5.1 Recommended Settings First of all, let’s set some settings in RStudio. At the top of the R window, click Tools, then Global Options, and do the following: On the left side of the window that pops up, make sure it’s on the “General” tab Find the “Workspace” section on the right, make the following changes: uncheck “Restore .RData into workspace on startup” Change the “Save workspace to .RData on exit” option to never On the left side, select the “R Markdown” tab and make the following change: Change the “Evaluate chunks in directory” option to Project. You may need to install the rmarkdown package to populate this option. Run the line install.packages(\"rmarkdown\") and restart RStudio (you can ignore the prompt to install RTools on Windows). (Optional) On the left side, select the “Appearance” tab and make the changes: (Optional) Change the “Zoom:” setting to increase or decrease the interface text size to fit your screen best. (Optional) Change the “Editor theme:” setting to find a color scheme that looks good to you. Click “Apply”, then “OK” at the bottom of the window. Step 2 ensures that each time you open RStudio, there’s no “memory” of anything you may have been doing in R previously. This is a good option for R beginners to avoid confusion and mistakes. Step 3 ensures that when you knit R Markdown documents, code chunks will use the project directory as the working directory (more on working directories below). Changing the zoom can also be done using the shortcuts <control> <shift> + (to increase size) and <control> - (to decrease size). On macOS, the commands are <command> <shift> + and <command> -. 3.5.2 Setting working directory Every time R runs, it has a working directory, which is the folder where R “looks” when loading and saving files. In RStudio, the Files window contains the “More” menu, which has options to set as working directory or go to working directory. This will become more relevant when you start loading data and saving results later in the course. For this course, you’ll be using an RStudio project, which automatically sets the working directory. See here for more information about working directories. 3.5.3 Create RStudio Project and directories for class RStudio also has a feature called projects, which is a way of compartmentalizing your R code. This makes it easy to switch between different projects. For this class, you should set up a new project, so all of your project related files are in one place. 3.5.3.1 Create RStudio Project To create an RStudio project, follow these steps: Click on the “Project” button at the top right of the RStudio window and select “New Project”. Figure 3.4: Click this button to create a new project In the window that pops up, click on “New Directory” then “New Project”. In the box after “Directory name”, type “RModule1”, which will be the name of the project. Then click the “Browse” button to select where to place the project. You are free to choose any location on your computer that makes sense to you. It might be most convenient to place it on your desktop for now. Click on “Create Project”. You should now be in your newly created project. If you look at the Files window in the lower right pane of RStudio, you should see the files in your new project directory, which should only be one file, called “RModule1.rproj”. This file is the project file, which tells RStudio that this directory contains an R Project. When you’re working on this course, you should be working in this project. The easiest way to open up the project is to use your operating system’s file explorer and click on the project file. This will automatically set the working directory to the project directory. 3.5.3.2 Create Directory Structure To stay organized, you should also create the following folders inside your project directory scripts data_raw data_clean output You can create these either using your operating system, or the “New Folder” command in the file window within RStudio. 3.5.3.3 Video Check out this video to watch me set up a project and the new directories. https://youtu.be/0saBBd6lQDI 3.5.3.4 Set 3.5.4 Some useful commands you should know As you program in R, you’ll end up creating many different R objects (more on this later), and sometimes you might want to clear all objects in your R environment. This will reduce the amount of memory that is taken up rm(list = ls()) # Clear everything in your workspace gc() # Perform garbage collection used (Mb) gc trigger (Mb) limit (Mb) max used (Mb) Ncells 879272 47.0 1676008 89.6 NA 1322144 70.7 Vcells 1630670 12.5 8388608 64.0 102400 2591288 19.8 You might also want to clear the R console, which you can do by placing your cursor in the R console and typing <control> l (careful! that’s a lowercase L). Here’s a more complete list of RStudio shortcuts. Before moving on to the next section, take a note of all you’ve done so far. Did your R installation go smoothly? If not, could you troubleshoot the errors or find help online? Does using R remind you of other programs you have experience with? What could be some reasons that using R code written by someone else might not work on your computer? Any feedback for this section? Click here "],["r-programming-fundamentals.html", "Chapter 4 R Programming Fundamentals", " Chapter 4 R Programming Fundamentals “Computers are good at following instructions, but not at reading your mind.” - Donald Knuth In this chapter, we’ll start to learn the “nuts and bolts” of R. Think of these things as the fundamental pieces that you need to understand in order to make R do more interesting and sophisticated things later. "],["programming-preliminaries.html", "4.1 Programming Preliminaries", " 4.1 Programming Preliminaries Look at a sentence in a language you don’t know, look carefully at the symbols, spacing and characters. Recall learning a foreign language, how you had to learn the syntax and grammar rules. Now think about English (or another language you know well) and think about the syntax and grammar rules that you take for granted. All human languages rely on a set of rules called grammar, which describe how the language should be used to communicate. When two humans communicate with a language, they both must agree on the rules of that language. R also has rules that must be followed in order for a human ( you ) to communicate with a computer, i.e. in order to tell the computer what to do. In human language, grammar is often fluid and evolving, and two people may have to adapt their use of the language in order to communicate. With R, the rules are fixed, and the computer “knows” them perfectly. It is up to you to learn the rules in order to make the computer do exactly what you want it to do. Since any computer programming language will do exactly what you tell it to do, it’s important to cover some of the basic rules of the R programming language before you can learn what it can do. So let’s get started: 4.1.1 R Commands Like most programming languages, R consists of a set of commands which form the sequence of instructions which the computer completes. You can think of commands as the verbs of R, they are the actions the computer will take. Here is an example of a command, followed by the result. print("hello, world!") [1] "hello, world!" This command is telling R to print out a message. R code usually contains more than one command, and typically each command is put on a separate line. Here are multiple commands, each on a separate line: print("The air is fine!") print(1 + 1) print(4 > 5) [1] "The air is fine!" [1] 2 [1] FALSE The first command prints another message, the second command does some math then prints the result, and the third command evaluates whether the statement is true or false and prints the result. Generally, it’s a good idea to put separate commands on separate lines, but you can put multiple commands on the same line, as long as you separate them by a semicolon. See this code for example: x <- 1+1; print(x); print(x^2) [1] 2 [1] 4 In this example, three commands are given on one line. The first command creates a new variable called x, the second command prints the value of x, and the third command prints the value of x squared. We see that the semicolon, ;, serves as the command termination, because it tells R where one command ends and another begins. When a line contains a single command, no semicolon is necessary at the end, but including a semicolon doesn’t have any effect either. print("This line doesn't have a semicolon") print("This line does have a semicolon"); [1] "This line doesn't have a semicolon" [1] "This line does have a semicolon" Including multiple semicolons (e.g. print(“hello”);;) does not work! You’ve just seen your first example of assignment. That is, we created a thing called x , and assigned to it the value of 1 + 1 using the assignment operator, <-. Formally x is called an object, but we’ll talk more about objects and assignment later. So far, we’ve seen that you can place one command on one line, multiple commands on multiple lines, multiple commands on one line, so you may ask: can you can place one command on multiple lines? The answer is sometimes, depending on the command, but we will not discuss this now. At this point, we’ve introduced several new types of R commands (assigning a variable, squaring a number, etc.), and we will talk more specifically about these later. The important part of this section is how R code is arranged into different commands. Lastly, commands can be “grouped together” using left and right curly braces: { and }. Here’s an example: { print("here's some code that's all grouped together") print(2^3 - 7) w <- "hello" print(w) } [1] "here's some code that's all grouped together" [1] 1 [1] "hello" The above grouped code is indented so that it looks nice, but it doesn’t have to be: { print("here's some code that's all grouped together") print(2^3 - 7) w <- "hello" print(w) } [1] "here's some code that's all grouped together" [1] 1 [1] "hello" Indenting is an example of coding style, which are formatting decisions which don’t affect the results of the code, but are meant to enhance readability. We’ll talk more about coding style later. In some programming languages, Python for example, white space matters. That is, code indents and other spaces change the way the code runs. In R, white space does not matter, so things like indents are used purely for readability. What does it mean to “group” code? At this point there is no practical difference, each command gets executed whether or not it is grouped inside curly braces. However, code grouping will become very important later on, when we discuss control flow later. There are several helpful shortcuts that you can use in R. If you forget to put quotes around something, you can highlight and press the quote key and it will add quotes to both sides. This works with parentheses too. You can also use tab completion with functions and defined variables. Tab completion allows you to use longer, more descriptive variable names without the additional typing time. This can save you a lot of time and reduce mistakes! In RStudio, open a new R script and type in all the R commands from this section, to verify that you get the same result. It’s good practice! 4.1.2 Comments When writing R code, you may wish to include notes which explain the code to your future self or to other humans. This can be done with comments, which are ignored by R when it is running the code. The “#” symbol initiates a comment. Here’s an example of some comments: # Let's define y and z y <- 8 z <- y + 5 # Adding 5 to y and assigning the result to z ## This is still a comment, even though we're using two #'s Notice that it’s possible for a line to contain only a comment, or for part of a line to be a comment. R decides which part of a line is a comment by looking for the first “#”, and everything after that will be treated as a comment and ignored. R ignores comments, but you should not! If you’re reading code that someone else has written, it’s likely that also paying attention to their comments will greatly help you to understand what their code is doing. It’s also courteous to make good comments in your own code, if only because you may have to return to your own code in the future and re-learn what it is doing! In this book, we will use comments to help explain the R code that you will see. 4.1.3 Blank Lines Blank lines in R are ignored, but they can be used to organize code and enhance readability: print("The sky is blue") # The blank line below here is ignored print("The grass is green") [1] "The sky is blue" [1] "The grass is green" 4.1.4 CaSe SeNsItIvItY In R, variables, functions, and other objects (all of which we’ll talk about later), have names. These names are case sensitive, so you must be careful when referencing an object by name. Here we create two variables and give them different values, notice how they are different from each other: A <- 4 a <- 5 print(a) print(A) [1] 5 [1] 4 This may seem obvious, but case sensitivity applies to functions (which we’ll talk about later) too. We’ve been using the print function a lot in the above examples, which begins with a lower case p.  There is no Print function: Print("testing") Error in Print(\"testing\"): could not find function \"Print\" 4.1.5 ? One very nice thing in R is the documentation that accompanies it. Every function included in R (like print) has documentation that explains how that function works. To access the documentation, use a ? followed by the name of the function, like so: ?print The output of the above code chunk is not shown, because the result of this code is best viewed in RStudio. Go to R Studio and type in ?print and observe what happens! 4.1.6 ?? If you don’t remember the exact name of a function, or would like to search for general matches to a topic, then you can use ??. For example, trying ?Print produces an error, because there is not Print function (remember, R is case sensitive), so there’s no documentation to go with it. However, the following should still work: ??Print Programmers have a sense of humor, too! Try running ????print to see a small joke. Remember, comedic taste varies! This is a lot to remember. As you get more familiar with R, you’ll begin to memorize basic functions - and Google is always there for the rest. Want to know more about R syntax? Try typing ?Syntax in the R console (then press Enter). As we’ve seen, symbols and characters have specific meaning in R. You must be careful not to ignore things like semicolons, curly braces, parentheses, when reading R code. This takes practice! Okay, now that we’ve covered some of the basics, it’s time to start learning how to do useful things in R! The next few sections will describe the different types of data that R can handle. This video discusses programming preliminaries. https://youtu.be/EShV_T2P7sw Any feedback for this section? Click here "],["data-types.html", "4.2 Data Types", " 4.2 Data Types Think of all the things you might be expected to remember. These different items can probably be categorized into different types of information, like phone numbers, passwords, birthdays, historical events, and math theorems for example. R was designed to handle different types of data as well, though the types are different from the examples just given. R can store and manipulate different pieces of information, called data, and these data can be of several different types. Here are some examples of different types of data: a <- 12.34 # a is a number b <- "Hello" # b is a string of characters c <- TRUE # c is a special type of data that is either true or false R has special names for these examples, and there are other types of data as well. Below, we’ll talk about each data type, one at a time. The term “data” is actually plural! A single piece of data is called a “datum”. So to refer to a set of data, you would say “these data”, and to refer to a single piece of data, you would say “this datum”. 4.2.1 Numeric Many data exist as numbers, and R has a specific data type for storing those numbers, called the numeric data type. Here are some examples: a <- -11 b <- 13.37 c <- 1 / 137 Note that integers, decimals, and fractions are all examples of numeric data in R. We can prove that these are all the same data type using the class function: class(a) [1] "numeric" class(b) [1] "numeric" class(c) [1] "numeric" So far, we’ve defined the a object a few different times, which is allowed! Every time we define a, R forgets the old value. Therefore we should reuse object names with caution, because it can become difficult to remember what the latest value is! When we discuss loops later, however, we will use code to automatically change the value of an object several times in order to do useful things! When you have numeric objects, you may want to perform math operations on them. R has a number of built in functions to deal with numeric data, here are some examples: print(a + b) # Add two numeric values print(b - c) # Subtract two numeric values print(a * b) # Multiply two numeric values print(a^3) # Take the cube of a numeric value [1] 2.37 [1] 13.3627 [1] -147.07 [1] -1331 When performing math on numeric objects, R will obey order of operations, so the following two examples will give different results: a + b * c # R will perform the multiplication before the addition [1] -10.90241 (a + b) * c # R will perform the addition first, then the multiplication [1] 0.01729927 Notice that we’ve added extra spaces in the code to help you understand what’s going on. This is another example of code style, which we’ll talk more about later. Wait a second, we didn’t use the the print function just now, but R still displayed the results of the calculations! What is going on? This behavior is peculiar to something called R Markdown, which is what we used to create this book (yes, this book was creating using R! Pretty cool, huh?). If the last command given in a code block produces a result, and you don’t assign that result to anything (using <-), then R will print out that result. This means we don’t always have to use the print function when we want to display R output. Notice all the decimal points? R can be very precise when performing computations. However, viewing all of the digits stored by R can be distracting and hard to read. You can show just some of the digits by using the round function: a <- 0.123456 round(a, 3) [1] 0.123 It also turns out that R stores more digits than what it shows when it prints, though we won’t go into detail on that now. This video discusses numerics. https://youtu.be/juscNzIrmJQ 4.2.2 Integer In general, numeric data in R are treated as if they can be any decimal number (technically, they are a double precision number, if you know what that means; if not, it’s not important right now). However, there is a way to specify that a specific numeric object is an integer, by placing an “L” at the end of it, like so: x <- 20 # x will be a numeric object y <- 20L # y will be an integer object class(x) [1] "numeric" class(y) [1] "integer" Integers take half of the space in a computer’s memory or hard drive, so if you are working with or storing a lot of numbers which are integers, it might make sense to declare them as integer type in R. This will make more sense when we discuss vectors later. This video discusses integers. https://youtu.be/rNkEAPsipCk 4.2.3 Character Not all data are numbers! R also has the capability to store strings of characters, and this is the aptly named character type (or sometimes called a character string or just string). Here are some examples: d <- "Hello" # This string is defined with *double* quotes e <- 'how are you?' # This string is defined with *single* quotes! print(d) print(e) [1] "Hello" [1] "how are you?" Notice how we can define character strings using single quotes or double quotes, as long as we are consistent. So this is not valid: # Note the mismatched single/double quotes: f <- "this does not work' Error: :2:6: unexpected INCOMPLETE_STRING 1: # Note the mismatched single/double quotes: 2: f So, make sure you are consistent. However, you may see another problem with this: some strings contain quotes in them, like this: g <- 'This won't work' Error: :1:16: unexpected symbol 1: g Since single quotes are being used to define the string, they can’t be used in the string itself, because R will “think” the string is ending at the second '. One option is to change the defining quotes to be double quotes, then the single quote will be safely included in the string: g <- "I'm happy that this works!" print(g) [1] "I'm happy that this works!" Another option is to use a backslash when using quotes inside the string, so that R “knows” the quote is part of the string and not ending the definition of the string: g <- 'I\\'ve found another way that works!' print(g) [1] "I've found another way that works!" Notice that when we define g we place a \\' anywhere in the string where we want a ' to be, but when printed out, we see that R has interpreted it as just a '. Notice also that we didn’t have to change the defining quotes to be double quotes in this case. The backslash is called the escape character, and it signifies that what follows it should be interpreted literally by R, and any special meaning should be ignored. Since backslash also has special meaning itself, if you want a backslash in your string, you need to use another backslash, which functions as an escape character, like so: g <- “here is a backslash: \\\\”. You will see both backslashes when using the print function (which is meant for any data type), but if you use the special cat function (which is meant for character types specifically), all escape characters will be “processed”, and you will see just a single backslash. Try the same thing with the newline character, \\n! To see a list of special characters, try typing ?Quotes into the R console Here is an important string to know about: h <- "" # This string is empty! h is a character string with no characters, called an empty string. You can perform math on numeric data, so what can you do with strings? The answer is, quite alot, using some functions that R provides. Here are some of them: nchar(g) # This prints out the number of characters in a string [1] 34 substr(g, 6, 10) # This extracts just part of a string, using the start and stop positions you provide [1] "found" strsplit(g, " ") # This splits the string up using a specified "delimiter" string, a single space in this case [[1]] [1] "I've" "found" "another" "way" "that" "works!" When you split a string, this produces a list containing a vector of character strings. This is an example of how data can be organized in a structured way. We’ll talk more about so called data structures in the next section. paste("hello", "world") # This combines multiple strings together into one string! [1] "hello world" Remember that you can learn more about a function using ?. Type ?paste into R and read the documentation carefully. Can you determine what the “sep” argument does? What do you think would happen if we ran the code print(“hello”, “world”, sep=“-”)? There are other ways of manipulating strings, but we’ll return to this later. This video discusses characters. https://youtu.be/1JgmnulM_4g 4.2.4 Logical Numeric objects can be any number, character objects can be any string of characters, but logical objects can only be two different values: True or False. Logical data types are also known as “boolean” data types. Here we define some Logical objects: a <- TRUE b <- FALSE c <- T d <- F print(a) [1] TRUE print(b) [1] FALSE print(c) [1] TRUE print(d) [1] FALSE So you can see that we can define a logical object using the full name or just the first letter. Here’s how to get the “opposite” of a logical object !a [1] FALSE Logical data are the simplest type, but there are actually some clever things you can do with them. You can test whether simple mathematical expressions are true or false. # Create x and y x <- 3 y <- 4 # Check: is x less than y? (should give TRUE) x < y [1] TRUE The third command is a way to check if the value of x is less than the value of y. The result of this comparison is a logical, in this case, TRUE. Here are other ways of making comparisons: x <= y # Check if x is less or equal to y [1] TRUE x == y # Check if x is equal to y (note how you need two equals signs) [1] FALSE x >= y # Check if x is greater or equal to y [1] FALSE x >= y # Check if x is greater than y [1] FALSE Comparisons can be made using strings as well: x <- "Hello" y <- "hello" x == y [1] FALSE Remember that R is case sensitive, and two strings must be exactly the same to be considered equal. Of course any object (like x) will be equal to itself: x == x [1] TRUE Surprisingly, logicals can be treated as numerics, where TRUE is treated as 1 and FALSE is treated as 0. Here are some examples: TRUE + TRUE # TRUE is treated as 1 [1] 2 FALSE * 7 # FALSE is treated as 0 [1] 0 (2 < 3) + (1 == 2) # What's going on here? [1] 1 The last example deserves some thought. Start with each expression in parentheses, and decide whether it will evaluate to true or false. Then remember how logicals are treated as numbers, and determine what happens when you add them together. Numeric, integer, character, and logical data types are probably the most important data types to know in R, but there are others that were not covered here. These include: complex factor raw At least one of these (factor) will be covered later, but you can find more information about the other types here In the R console, type the following R commands and observe the result x <- \"5\" y <- 5 z <- (x == y) What data type is x? (check with R using the class function) What data type is y? What data type is z? What is the value of z, and why does this make sense? Now that we’ve discussed different types of data, we’ll now see how they can be structured together in meaningful ways. What about dates? R actually has three built-in date classes. This can be confusing at first, but packages like lubridate make it easy to work with dates in R. This video discusses logicals. https://youtu.be/GH9AZcexokU Any feedback for this section? Click here "],["data-structures.html", "4.3 Data Structures", " 4.3 Data Structures Imagine a grocery list, shopping list, or to-do list. That list consists of a set of items in a specified order, and the list also has a length. Why do you think it’s useful to organize these items into a list, rather than in some other fashion? Can you think of why it might be useful to store data in a list? Often, you will need to work with many related data, for example: - A sequence of measurements through time - A grid of values - A set of phone numbers In these circumstances, it would make sense to organize the data into a data structure. R provides multiple data structures, each of which are appropriate in various situations. By far the most popular data structure in R is the data frame, but in order to talk about data frames, we must talk about some simpler data structures first. 4.3.1 Vectors A vector is just an ordered set of elements (in other words, data), all of which have the same data type. Vectors can be created for the logical, numeric (double or integer), or character data types. Here’s an example of a vector: x <- c(1, 2, 3) # this is a vector of numeric types print(x) [1] 1 2 3 Note that to create a vector, we use the c function, where c stands for combine. This makes sense, because we are combining three numeric objects into a numeric vector. We may determine the length of any atomic vector like so: length(x) [1] 3 The class function will tell us what type of data is stored in a vector (which makes sense, because all elements of the vector have the same data type). class(x) [1] "numeric" Here’s how to create logical or numeric vectors: y <- c(TRUE, TRUE, FALSE, TRUE) z <- c("to", "be", "or", "not", "to", "be") class(y) [1] "logical" length(y) [1] 4 class(z) [1] "character" length(z) [1] 6 The above statement states that all elements of a vector must have the same data type, so what do you think will happen if you try to create a vector using elements from different data types? Here are some possibilities, can you think of another one? R will produce an error R will combine the elements somehow, but the result won’t be a vector Something else? Whatever happens, humans were behind the decision of how R should behave in this situation. If you were in charge of making this decision, what would make the most sense? Let’s try to create a vector of mixed type and see what happens. Run the following commands in R and think about the output: m <- c(TRUE, “Hello”, 5) class(m) print(m) What changes did R make when creating the vector? What’s happening in the above code is an example of type conversion, which we will talk more about later. For now, remember that every element in an R vector is the same type. You can create empty vectors as placeholders, by indicating the data type and how many elements there are: empty <- numeric(10) # this creates a numeric vector of length 10 This is the first instance of us using a name which is longer than a single character! This new vector is called empty. Let’s print the contents of the vector: print(empty) [1] 0 0 0 0 0 0 0 0 0 0 Even though we didn’t tell R what data to put in the vector, it put a 0 in each element. This is the default value for a new vector. Here’s how you can create new vectors of other types: empty_int <- integer(45) # create integer vector with 45 elements empty_cha <- character(2) # create character vector with 2 elements empty_log <- logical(1000) # create logical vector with 1000 elements!! We saw that the default value for a numeric vector is 0. Use the code above to create empty integer, character, and logical vectors, then print them out to see what default values R has given to each element. Do these make sense? What happens if we create a vector of length 1? It turns out this is the same as just creating a single instance of that data type. Observe how the following are the same. a <- numeric(1) # create vector of length 1 (default value is 0, right?) b <- 0 # create single numeric with value 0 a == b # compare a and b to see if they are the same. [1] TRUE It turns out, you can create a vector of length 0, which contains 0 elements. This may sound odd, but can happen sometimes! However, you cannot create a vector of negative length (e.g. logical(-1) won’t work), or a fractional length (e.g. character(12.7) won’t work). 4.3.1.1 Accessing and Changing Elements After you’ve created a vector, how do you put your data in them? Here’s how you can change the value of a specific element: a <- c(1, 2, 3) # create numeric vector of length 3 a[2] <- 4 # change the value of the second element of a to 4 a # print the result [1] 1 4 3 See how the second element of a has changed? So you can access a specific element using square brackets: [ and ]. In fact, if you want to know the value of the third element (without changing anything), just use: a[3] # access the third element [1] 3 What do you think will be the result of the following code (hint: the result will either be TRUE or FALSE)? vec <- c(4, 5, 6) # Create a vector vec[3] == 6 # Remember what == does? Once you make a guess, try it in R and see if you were correct. This video gives an introduction to vectors. https://youtu.be/-BlN6_ZMpKE 4.3.1.2 Working with vectors You can do many things with vectors that you can with single instances of each data type. Recall, you can add a number to a numeric object: a <- 3 # create a numeric object a + 4 # add a number to the object. [1] 7 The same thing is possible with numeric vectors: a <- c(1, 2, 3) # create a numeric vector a + 4 # add a number to EACH ELEMENT of the vector! [1] 5 6 7 This type of behavior is called elementwise behavior. That is, the operation is performed on each element separately. Here are some other elementwise operations: a - 3 [1] -2 -1 0 a * 1.5 [1] 1.5 3.0 4.5 a ^ 2 [1] 1 4 9 a == 2 [1] FALSE TRUE FALSE R has some functions which summarize the values in a vector. One such function is the sum function, which adds the values of each element in the vector: print(a) # Print the elements of a as a reminder sum(a) # Add all the elements of a together. [1] 1 2 3 [1] 6 Other examples of summary functions include max, min, mean, and sd. We’ll talk about these and other summary functions later. Some operations work on two vectors, as long as they are the same length: b <- c(1, 0, 1) a + b [1] 2 2 4 b * a [1] 1 0 3 a ^ b [1] 1 1 3 You can even compare two vectors, and the result will be a logical vector: z <- a > b # Compare a and b, element by element, assign the result to z z # Print the value of z [1] FALSE TRUE TRUE The first logical value is the result of a[1] < b[1], the second logical value is the result of a[2] < b[2], etc. what operations can we perform on character vectors? Here are some examples: z == TRUE # Which elements are TRUE? [1] FALSE TRUE TRUE This just produces z again (Do you see why?). Here’s how to get the logical “opposite” of z: z == FALSE [1] TRUE FALSE FALSE Or, as we saw before, we can use !, which operates on each element of z: !z [1] TRUE FALSE FALSE Remember how logical objects can be treated as numeric objects (either a 0 or 1)? If we use this with the sum function to determine how many elements are TRUE: sum(z) [1] 2 Here’s another example of using the sum function on a logical vector: sum(a == b) # How many elements do a and b have in common? [1] 1 So there is one element that both a and b share. Logical vectors can also be used to access all elements of a vector for which a certain condition is true. We’ll see how to do this later on. Let’s create some character vectors and explore a few things we can do with them: a <- c("I", "have", "to", "have", "a", "donkey") b <- c("You", "want", "to", "sell", "a", "donkey") First, we can do elementwise comparison (assuming equal length), just as we did for numeric vectors: a == b [1] FALSE FALSE TRUE FALSE TRUE TRUE To search for specific character strings in a character vector, you can use the grep function: grep("have", a) # Search the vector a for the phrase "have" [1] 2 4 This result shows that the phrase “have” occurs in elements 2 and 4 of a! What if we search for a phrase that doesn’t occur? grep("raddish", a) integer(0) The result is an integer vector of length 0, meaning there are no elements that match the phrase! This video continues the discussion of vectors. https://youtu.be/NgmVhLpuM5k 4.3.1.3 Vectors of different types What if we try to perform operations between vectors of different types? This will work in some cases, but not others. Here are a few examples: a <- c(1, 2, 3) b <- c("I", "am", "sam") c <- c(TRUE, TRUE, FALSE) a + b # Can you add a numeric vector to a character vector? Error in a + b: non-numeric argument to binary operator a + c # Can you add a numeric vector to a logical vector? [1] 2 3 3 We see that you can’t add a numeric vector to a character vector, but you can add a numeric vector to a logical vector. Why is this? Predict whether the following are possible: Can you can multiply a character vector with a numeric vector? Can you can multiply a logical vector with a numeric vector? Check whether you are correct by creating some vectors in R and attempting to multiply them together. Can you make sense of the answer? If you run into errors, you can include error=TRUE in your code chunk options like this: ```{r, error=TRUE} This will allow RStudio to still knit the document, even thought the code block generated errors. 4.3.1.4 Special Numeric Vectors There are a few special ways of creating a numeric vector which can be very useful, so we’ll mention them here. The first way creates a sequence of all integers between a starting and ending point: d <- 1:5 # Create sequence starting at 1 and ending at 5 d [1] 1 2 3 4 5 Here’s a longer example: d <- 1:100 # Create sequence starting at 1 and ending at 100 d [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [19] 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 [37] 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 [55] 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 [73] 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 [91] 91 92 93 94 95 96 97 98 99 100 In this example, the R output can’t be shown on a single line, so it must be placed on multiple lines. Notice that each line has a different number in brackets: [1], [19], [37] etc. This number indicates which element of the vector is the start of that line. So we finally have an explanation for the [1] which is displayed with all R output. It’s simply indicating that this is the first element of the output. This also reflects the fact stated earlier that any R object can be considered a vector of length 1! When you’re working with large data sets, it’s often helpful to see just the first few results instead of printing the entire thing. You can use head() to print the first six rows. Another way to create a numeric vector is using the seq function, which allows you to specify the interval between each vector element. For example: e <- seq(2, 100, 2) e [1] 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 [20] 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 [39] 78 80 82 84 86 88 90 92 94 96 98 100 Or you can also specify how long you want the vector to be, and seq will determine the appropriate interval to make the elements evenly spaced. seq(1, 10, length.out=3) [1] 1.0 5.5 10.0 seq(1, 10, length.out=5) [1] 1.00 3.25 5.50 7.75 10.00 4.3.1.5 Another Data Type: Factor In the previous section, we avoided talking about the factor data type, because we need the concept of vectors to appreciate their purpose, but now we are equipped to talk about them. Consider the following example of a character vector: cha_vec <- c("cheese", "crackers", "cheese", "crackers", "cheese", "crackers", "cheese") There are seven elements in this vector (length(cha_vec) is 7), but there are only two unique elements, “cheese” and “crackers”. Imagine having two write down this vector on a piece of paper, and the space it would take. Now imagine writing down instead: 1, 2, 1, 2, 1, 2, 1 1 = “cheese” 2 = “crackers” This second method writes down numbers instead of character strings, but also keeps a record of which numbers correspond to which character strings. The total amount of space taken up on the piece of paper is smaller for the second method, and the amount of space saved would be even larger if the character vector were longer and had more repeated elements. This is the essence of what a factor data type is: A character vector stored more efficiently on the computer. For a factor vector, R stores an integer vector (which often takes less space than a character vector), and also maintains a “lookup table” which keeps track of which integers correspond with which character strings. To illustrate, let’s create a factor variable: # Create a new factor variable from our existing character vector: fac_vec <- factor(cha_vec) Notice how we started with a character vector and used the factor function to create a factor from it. If we print the new vector, fac_vec [1] cheese crackers cheese crackers cheese crackers cheese Levels: cheese crackers it displays the elements as we would expect, but also includes another line of output giving Levels. This shows that there are only two unique character strings, which are called factor levels. Since R is using integers “behind the scenes” to store the vector, we can see those integers by using the as.integer function: as.integer(fac_vec) [1] 1 2 1 2 1 2 1 This is another example of type conversion, which we will discuss soon. In some situations, numbers may get treated as characters, like so: x <- c(“4”, “5”, “6”) This may pose an issue if this character vector gets converted to a factor, because the “behind the scenes” integers may not agree with the Levels, which represent the original data. This can easily happen when reading in data from a file on your computer, if you’re not careful. We’ll talk more about this later. There are a few neat things you can do with factor vectors. By changing the levels, you can quickly change all occurrences of a string at once. For example: print(fac_vec) levels(fac_vec) <- c("peas", "carrots") # Change the levels of fac_vec fac_vec [1] cheese crackers cheese crackers cheese crackers cheese Levels: cheese crackers [1] peas carrots peas carrots peas carrots peas Levels: peas carrots There is more to be said about factors, but this is all we will explore at this point. In newer versions of R, all strings are treated like factors behind the scenes, meaning there’s really no difference between factor and character types in terms of how much space they take up in the computer’s memory. However, R still treats the two types differently, so it’s important to remember that they are different! This video discusses coercion, sequences, and factors. https://youtu.be/iusiO1dRQdY 4.3.1.6 Combining Vectors Given two vectors, it’s easy to combine them into one vector: a <- c(1, 2, 3) b <- c(4, 5, 6, 7) c(a, b) # Combine vectors a and b [1] 1 2 3 4 5 6 7 The combine function (c) is smart enough to recognize that a and b are vectors, and performs concatenation to create the resultant longer vector. You can also use the combine function to add a single element to the end of a vector: a <- c("CEO", "CFO") # Initialize a <- c(a, "CTO") # Redefine a by combining a with a new element a [1] "CEO" "CFO" "CTO" In R, there may sometimes be more than one way to do the same thing, and one of the ways might be much faster or take much less computer memory to do. In other words, two sets of R commands can be correct, but one may perform better than the other. Writing “performant” (high performance) code is an advanced topic that we will not discuss much in this introductory course. You’ve just seen one way to add an element to the end of a vector, but if you do this a lot (perhaps in a for loop, which we’ll talk about later), it can be very slow. In this situation you’re better off creating the whole vector at once and updating each element as needed. What if you try to combine vectors of different types? a <- c(1, 2, 3) b <- c("four", "five") c(a, b) [1] "1" "2" "3" "four" "five" Again, we see that the c function has converted all elements to be character strings, and the resultant vector is a character vector. Since we’ve seen type conversion arise a few times now, it’s appropriate to talk more explicitly about how it works. We’ll do that in the next section. 4.3.1.7 Type Conversion There may be times when you’d like to convert from one type of data into another. An example would be the character string \"1\", which R does not view as a number. Therefore, the following does not work: "1" + "2" # R can't add two character strings Error in \"1\" + \"2\": non-numeric argument to binary operator To remedy issues like this, R provides functions in order to convert from one data type into another: - as.character: converts to character - as.numeric: converts to numeric - as.logical: converts to logical - as.factor: converts to factor Using these functions, R will “do its best” to convert whatever you start with into the desired data type, but it’s not always possible to make the conversion. Below are a few examples which do and don’t work well. Converting from a numeric to a character vector is always possible: x <- c(3, 2, 1) y <- as.character(x) # Here's how to convert to a character vector print(x) print(y) [1] 3 2 1 [1] "3" "2" "1" However, converting from a character vector to a numeric only works if the characters represent numbers. Any element that won’t convert will be given w <- c("1", "12.3", "-5", "22") # This character vector can be converted to numeric as.numeric(w) [1] 1.0 12.3 -5.0 22.0 v <- c("frank", "went", "to", "mars") # This character vector can't be converted to numeric as.numeric(v) Warning: NAs introduced by coercion [1] NA NA NA NA None of the elements can be converted into a number, so R prints a warning message, and the result is an NA in each element, which stands for “not available”. NA indicates that a value is missing, and can arise in many different ways, which we will not explain here. NA values have interesting behavior in R. Generally, anything that “touches” an NA becomes an NA. You can try out these commands for yourself to see what happens: NA * 0 NA - NA c(NA, 1, 2) If only part of a vector can be converted, then the result will contain some converted values and some NA’s: u <- c("1.2", "chicken", "33") as.numeric(u) Warning: NAs introduced by coercion [1] 1.2 NA 33.0 What other conversions are possible? Character vectors can also be converted into logical: s <- c("TRUE", "FALSE", "T", "F", "cat") # All but the last element can be converted to logical as.logical(s) [1] TRUE FALSE TRUE FALSE NA Based on the examples we’ve seen before, it should make sense that numeric vectors containing 0 or 1 can also be converted into a logical vector: as.logical(c(1, 0, 1, 0)) # Here we create the vector and convert it in the same line [1] TRUE FALSE TRUE FALSE Logical vectors can also be converted into character or numeric vectors. Based on what you know, make a prediction about what the following commands will produce: as.numeric(c(T, F, F, T)) as.character(c(T, F, F, T)) Check your predictions by running the commands in R. Remember that “solo” objects are just vectors of length 1, so any of these type conversions should work on a single object as well, like so: as.numeric("99") [1] 99 Along with the conversion functions as...., there are companion functions which simply check whether a vector is of a certain type: is.character: checks if character is.numeric: checks if numeric is.logical: checks if logical is.factor: checks if factor Here are some examples: a <- c("1", "2", "3") is.character(a) [1] TRUE is.numeric(a) [1] FALSE a <- as.numeric(a) is.character(a) [1] FALSE is.numeric(a) [1] TRUE As we’ve seen, type conversion is sometimes performed automatically, specifically when using the combine function (c). To understand more about this, try typing ?c to bring up the documentation, and have a look at the “Details” section. This video finishes the discussion of vectors. https://youtu.be/XKdZzHBRO9o 4.3.2 Matrices Not all data can be arranged as an ordered set of elements, so R has other data structures besides vectors. Another data type is the matrix, which can be thought of as a grid of numbers. Here’s an example of creating a grid: data <- c(1, 2, 3, 4, 5, 6, 7, 8, 9) A <- matrix(data, 3, 3) A [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 Here we’ve made a matrix with three rows and columns, by first creating a vector called data, and using the matrix function and giving it the data, the number of rows, and the number of columns. Notice that R fills the matrix one column at a time, from left to right. Here’s how you access the data within a matrix: A[1,1] # Get the first element of the first row [1] 1 A[2,3] # Get the third element of the second row [1] 8 A[1,] # Get the entire first row [1] 1 4 7 A[,3] # Get the entire third column [1] 7 8 9 Just like with vectors, square brackets must be used to access the elements of a matrix. Don’t use parentheses like this: A(1,2). diag(A) # Get the diagonal elements of A [1] 1 5 9 You can get the shape of a matrix with the dim function: dim(A) # How many rows & columns does A have? [1] 3 3 Which gives an integer vector telling us A has three rows and three columns. In R, create the matrix A above, and write code to compute the first element of the second row times the third element of the third row. You can do some simple math with matrices, like this: A + 1 # Add a number to each element of the matrix [,1] [,2] [,3] [1,] 2 5 8 [2,] 3 6 9 [3,] 4 7 10 A * 2 # Multiply each element by a number [,1] [,2] [,3] [1,] 2 8 14 [2,] 4 10 16 [3,] 6 12 18 A ^ 2 # Square each element [,1] [,2] [,3] [1,] 1 16 49 [2,] 4 25 64 [3,] 9 36 81 If you’ve worked with matrices in a math class, you may have talked about some of the following operations: Here we can find the transpose of a matrix (the rows become columns and the columns become rows): t(A) # Find the transpose [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 [3,] 7 8 9 # Find the trace: sum(diag(A)) # Get the diagonal elements of A, then sum them [1] 15 Here are some things you can do with two matrices: B <- matrix(1, 3, 3) # Create a 3x3 matrix of all 1's (notice how we only need one 1?) A + B # Add two matrices together [,1] [,2] [,3] [1,] 2 5 8 [2,] 3 6 9 [3,] 4 7 10 A * B # Multiply the elements of A and B together [,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9 A %*% B # Perform matrix multiplication between A and B [,1] [,2] [,3] [1,] 12 12 12 [2,] 15 15 15 [3,] 18 18 18 Notice the difference between the last two examples? Just using * multiplies the matching elements of A and B together, while the new operator %*% performs matrix multiplication, like you may have seen in a linear algebra class. In R, perform matrix multiplication between A and the transpose of A. If two matrices don’t have the same shape, you won’t be able to add their elements together: C <- matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), 3, 4) A * C Error in A * C: non-conformable arrays The error message: non-conformable arrays tells us that A and C have different shapes, so it’s impossible to multiply their matching elements together. But you can still perform matrix multiplication between them: A %*% C [,1] [,2] [,3] [,4] [1,] 30 66 102 138 [2,] 36 81 126 171 [3,] 42 96 150 204 Any data type (numeric, character, etc.) can be represented as a vector, but matrices only work with numeric types. A matrix is just a special case of a data structure called an array. Matrices have two dimensions (row and column), and arrays can have any number of dimensions (1, 2, 3, 4, 5, etc.). We won’t discuss arrays in this course much. Try running the following code in R, which should produce a warning message: data <- c(4.5, 6.1, 3.3, 2.0); A <- matrix(data, 2, 3); Read the warning message and the code carefully, and see if you can figure out the problem. What change would you make to the above code so that it runs? Remember everything inside a vector must have the same data type. Here we’ve seen that matrices all have to be numeric data types. Wouldn’t it be nice if there were a way to store objects of different types (without doing type conversion)? This is what lists can do! It turns out, matrices can work with non-numeric types as well! But like vectors, mixed type matrices are not allowed. For this, you’ll have to use a dataframe, as we discuss later. This video gives an introduction to Matrices. https://youtu.be/hknL1EbrIB4 4.3.3 Lists A List is an ordered set of components. This may sound similar to a vector, but the important difference is that with lists there is no requirement that the components have the same data type. Here is an example of a list: A <- list(42, "chicken", TRUE) A [[1]] [1] 42 [[2]] [1] "chicken" [[3]] [1] TRUE Here we see each component of the list printed in order, with [[1]], [[2]], and [[3]] indicating the first, second, and third components. To access just one of the components, use double square brackets ([[ and ]]): # Get the second component of A A[[2]] [1] "chicken" Notice that each component of A is a different data type (numeric, character, logical), which is not a problem for lists. Nothing was converted automatically, as we saw happen with vectors. Here’s how to add a component to an existing list: A[[4]] <- matrix(c(1, 2, 3, 4, 5, 6), 2, 3) Notice how we accessed component 4, which didn’t exist yet, and assigned it a value. We actually added a matrix as the fourth component, this is not possible with vectors! Now A has four components: A [[1]] [1] 42 [[2]] [1] "chicken" [[3]] [1] TRUE [[4]] [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 Lists can even contain other lists! If you try to assign a list to be one of its own components (e.g. A[[5]] <- A), then R will make a copy of A and assign the copy to be one of the components of A. Thus there is no “self reference”, and no issue with Russel’s Paradox. So far we’ve seen vectors, lists, matrices, and arrays. How are they different and how are they similar? List components can also have names. Here we add an component with a name: A[["color"]] <- "yellow" A [[1]] [1] 42 [[2]] [1] "chicken" [[3]] [1] TRUE [[4]] [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 $color [1] "yellow" Notice how this new component displays differently? Instead of showing [[5]], the component is labeled with a dollar sign, then its name: $color. We first use the term name for individual variables, but here we see that components of lists can also have names. When we encounter data frames later, we’ll see how each row and column can also have its own name. You can access components using their name in two ways: A[["color"]] # Use double square brackets to access a named element [1] "yellow" A$color # Use dollar sign to access a named element [1] "yellow" But the color component is also the fifth component of the list, so we can access it like this as well: A[[5]] [1] "yellow" Here’s a new list created by giving names to each element: person <- list(name = "Millard Fillmore", occupation = "President", birth_year=1800) person $name [1] "Millard Fillmore" $occupation [1] "President" $birth_year [1] 1800 Below is some R code: S1$year <- S2[2,2] + S3[[“age”]] Assuming this code works, what are the data structures of S1, S2, and S3? purrr is a very useful R package for working with lists. 4.3.3.1 Lists and Vectors Lists and Vectors are different data types, but in some ways they behave the same: Find the length of a list: length(person) # Same for vectors and lists! [1] 3 Combine two lists: c(A, person) # Same for vectors and lists! [[1]] [1] 42 [[2]] [1] "chicken" [[3]] [1] TRUE [[4]] [,1] [,2] [,3] [1,] 1 3 5 [2,] 2 4 6 $color [1] "yellow" $name [1] "Millard Fillmore" $occupation [1] "President" $birth_year [1] 1800 A == "chicken" # Compare against a character color FALSE TRUE FALSE FALSE FALSE However, there are some things that vectors can do that lists can’t: A + 1 # Add a number to each component (won't work) Error in A + 1: non-numeric argument to binary operator A == T # Compare against a logical (won't work) Error in eval(expr, envir, enclos): 'list' object cannot be coerced to type 'logical' A == 12 # Compare against a numeric (won't work) Error in eval(expr, envir, enclos): 'list' object cannot be coerced to type 'double' So there are trade-offs when deciding whether a list or a vector is most appropriate. This video discusses lists. https://youtu.be/-Y02JkqDlWU 4.3.3.2 Lists of Vectors Certain types of lists show up all the time in R, lists of vectors: vec_1 <- c("Alice", "Bob", "Charlie") vec_2 <- c(99.4, 87.6, 22.1) vec_3 <- c("F", "M", "M") special_list <- list(name = vec_1, grade = vec_2, sex = vec_3) special_list $name [1] "Alice" "Bob" "Charlie" $grade [1] 99.4 87.6 22.1 $sex [1] "F" "M" "M" Here, each list stores a different piece of information about several people. Here’s another example: rocks <- list(specimen=c("A", "B", "C"), type=c("igneous", "metamorphic", "sedimentary"), weight=c(21.2, 56.7, 3.8), age=c(120, 10000, 5000000) ) rocks $specimen [1] "A" "B" "C" $type [1] "igneous" "metamorphic" "sedimentary" $weight [1] 21.2 56.7 3.8 $age [1] 120 10000 5000000 When defining the rocks list, we’ve spread the command across multiple lines for clarity. The commas at the end of some of the lines separate the elements of the list. R will continue reading the next line until it finds the closing parenthesis, ). There are so many sets of data that fit into this pattern, that R has a special data type called a data frame, which we will discuss in the next section. Create a matrix, a character vector, and a logical object, then place them all in a new list called “my_list”, with the names “my_matrix”, “my_vector”, and “my_logical”. 4.3.4 Data Frames At their core, data frames are just lists of vectors, but they also have some extra features as well. Here, we’ll re-define the rocks list from the previous section, but this time we’ll create it as a data frame: rocks <- data.frame(type = c("igneous", "metamorphic", "sedimentary"), weight = c(21.2, 56.7, 3.8), age = c(120, 10000, 5000000)) rocks # We'll add the specimen names later Now when R displays rocks, it arranges the data in rows and columns, similar to how it displays matrices. Unlike matrices, however, the columns don’t all have to be the same data type! Remember that a data frame is basically a list of vectors, so even though it can contain different types of data (because it is a list), each column is a vector, which means each column must have all elements of the same type. The names of the columns are the names of the components of rocks, and the rows contain the data from each component vector. Remember that a data frame is basically a list of vectors, so we can access a component by its position or name: rocks[[1]] [1] "igneous" "metamorphic" "sedimentary" rocks$weight [1] 21.2 56.7 3.8 However, we can also access a data frame as if it were a matrix: rocks[1,3] # Get the datum from the first row, third column. [1] 120 rocks[1,] # Get the first row, this gives another data frame with a single row. rocks[,2] # Get the second column, this gives a vector. [1] 21.2 56.7 3.8 Here’s how to get the shape of a data frame (number of rows and columns): dim(rocks) [1] 3 3 If we start with a list of vectors, we can convert it to a data frame with as.data.frame: people <- list(name = c("Alice", "Bob", "Charlie"), grade = c(99.4, 87.6, 22.1), sex = c("F", "M", "M")) as.data.frame(people) R comes with pre loaded with several data frames, such as mtcars, which contains data from the 1974 Motor Trend Magazine for 32 different automobiles: mtcars A list of included data sets in R can be found by running data(). Look at the column of car names on the left side of the mtcars data frame. It doesn’t have a column name (like mpg, cyl, etc.), because it’s not actually a column. These are row names, and you can access them like this: row.names(mtcars) [1] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" [4] "Hornet 4 Drive" "Hornet Sportabout" "Valiant" [7] "Duster 360" "Merc 240D" "Merc 230" [10] "Merc 280" "Merc 280C" "Merc 450SE" [13] "Merc 450SL" "Merc 450SLC" "Cadillac Fleetwood" [16] "Lincoln Continental" "Chrysler Imperial" "Fiat 128" [19] "Honda Civic" "Toyota Corolla" "Toyota Corona" [22] "Dodge Challenger" "AMC Javelin" "Camaro Z28" [25] "Pontiac Firebird" "Fiat X1-9" "Porsche 914-2" [28] "Lotus Europa" "Ford Pantera L" "Ferrari Dino" [31] "Maserati Bora" "Volvo 142E" You can also access the column names like this: names(mtcars) [1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" [11] "carb" These are two examples of attributes, which are like extra information which are attached to an object. We’ll discuss attributes more later when we discuss R objects. The column names and row names are just vectors, and you can access / modify them as such: row.names(rocks) <- c("A", "B", "C") rocks names(rocks)[[1]] <- "rock type" rocks Row and column names are allowed to have spaces in them, but you must be careful how you access them. The following code will not work: rocks$rock type , because R will stop looking for the name you are referencing once it encounters a space. To access this column, you must enclose the reference in “backticks” ( ` ) like so: rocks$`rock type`. Look at the set of available data sets in R, and pick 2 data sets. For each data set, answer the following questions: What are the column names? What are the row names? What is the data type for each column? How many rows are in the data frame? How many columns are in the data frame? This is the last section you should include in Progress Check 2. Knit your output document and submit on Canvas. Any feedback for this section? Click here This video discusses lists of vectors. https://youtu.be/9BGRIC1js04 "],["r-objects.html", "4.4 R Objects", " 4.4 R Objects Wherever you are right now, look around your environment. Pick an object and study its attributes. It probably has a shape, a color, a weight, and many other ways of describing it. Now pick another object, and note how it is different than the first in terms of its attributes. What does the word “object” really mean? It’s often easier to give examples than to give a precise definition, but generally objects are “things you can do things with”. That is, you can usually look at them, touch them, smell them, and move them around (when appropriate/possible, of course!). Another useful definition is that objects are nouns. Different objects have different purposes and attributes. Many of these ideas will be true for R objects as well. We’ve already introduced the concepts of objects in R in passing, but here we briefly focus on what they are and how to work with them. Download the progress check 3 template into your scripts folder, and follow the instructions. That document should include all progress reports from Section 4.4 through (and including) Section 5.4 4.4.1 Everything is an object in R What exactly is an object in R? As in real life, it can be difficult to give a definition, but easier to give examples. Here are some examples of objects in R: A numeric variable A vector A matrix A list A data frame A function This list is not exhaustive, but most objects we deal with will look like one of these. In many programming languages, functions are handled differently from other types of objects (i.e. they are not “first class” objects). In R, they are treated the same as any other type of object. You can assign them to variables, pass them to other functions, and can be returned from a function. This is similar to the behavior of Java and Python, but different from C. 4.4.2 Assigning Objects Any object can be assigned to a variable, as we’ve been doing already. Here’s an example: a <- "pink pineapple" The <- is called an assignment operator. This is the most common way of assigning objects in R, but there are others. Sometimes you may see: a = "pink pineapple" which in most cases, has the exact same effect as using the <-, but in a few instances, it has a different effect. Our recommendation is to always use <- when making object assignments. There are other assignment operators as well, <<-, ->>, and ->, but we will not discuss these. You can find out more with the command ?assignOps. One neat thing you can do is assign multiple variables at the same time: a <- b <- "Hello" a [1] "Hello" b [1] "Hello" Even though a and b were assigned at the same time, they are still different! So if you change a with a <- “goodbye”, then the value of b will still be “Hello”. 4.4.3 Attributes Every object in R has attributes, extra information that’s “attached” to the object. Every object has a length attribute: a <- c(1, 2, 3, 4) b <- c("bonjour", "au revoir") length(a) [1] 4 length(b) [1] 2 Every object has a length. Try creating an example of the following and examining the length: A logical vector with 5 elements A 2 x 2 matrix The mtcars dataframe Every R object has a mode as well, which tells you what type of object you have. Here are some examples: mode(a) [1] "numeric" mode(b) [1] "character" Aside from these two attributes, you can list all attributes of an object like this: attributes(mtcars) $names [1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" [11] "carb" $row.names [1] "Mazda RX4" "Mazda RX4 Wag" "Datsun 710" [4] "Hornet 4 Drive" "Hornet Sportabout" "Valiant" [7] "Duster 360" "Merc 240D" "Merc 230" [10] "Merc 280" "Merc 280C" "Merc 450SE" [13] "Merc 450SL" "Merc 450SLC" "Cadillac Fleetwood" [16] "Lincoln Continental" "Chrysler Imperial" "Fiat 128" [19] "Honda Civic" "Toyota Corolla" "Toyota Corona" [22] "Dodge Challenger" "AMC Javelin" "Camaro Z28" [25] "Pontiac Firebird" "Fiat X1-9" "Porsche 914-2" [28] "Lotus Europa" "Ford Pantera L" "Ferrari Dino" [31] "Maserati Bora" "Volvo 142E" $class [1] "data.frame" To access a specific attribute of an object, you can do this: attr(mtcars, "class") # Get the class attribute for the mtcars data frame [1] "data.frame" 4.4.4 Null Objects There is a special object called the NULL object, which really just represents “nothing”. It’s used mainly if you want to remove an element from a list: a <- list(1, 2, 3) a[[2]] <- NULL # Replace component 2 with "nothing" a [[1]] [1] 1 [[2]] [1] 3 Or if a function is supposed to return but doesn’t have an object to return (more on this later when we discuss functions). 4.4.5 Removing Objects Sometimes you want to get rid of an object! In R, you can use the rm function like so: a <- "an object" rm(a) a Error in eval(expr, envir, enclos): object 'a' not found As you can see, the error message indicates that a has been removed. Sometimes, you’d like to remove all the objects in your environment. To do this, you can use the command: rm(list=ls()) This video discusses objects. https://youtu.be/VrgoEoMo9ZM Any feedback for this section? Click here "],["working-with-data.html", "Chapter 5 Working with Data", " Chapter 5 Working with Data “The goal is to turn data into information, and information into insight.” – Carly Fiorina, former CEO of Hewlett-Packard In the previous chapter, we’ve talked about the different types of data that R stores and the different structures that R stores data in. We’ve mostly just made up numbers, character strings, and logical values for illustration. In this chapter, we’ll use R to do interesting things with real data. This is by far the most popular use of the R programming language, and arguably the most fun! You’ll learn how to read data sets into R, do interesting things with them, and save your results. "],["quick-example.html", "5.1 Quick Example", " 5.1 Quick Example Before diving into detail, let’s do a quick example so you can begin to see what is possible with data in R. As we mentioned in the last chapter, R includes some pre-packaged data sets, which you can access with the data() command. One of the data sets is Seatbelts, which documents road casualties in Great Britain between 1969 and 1984. Firstly, we need to convert Seatbelts to a data frame, because it starts out as a “Time-Series”, which we haven’t discussed. Seatbelts <- data.frame(as.matrix(Seatbelts), date = time(Seatbelts)) # Convert Time Series to data frame We’ve also added a month and year column look at the dimensions of the data set with the dim command: dim(Seatbelts) # Get the number of dimensions in the Seatbelts data frame [1] 192 9 This shows that there are 192 rows (months), and 9 columns (variables measured each month). We could also determine the number of rows and columns separately using the nrow and ncol functions. To view the first few rows of the Seatbelts data frame, use the head command: head(Seatbelts) # View first few rows of the Seatbelts dataset This is a good way to learn which variables are being measured (columns) and see some example observations (rows) for each variable. Because these data are included with R, more information about each variable can be found with: ?Seatbelts Next, let’s view a summary of each column with the summary function: summary(Seatbelts) DriversKilled drivers front rear Min. : 60.0 Min. :1057 Min. : 426.0 Min. :224.0 1st Qu.:104.8 1st Qu.:1462 1st Qu.: 715.5 1st Qu.:344.8 Median :118.5 Median :1631 Median : 828.5 Median :401.5 Mean :122.8 Mean :1670 Mean : 837.2 Mean :401.2 3rd Qu.:138.0 3rd Qu.:1851 3rd Qu.: 950.8 3rd Qu.:456.2 Max. :198.0 Max. :2654 Max. :1299.0 Max. :646.0 kms PetrolPrice VanKilled law Min. : 7685 Min. :0.08118 Min. : 2.000 Min. :0.0000 1st Qu.:12685 1st Qu.:0.09258 1st Qu.: 6.000 1st Qu.:0.0000 Median :14987 Median :0.10448 Median : 8.000 Median :0.0000 Mean :14994 Mean :0.10362 Mean : 9.057 Mean :0.1198 3rd Qu.:17202 3rd Qu.:0.11406 3rd Qu.:12.000 3rd Qu.:0.0000 Max. :21626 Max. :0.13303 Max. :17.000 Max. :1.0000 date Min. :1969 1st Qu.:1973 Median :1977 Mean :1977 3rd Qu.:1981 Max. :1985 Since each column is numeric, R shows a five number summary (minimum, first quartile, median, third quartile, maximum) and mean for each column. We learn, for example, that the average number of drivers killed per month is 1670, and that the greatest price of petrol was £0.13 per litre! Let’s view a histogram of DriversKilled: hist(Seatbelts$DriversKilled, breaks = 20) Figure 5.1: Histogram of Drivers Killed in Seatbelt data We see that in some months, more than 150 drivers were killed! We can calculate how many exactly like so: sum(Seatbelts$DriversKilled > 150) [1] 33 To investigate the effect of the seat belt law, let’s create a scatter plot of drivers killed against time: plot(Seatbelts$date, Seatbelts$DriversKilled) Figure 5.2: UK Seatbelt deaths vs time By adding a col argument to the plot function, we can color the points based on whether the law was in effect: plot(Seatbelts$date, Seatbelts$DriversKilled, col = (Seatbelts$law + 2)) Figure 5.3: UK Seatbelt deaths vs time, red = no seatbelt law, green = seatbelt law There do appear to be fewer deaths, but there is so much fluctuation in deaths each year that it’s difficult to tell. Let’s change the x-axis to reflect month of the year instead of date: plot((Seatbelts$date %% 1) * 12 + 1, Seatbelts$DriversKilled, xlab = "Month", col = Seatbelts$law + 2) Figure 5.4: UK Driver Deaths vs. Month This plot shows that there is a clear seasonal effect in the number of deaths with higher deaths occurring in the Fall/Winter compared to Spring/Summer. We can also see that within each month, the traffic deaths after enacting the Seatbelt law are among the lowest. Another data set included in R is mtcars. Following the example above, find the dimension of mtcars and have R print out a summary of each column, then create a scatter plot of fuel economy (mpg) versus engine displacement. What do you observe about the relationship between these two variables? This concludes the quick example. In the rest of this chapter, we’ll talk in more detail about the different steps of working with data, and how to complete them using R! People often use data in order to answer questions, but often times, learning about data can generate even more questions than it answers. Take a moment to think of a question that you have about the Seatbelts dataset. Do you think the question can be answered using the data alone? If not, what other sources of data might be available which can help answer the question? Any feedback for this section? Click here "],["reading-writing-data.html", "5.2 Reading / Writing Data", " 5.2 Reading / Writing Data Of course, if we want work on data which is NOT included in R, we have to read that data into R in order to work with it. That is, the data are normally somewhere on your computer’s hard drive (or SSD), and you must run a command in R which reads that data into your R environment. 5.2.1 Olympic Athletes Example Let’s look at another example, this time with a data set of Olympic athletes. This is just a subset of the full dataset, to make it easier for you to work with. Here’s how we’ll read them into R: # Read the csv file into a data frame called athletes athletes <- read.csv("data_raw/olympic_athletes.csv") # Print a summary of the data frame summary(athletes) X ID Name Sex Min. : 1 Min. : 4 Length:5000 Length:5000 1st Qu.:1251 1st Qu.: 35321 Class :character Class :character Median :2500 Median : 68266 Mode :character Mode :character Mean :2500 Mean : 68668 3rd Qu.:3750 3rd Qu.:102377 Max. :5000 Max. :135559 Age Height Weight Team Min. :12.00 Min. :139.0 Min. : 33.00 Length:5000 1st Qu.:21.00 1st Qu.:168.5 1st Qu.: 61.00 Class :character Median :25.00 Median :175.0 Median : 70.00 Mode :character Mean :25.65 Mean :175.4 Mean : 70.91 3rd Qu.:28.00 3rd Qu.:183.0 3rd Qu.: 80.00 Max. :74.00 Max. :223.0 Max. :182.00 NA's :183 NA's :1109 NA's :1131 NOC Games Year Season Length:5000 Length:5000 Min. :1896 Length:5000 Class :character Class :character 1st Qu.:1960 Class :character Mode :character Mode :character Median :1988 Mode :character Mean :1978 3rd Qu.:2002 Max. :2016 City Sport Event Medal Length:5000 Length:5000 Length:5000 Length:5000 Class :character Class :character Class :character Class :character Mode :character Mode :character Mode :character Mode :character The above command only works because the data set is in a particular location (the data folder), and is in a particular format (csv). In the sections that follow, we’ll discuss how to address both of these issues. 5.2.2 Locating your data set R is capable of reading data from your computer, no matter where it is, as long as you “point” R to the correct location. The location is usually specified with a file path, which is a character string that specifies the folder structure that holds your file. By default, R starts “looking” from the current working directory, and the file path used was data_raw/olympic_athletes.csv. This means that R will look inside the current working directory for a folder called data_raw, and if it exists, R will look inside data_raw for a file called olympic_athletes.csv. In this class, you should be working within an RStudio project, which automatically sets the working directory. If you created the folders as instructed earlier, then you should already have a data_raw folder in your project directory. Download the olympic athletes data set from this link and save it in your data_raw folder. In your progress check document, simply write: “Olympic Data Downloaded”. 5.2.3 Reading CSV files A common way of storing data in a computer file is called CSV, which stands for comma-separated values. These files are plain text, so you can open them in any text editor like Word, Notepad, or even Google Docs. Just like a data frame, these files contain data in rows and columns, where on each line, the columns are separated from each other with a comma (,), which is technically called a delimiter. Programs like Excel, Google Sheets, and R can read these files and understand their row-column structure. In R, the function to read CSV files (as you saw above) is read.csv. In addition, if you call up the help file for read.csv using ?, you’ll see that there are other similar functions as well, including read.table, and read.delim. In many object oriented languages, the “dot” (.) is a special symbol used to access an attribute or method of an object. In R, however, variable names and function names can contain a dot, and the dot has no special purpose. There are some exceptions, however, that relate to function overloading, and R formulas, but these are advanced topics that will not be discussed here. These functions are actually all different variations of the same, generic, function called read.table. The difference is that read.csv, read.delim, and the others make different assumptions about what delimiters are being used, and how decimal numbers are displayed (e.g. one-and-a-half may be written as 1.5, or 1,5 depending on where you live). We will discuss functions and arguments more in the next chapter, but for now, see the following table for when to use each function: Function Delimiter Decimals read.table Must specify with sep=… . read.csv , . read.csv2 ; , read.delim tab) . read.delim2 tab) , Any of these functions accepts the argument header=FALSE, which indicates that the first row of the file does not contain column names. Without this argument, R will assume the first row does contain column names. If our Olympic athletes data did not contain headers in the first row, we would use this: athletes <- read.csv("data_raw/olympic_athletes.csv", header=FALSE) 5.2.4 Writing CSV files R also has the capability to write a data frame to a CSV file on your computer, that could then be read by Excel, Sheets, etc. Let’s suppose we wanted to save a version of the athletes data with only the Sex and Age columns. We could use the write.csv function: # Make a new data frame with only the Sex and Age columns athletes2 <- athletes[,c("Sex", "Age")] # Save the new data frame as a CSV in the clean data folder write.csv(athletes2, "data_clean/olympic_athletes_age_sex.csv") Notice we created a new data frame by selecting only the desired columns. We will talk more about different ways to select data when we discuss indexing. Notice also that the write.csv function requires that we give it the name of the data frame being saved (athletes2), then the file path for the csv file that the data will be written to (\"data_clean/olympic_athletes_age_sex.csv\"). write.csv is an example of a function which takes multiple arguments, separating them with a comma (,). Usually, these arguments must be specified in order, but more will be said about this later. Create a version of the athletes data frame which contains the athletes’ names and their sports. Save the new data frame as a CSV file in your data_clean folder with the file name “olympic_athletes_name_sport.csv”. Include the code in your progress check assignment. The read and write terminology may seem odd if you have not heard those terms before. Your computer’s hard drive (or SSD) will store data which will be remembered even after you turn off your computer. The process of getting data from, and putting data on your hard drive (or SSD) is called reading and writing. Any feedback for this section? Click here "],["summary-statistics.html", "5.3 Summary Statistics", " 5.3 Summary Statistics Reading and writing data is useful, but the power of R is doing interesting things with the data! Let’s perform a few operations with the Olympic athletes data to demonstrate some important functions for data analysis. As we’ve seen, the summary function automatically performs some summary statistics on each column of a data frame. Let’s see how to produce these and other results manually. 5.3.1 Quantitative Variables To showcase the functions R provides to summarize quantitative variables, we’ll look at the Age column of our data frame, which is stored as an integer vector in R. What other R data types might be used to store quantitative data? However, Age contains NA values, as we know from running the following function: sum(is.na(athletes$Age)) # Count how many NA's are in the Age column [1] 183 Pause and think through what’s happening in the above code. The is.na function returns a logical array which is true whenever the Age column is NA. So why does the sum function produce the number of NA’s? As a cleaning step, we must first remove the NA values: age <- athletes$Age # Assign the Ages column to a variable age <- age[!is.na(age)] # Extract only the elements which are not NA (more on this when we discuss advanced indexing) This type of “data cleaning” is a very common first step when performing data analysis. You will get more opportunities to clean data later in the course. Here are some functions R provides to summarize quantitative variables. age_min <- min(age) # Find the minimum age age_med <- median(age) # Find the median age age_max <- max(age) # Find the maximum age age_mean <- mean(age) # Find the average age age_sd <- sd(age) # Find the standard deviation of age age_var <- var(age) # Find the variance of age Let’s put all these results in a named list. In the following code, read the comments carefully to understand how the code is being organized onto multiple lines. # Create a list containing all the stats age_stats <- list( # R knows that this command continues until a closed parenthesis min = age_min, median = age_med, max = age_max, mean = age_mean, sd = age_sd, var = age_var ) # This could all go on one line, but it looks more organized this way. age_stats $min [1] 12 $median [1] 25 $max [1] 74 $mean [1] 25.65373 $sd [1] 6.495693 $var [1] 42.19402 Using the Olympic Athletes data, create a list called weight_stats with the mean, median, and standard deviation of the Weight column. If you get NA values for the statistics, you should include the na.rm=T argument like so: mean(weight, na.rm=T), to remove the NA values before computing the statistics. Visualization will be discussed more later, but we’ll show one plot now, to show how multiple summary statistics can be shown at the same time. hist(age, breaks = 50) abline(v = age_mean, col = "blue", lty = 2, lwd = 3) abline(v = age_med, col = "red", lty = 2, lwd = 3) It looks like the distribution of Age is right skewed, consistent with the fact that the mean is greater than the median. Of course, having more than one quantitative variable allows us to compare them against each other. Here’s how to compute the covariance between two quantitative variables: cov(athletes$Age, athletes$Height, use="complete.obs") [1] 6.483675 The argument use=“complete.obs” is one way to deal with NA values in the cov function. This makes R remove any observations which are NA in either the first or second variable. There are other ways as well, which you can check using the help function: ?cov. You can also compute the correlation between two variables like so: cor(athletes$Age, athletes$Height, use="complete.obs") [1] 0.1104457 Using the cov or cor functions on an entire data frame or matrix will produce a correlation matrix of the columns. Here’s an example with the mtcars data frame: cor(mtcars) mpg cyl disp hp drat wt mpg 1.0000000 -0.8521620 -0.8475514 -0.7761684 0.68117191 -0.8676594 cyl -0.8521620 1.0000000 0.9020329 0.8324475 -0.69993811 0.7824958 disp -0.8475514 0.9020329 1.0000000 0.7909486 -0.71021393 0.8879799 hp -0.7761684 0.8324475 0.7909486 1.0000000 -0.44875912 0.6587479 drat 0.6811719 -0.6999381 -0.7102139 -0.4487591 1.00000000 -0.7124406 wt -0.8676594 0.7824958 0.8879799 0.6587479 -0.71244065 1.0000000 qsec 0.4186840 -0.5912421 -0.4336979 -0.7082234 0.09120476 -0.1747159 vs 0.6640389 -0.8108118 -0.7104159 -0.7230967 0.44027846 -0.5549157 am 0.5998324 -0.5226070 -0.5912270 -0.2432043 0.71271113 -0.6924953 gear 0.4802848 -0.4926866 -0.5555692 -0.1257043 0.69961013 -0.5832870 carb -0.5509251 0.5269883 0.3949769 0.7498125 -0.09078980 0.4276059 qsec vs am gear carb mpg 0.41868403 0.6640389 0.59983243 0.4802848 -0.55092507 cyl -0.59124207 -0.8108118 -0.52260705 -0.4926866 0.52698829 disp -0.43369788 -0.7104159 -0.59122704 -0.5555692 0.39497686 hp -0.70822339 -0.7230967 -0.24320426 -0.1257043 0.74981247 drat 0.09120476 0.4402785 0.71271113 0.6996101 -0.09078980 wt -0.17471588 -0.5549157 -0.69249526 -0.5832870 0.42760594 qsec 1.00000000 0.7445354 -0.22986086 -0.2126822 -0.65624923 vs 0.74453544 1.0000000 0.16834512 0.2060233 -0.56960714 am -0.22986086 0.1683451 1.00000000 0.7940588 0.05753435 gear -0.21268223 0.2060233 0.79405876 1.0000000 0.27407284 carb -0.65624923 -0.5696071 0.05753435 0.2740728 1.00000000 However, this only works if all columns of the data frame (or matrix) are numeric. Here’s what happens if we try the same thing on the athletes data: cor(athletes) Error in cor(athletes): 'x' must be numeric 5.3.2 Categorical Variables To showcase the functions R provides for categorical variables, we’ll look, at the Sport column, which is stored as a character vector in R. What other R data types might be used to store categorical data? Are there any NA values in this column? sport <- athletes$Sport sum(is.na(sport)) [1] 0 It turns out the answer is no, so there’s no need to remove anything. In a character vector like this, we expect there to be many duplicated values. We can see a list of all the unique values with the following: unique(sport) [1] "Hockey" "Wrestling" [3] "Swimming" "Basketball" [5] "Biathlon" "Speed Skating" [7] "Fencing" "Weightlifting" [9] "Equestrianism" "Archery" [11] "Cross Country Skiing" "Gymnastics" [13] "Tennis" "Athletics" [15] "Cycling" "Bobsleigh" [17] "Shooting" "Sailing" [19] "Alpine Skiing" "Art Competitions" [21] "Canoeing" "Football" [23] "Rowing" "Figure Skating" [25] "Nordic Combined" "Judo" [27] "Short Track Speed Skating" "Water Polo" [29] "Snowboarding" "Taekwondo" [31] "Diving" "Handball" [33] "Softball" "Boxing" [35] "Tug-Of-War" "Ski Jumping" [37] "Table Tennis" "Ice Hockey" [39] "Modern Pentathlon" "Golf" [41] "Baseball" "Volleyball" [43] "Luge" "Badminton" [45] "Trampolining" "Curling" [47] "Beach Volleyball" "Polo" [49] "Rugby Sevens" "Synchronized Swimming" [51] "Triathlon" "Skeleton" [53] "Freestyle Skiing" "Military Ski Patrol" [55] "Lacrosse" "Rhythmic Gymnastics" [57] "Rugby" Using the numbers in brackets to the left as our guide, we can see that there are 57 unique values, but this can also be determined by running: length(unique(sport)) [1] 57 It would be nice to see how many times each entry occurs in the data set. This is what the table function does: table(sport) sport Alpine Skiing Archery Art Competitions 148 41 64 Athletics Badminton Baseball 728 32 19 Basketball Beach Volleyball Biathlon 98 18 100 Bobsleigh Boxing Canoeing 53 121 112 Cross Country Skiing Curling Cycling 174 8 205 Diving Equestrianism Fencing 56 121 184 Figure Skating Football Freestyle Skiing 44 138 9 Golf Gymnastics Handball 5 498 61 Hockey Ice Hockey Judo 101 83 76 Lacrosse Luge Military Ski Patrol 1 25 2 Modern Pentathlon Nordic Combined Polo 37 25 4 Rhythmic Gymnastics Rowing Rugby 9 190 4 Rugby Sevens Sailing Shooting 6 126 218 Short Track Speed Skating Skeleton Ski Jumping 23 4 45 Snowboarding Softball Speed Skating 19 10 104 Swimming Synchronized Swimming Table Tennis 399 9 36 Taekwondo Tennis Trampolining 10 45 4 Triathlon Tug-Of-War Volleyball 6 5 50 Water Polo Weightlifting Wrestling 79 85 123 Let’s save this table to a list as before: # Assign summary statistics to variables sport_n_unique <- length(unique(sport)) sport_counts <- table(sport) # Combine them into a list sport_stats <- list( number_unique = sport_n_unique, counts = sport_counts ) Again, a visualization may be useful here: par(mar = c(5, 15, 4, 2) + 0.1) # Command to make the labels fit barplot(table(sport), horiz = T, las = 2) # Bar plot So we see that in our data set, athletics, swimming, and gymnastics have the most athletes (remember, each row is an athlete). Using the Olympic athletes data, create a list called season_stats with a table of counts for the Season variable. It’s always important to remember what the rows of your data set represent. In the Olympic athletes example, one athlete may occupy multiple rows, if they competed in multiple olympic games. This impacts how you should interpret the summary statistics computed above (mean, median, counts, etc.). Since an athlete may show up for multiple olympic games, what impact could this have on summary statistics for the Height, Weight, and Sex variables? Can you give an example of what might happen? What other variables may be impacted? What R code would you write to determine if an athlete occurred multiple times in the data frame? 5.3.3 Saving an RData file Finally, we may want to save these results for use in R later. First, we’ll create a new list to put our two stats list in (remember, we can have lists inside of other lists!). # Create list athlete_stats <- list( age = age_stats, sport = sport_stats ) Remember that the names function retrieves the column names for a data frame? It also retrieves the names of a list (after all, a data frame is just a fancy list, right?)! The following commands may be useful for remembering what the contents of our stats list: names(athlete_stats) names(athlete_stats$age) names(athlete_stats$sport) To save these results, we can use the saveRDS function: saveRDS(athlete_stats, "data_clean/athlete_stats.rds") Later, we can use the following command to load the RDS file back into R: rm(athlete_stats) # Remove athlete stats to prove we are loading it from the hard drive athlete_stats <- readRDS("data_clean/athlete_stats.rds") # Load the RDS file and name it athlete_stats athlete_stats$age # Show that we have loaded the data by printing the age stats $min [1] 12 $median [1] 25 $max [1] 74 $mean [1] 25.65373 $sd [1] 6.495693 $var [1] 42.19402 Notice the file ends with .rds, indicating that this is a special RDS type which can only be read by R. This is different from other data formats like CSV, which are plain text and can be read by other programs like Excel or Sheets. RDS should only be used when you want to save work that you want to resume in R later. If at all possible, you should prefer using plain text formats rather than RDS. RDS stands for R Data Serialization. This is R’s version of object serialization, just like the io.Serializable interface in Java or the pickle module in Python. As with other languages, R’s serialization can only be used in R. The RDS format works for any R Object, not just lists, so it can be used for vectors, matrices, factors, and even functions. Any feedback for this section? Click here "],["data-formatting.html", "5.4 Data Formatting", " 5.4 Data Formatting Before we continue working with data, here are a few comments about data formatting. Many data sets can be thought of as one or more observations of one or more variables. R functions work best when the data are formatted into rows and columns, so that each row is an observation, and each column is a variable. Unfortunately, sometimes data do not follow this convention, or worse, it may not be clear what the observations or variables are. Working with data often involves answering multiple questions, and different questions may require thinking of observations and variables differently. In R, there are ways of changing the structure of data to suit your particular needs, but these are intermediate topics which will not be discussed here. One concept related to data organization is called “Tidy Data”, which you can read more about here. This focus on tidyness has led to the development of a set of R packages collectively called the “tidyverse”, which has become very popular for R analysis. The tidyverse will not be covered in this class, but a later module will provide extensive experience with it. 5.4.1 “Raw” data vs. “Clean” data. Why is there a “data_raw” folder and a “data_clean” folder, and not just a “data” folder? The idea is that the data_raw folder contains all of the original data sets that you start with, before any cleaning or summarization take place, and any cleaned, modified, or created data sets that result from your data analysis should be stored in the “data_clean” folder (or possibly even a “results” folder). This distinction ensures that the original data sets are preserved in their unedited state, just in case you need to start over from the beginning to answer a different question, and in order for others to easily replicate your work. This is why the data in the folder should be thought of as read only. Sometimes people even modify the permissions of the raw data files on their computer to prevent anyone from accidentally deleting or overwriting the raw data. The “clean” moniker comes from the fact that often times data sets need some “cleaning” such as removing duplicates, removing NA values, discarding irrelevant data, etc. There are many other ways of organizing data, but the principle here is to separate the original data sets from any intermediate data sets. Perhaps you’ve never thought about how data should be structured. Consider an experiment which measures the temperatures of five guinea pigs for each of four different days. Think about organizing each row to be a guinea pig and each column to be a day. Can you think of an R function to compute the average temperature on day 1? How about the average temperature for guinea pig 3? How do your answers change if the data are arranged with days as the rows and guinea pigs as columns? Can you think of another way to organize the data? This is the last section you should include in Progress Check 3. Knit your output document and submit on Canvas. Any feedback for this section? Click here "],["indexing.html", "5.5 Indexing", " 5.5 Indexing Part of doing interesting things with data is being able to select just the data that you need for a particular circumstance. You’ve already seen how to get a particular element from a vector or matrix, or a specific component from a list, using indices. A datum’s index is its position in the vector or list. For example, to get the second element of a vector A, we use the index 2 in square brackets: A[2]. The process of selecting elements using their indices is called indexing, and R provides multiple ways of indexing vectors. Below we’ll cover some basic indexing and more advanced indexing for the different data structures in R. Download the progress check 4 template and follow the instructions. That document should include all progress reports from Section 5.5 through (and including) Section 6.1. 5.5.1 Vectors Let’s define a vector and access an element in the way you already know: # Create an example vector V <- c("A", "B", "C", "D", "E", "F", "G", "H", "I") # Access the 5th element V[5] [1] "E" Unlike many other languages, R indices start with 1, not 0! so the first element is accessed as A[1], etc. Here are some other ways you can index as well. You can access multiple indices at the same time using a numeric vector of indices: V[c(1, 2, 5)] # Access elements 1, 2, and 5 [1] "A" "B" "E" If you need to access several indices in a row, you can use a colon (:): V[2:7] # Access elements 2 through 7 [1] "B" "C" "D" "E" "F" "G" You can even combine these two methods: V[c(1:3, 6)] # Access elements 1, 2, 3, and 6 [1] "A" "B" "C" "F" Note that the following are all equivalent ways to access the first three elements of V: V[1:3] V[c(1,2,3)] V[c(1:3)] V[c(1:2,3)] can you think of another example? But the first way would probably be the most clear for someone else to understand. All of these methods can work with assignment as well: V[c(1, 7:9)] <- "X" # Change elements 1, 7, 8, and 9 to "X" V [1] "X" "B" "C" "D" "E" "F" "X" "X" "X" Even though these examples use a character vector, this indexing works on vectors of any type. 5.5.2 Matrices To access an element of a matrix, we have to specify the row and the column. Let’s create a matrix from the V vector and access one of its elements: M <- matrix(V, 3, 3) # Create matrix M with data from vector V M [,1] [,2] [,3] [1,] "X" "D" "X" [2,] "B" "E" "X" [3,] "C" "F" "X" M[1,2] # Access the element in row 1, column 2 [1] "D" Recall that we can access an entire row or column by leaving the other index blank: M[1,] # Access the entire first row [1] "X" "D" "X" M[,2] # Access the entire second column [1] "D" "E" "F" But any of the indexing we just used for vectors can also be used on matrices M[1:2, c(2, 3)] # Access the elements in rows 1 and 2, columns 2 and 3. [,1] [,2] [1,] "D" "X" [2,] "E" "X" Finally, there is one more way of indexing Matrices (for now), that provides only one index: M[5] # Access the "5th" element of the matrix [1] "E" If you give one index, then R will count down the first row, then the second, then the third, etc., until it reaches the index you specified. Notice how this agrees with the 5th element of the vector V, which was used to make our matrix! And finally, as before, any of these indexing methods can be used to change an element’s value: M[2, 1:3] <- "Hats" M [,1] [,2] [,3] [1,] "X" "D" "X" [2,] "Hats" "Hats" "Hats" [3,] "C" "F" "X" 5.5.3 Lists So far we’ve discussed three different ways of accessing elements in a list: L <- list(A = "apple", b = "banana", c = "cherry") L[[1]] # Access using index number [1] "apple" L[["b"]] # Access using component name [1] "banana" L$c # Access using component name and dollar sign notation [1] "cherry" And these are basically the only options. Unfortunately, you cannot use a vector of indices in order to access multiple list components at once: L[[1:3]] # This does not work Error in L[[1:3]]: recursive indexing failed at level 2 What L[[1:3]] actually does (as the error message might suggest), is access elements within a nested list, but that is beyond the scope of this class. Create a vector containing the numbers 1 through 1000 in order (hint: try using 1:1000 on the right of the assignment operator). Then, change elements 4, 196, and 501 through 556 to “brussel sprouts”. What happened to the other elements in the vector? 5.5.4 Data Frames Remember that data frames are just lists of vectors, so the same indexing rules for lists and vectors apply. But remember that matrix indexing rules also apply! Here are some examples with the Olympic athletes data. athletes3 <- athletes[1:20, 1:5] # Get the first 20 rows and first 5 columns, and assign it to athletes3 athletes3$Name # Get the Name column [1] "Berta Hrub" [2] "Joaquim Vital" [3] "Madelon Baans" [4] "Achille Canna" [5] "Antje Buschschulte (-Meeuw)" [6] "Ludwig Gredler" [7] "Pawe Abratkiewicz" [8] "Jerzy Zdzisaw Janikowski" [9] "Giuseppe \\"Peppino\\" Tanti" [10] "Carl-Jan Gustaf David Hamilton" [11] "Bla Nagy" [12] "Vincent Vittoz" [13] "Joyce May Racek (-Markley, -Budrunas)" [14] "Seiichiro Kashio" [15] "Surzer" [16] "Dimitrios Kantzias" [17] "Kim Gwang-Suk" [18] "Joshua Noel \\"Josh\\" Laban" [19] "Alejandro Vidal Arellano" [20] "Mariusz Latkowski" Remember that each column of a data frame is just a vector, so we can use list indexing to access the Name column, then immediately use vector indexing to get only the indices that we want: athletes3$Name[1:3] # Get the first three elements of the Name column [1] "Berta Hrub" "Joaquim Vital" "Madelon Baans" Notice how with lists, you cannot access multiple components (which is what data frame columns are) at the same time, but with matrices you can access multiple columns at once. Since data frames can use matrix formatting, you can select multiple columns at once, as the first example above showed. You can also access columns by name like so: athletes3[,c("Name", "Sex")] # Access Name and Sex columns (and if your rows have names, you can access rows by name as well). Using the mtcars data frame (included in R), get the mpg for the cars in rows 15 through 20, and assign it to a vector. Now find the average mpg of those cars. Think it’s weird that data frames can be indexed like matrices? It gets weirder. When vectors have names, they can be indexed like lists! Try for yourself: create a vector a <- c(1, 2, 3) and set the names with names(a) <- c(\"angus\", \"brillow\", \"chandelier\") , then see what happens if you type a[[\"angus\"]]! Matrices can also be accessed using names as well. 5.5.5 Advanced Indexing There are even more ways to select the data you need from your R data structures, let’s look at some more advanced techniques. 5.5.5.1 Logical Based Indexing One very useful method that R provides is to access elements of a vector using a different, logical vector of the same length. As the following example will show, R will give only the elements which are true in the logical vector: v <- c("alpha", "bravo", "charlie", "delta") # The vector we want to access i <- c(FALSE, TRUE, FALSE, TRUE) # The logical vector we'll use to index # Index v using i: v[i] [1] "bravo" "delta" Why is this so useful? Remember that you can create logical vectors by comparing any type of vector to some value: v == "delta" [1] FALSE FALSE FALSE TRUE This means you can create a logical vector in order to extract only the elements of a vector which match some criterion. For example, let’s create a logical vector based on whether an Olympic athlete’s sport was “Tug-Of-War”. plays_tug_of_war <- athletes$Sport == "Tug-Of-War" # Create logical vector sum(plays_tug_of_war) # Count how many TRUEs [1] 5 Now let’s use that logical vector to get the names of the athletes: athletes$Name[plays_tug_of_war] [1] "Edgar Lindenau Aabye" "Willie Slade" "William Hirons" [4] "Ernest Walter Ebbage" "William Penn" Using the Olympic athletes data, create a logical vector which is true when an athlete’s sport is wrestling. Then access the age of all wrestlers, and assign the ages to another vector. Finally, compute the average age of the wrestlers vector (remember, there may be duplicate athlete names, so this average won’t mean much; the emphasis is on indexing right now) Logical vectors can also be used to subset a data frame based on some condition. That is, we take entire rows which meet a condition, rather than just a single variable. For example: # Subset the athletes data frame to get only Summer athletes. athletes_summer <- athletes[athletes$Season == "Summer",] In the last example, we are creating the logical vector and immediately using it to index the rows. Pause and think through what’s happening in this example if it’s not quite clear. Also note the placement of the comma (,), which indicates that we’re indexing rows, not columns, of the data frame. You can specify multiple conditions using “and” (&) and “or” (|) like this: # Create logical vector which is true for female gymnasts (female AND gymnast) index <- (athletes$Sex == "F") & (athletes$Sport == "Gymnastics") # Select only female gymnasts fem_gym <- athletes[index,] # Create logical vector which is true if sport is basketball OR gymnastics index <- (athletes$Sport == "Basketball") | (athletes$Sport == "Gymnastics") # Select athletes whose sport is basketball OR gymnastics. bb_gy <- athletes[index,] Create a data frame called athletes_winter with only the rows whose Season is “Winter” Another common use for Logical indexing is filling in missing values. As part of data cleaning, you may decide to change NA’s to some other value. This is easy since we can create a logical vector which is TRUE when a value is NA. We can do this with the is.na function: # For athletes with no medal, replace `NA` with "No Medal" athletes$Medal[is.na(athletes$Medal)] <- "No Medal" Run the above code to replace NA values with “No Medal”, and save the file in your data_clean folder as “athletes_clean.csv” This is not an endorsement of a particular approach to handling missing values. There are many situation dependent considerations that should be made in order to decide the best thing to do. 5.5.5.2 Negative Indexing Sometimes it’s easier to specify which columns or rows should be excluded from indexing, rather than those that should be included. To select every column except the first one, you can use a negative index: athletes[,-1] # Leave out the ID column This also works with numeric vectors: athletes[-c(1:10),] # Access all but the first 10 rows. 5.5.5.3 Nested Indexing: [[1]][3] In R, it’s likely that at some point you will encounter nested data structures, such as vectors within lists (data frames!) and lists within lists. This might make indexing more confusing at first, but a little practice will help you keep things organized in your mind. Consider the following example: # Create a vector and a matrix V <- 1:16 M <- matrix(V, 4, 4) # Create a list which contains them: L <- list(V, M) # Create a character vector C <- c("I", "think", "therefore", "I", "am") # Create another list which will contain L and C: L2 <- list(L, C) With lists like this, it’s easy to see code like L2[[1]][[2]][2,3] and get confused about what is happening. It’s best to break down the statement from left to right L2 # The second list, L2 L2[[1]] # The first component of L2, which is the first list, L L2[[1]][[2]] # The second element of L, which is the matrix M L2[[1]][[2]][2,3] # The second row and third column of M. We have discussed quite a few ways to index data, but rest assured there are more ways that we did not discuss! We won’t address them now, to keep things simple! Any feedback for this section? Click here "],["visualization.html", "5.6 Visualization", " 5.6 Visualization R is incredibly useful for creating visualizations and graphics which are easy to customize and automate, and entire university courses are dedicated to creating visualizations with R. Here we will only introduce the basics of creating visualizations in R. In this course, we focus on the visualizations in “base R”, not the capabilities provided by outside sources. This means we will not discuss the very popular ggplot2 package, which has a very different way of constructing visualizations that could be confusing if included here. R can make several different types of plots, and the type of plot will depend on what kind of data you are dealing with. Below, we’ll explore common types of plots for various types of data. 5.6.1 One Quantitative Variable One of the most popular ways of visualizing quantitative variables is with a histogram, where each bar represents the observations falling within a specific range. The height of each bar reflects how many observations fall within that range. In the Olympic athletes data, Height is a quantitative variable, so let’s create a histogram using the hist function: hist(athletes$Height) This histogram shows that most heights are between roughly 160 and 190 centimeters, and the distribution looks unimodal. Notice that R has decided how many bins (bars) to use, but this can be changed with the breaks option: hist(athletes$Height, breaks = 70) R will “try” to create the number of bins equal to breaks, but sometimes won’t make exactly that number. Instead of just giving a single number breaks, you could also give a vector of numbers, which specify the start and stop points of the bins: hist(athletes$Height, breaks = c(120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230)) By default, R adds a title and axis labels to the plot, but for presentation purposes, it’s probably a good idea to change them. This can be done with the main, xlab, and ylab options: hist(athletes$Height, breaks = 60, main = "Olympic Athlete Heights", xlab = "Height (cm)", ylab = "") These arguments work with many plot types in R. In this example, we removed the y label by setting it to be an empty string. Using the clean athletes data, make a histogram of height for athletes whose sport is Basketball. Hint: It might be easiest to create a new data frame with only basketball players first. Give it an appropriate title and axis labels. To see more options for the hist function, run ?hist. Another way to summarize a quantitative variable is with a boxplot, which shows a box whose boundaries are the first and third quartiles. Inside the box, a line denotes the median, and the “whiskers” outside the box show which points are outliers (those outside the whiskers). boxplot(athletes$Height) In this case, there are no default title or labels, but we can still add them: boxplot(athletes$Height, main = "Olympic Athlete Height", ylab = "Height (cm)") Hint: In RMarkdown, boxplots may look too wide by default. You can control the width of a figure by using the fig.height and fig.width commands in the chunk header like this: ```{r, fig.height=3, fit.width=5} These are the values used for the boxplot above. The boxplot function also allows you to split up a quantitative variable using another variable, using the tilde (~). Here are some examples: boxplot(athletes$Height ~ athletes$Sex) # Make a boxplot of height, split by sex par(mar = c(11, 4, 4, 2) + 0.1) # Command to make the labels fit boxplot(athletes$Height ~ athletes$Sport, las = 2, xlab = "") # Make a boxplot of height, split by sport Here we’ve added a few more bits to fit all the sport labels in: the las option rotates the labels, and the par function is used to increase the bottom margin below the graph. boxplot(athletes$Height ~ athletes$Age) Different software will use different rules to determine how far out the “whiskers” go (and therefore which points are outliers). The default in R is 1.5 times the interquartile range, but this can be changed. When you view a boxplot, never assume what rule was used! Using the clean athletes data, make boxplots of Height for athletes whose Sport is “Cycling”, separated by Medal. Give it an appropriate title and axis labels. Comment on the differences in Height between the different categories. How many Cyclists have no height reported (that is, how many have NA for Height) and how many athletes have a height? How should this affect your interpretation of the boxplots? 5.6.2 Two Quantitative Variables The most straightforward way to visualize two quantitative variables is with a scatter plot. In R, this is created with the plot function. Let’s look at the relationship between height and weight in the Olympic athletes data, but only for a few sports. # Select only some sports gy_bb_wr <- athletes[athletes$Sport %in% c("Gymnastics", "Basketball", "Wrestling"),] plot(gy_bb_wr$Height, gy_bb_wr$Weight) # Plot height vs weight Above we saw another nice way to index: the %in% command. This returns a logical vector which is true for elements that are found in the search list. There are a lot of points, so it may be useful to decrease the size of the circles using the cex option, which has a default value of 1: plot(gy_bb_wr$Height, gy_bb_wr$Weight, cex = 0.4) # Make circles smaller Another option would be to change the type of marker, which can be selected using the pch option. We’ll choose a smaller, solid circle, which is marker number 20: plot(gy_bb_wr$Height, gy_bb_wr$Weight, pch = 20) # Try filled circles We can also set the color using the col argument. There are multiple ways to specify a color, but we’ll use the rgb function, which allows us to specify how much red, green, and blue the color has. color <- rgb(0.5, 0, 1) plot(gy_bb_wr$Height, gy_bb_wr$Weight, pch = 20, col = color) # Change color Lastly, we can also make the points less visible, so it’s easier to see when they are overlapping one another. This is done when defining the color, by giving a fourth value called the alpha, which represents how visible a point is. An alpha value of 0 is invisible, and a value of 1 is fully visible. color <- rgb(0.5, 0, 1, 0.1) # Set the alpha level low, so points are transparent plot(gy_bb_wr$Height, gy_bb_wr$Weight, pch = 20, col = color) # Make points partially transparent We can also color by sport, by converting the Sport column to a factor, then giving that as the color argument: colors <- as.factor(gy_bb_wr$Sport) plot(gy_bb_wr$Height, gy_bb_wr$Weight, pch = 20, col = colors) # Color by sport We convert Sport to a factor because the col option in plot is expecting either a single color (as in the first example) or a vector of numbers indicating which color should be used for each point (remember, factors are represented as numbers). The numbers tell R which color in its palette it should use (for the default palette, 1=black, 2=reddish, 3=greenish, etc.), so factor level 1 (Basketball) is colored black, level 2 (Gymnastics) is colored reddish, and level 3 (Wrestling) is colored greenish. The default colors in R are sometimes not very appealing, so we can define our own color palette: palette(c(rgb(1, 0, 0, 0.1), rgb(0, 1, 0, 0.1), rgb(0, 0, 1, 0.1))) # Create color palette plot(gy_bb_wr$Height, gy_bb_wr$Weight, pch = 20, col = colors) In some cases, it might be appropriate to use lines instead of points. This can be done by setting the type option to “l”: x <- (1:10) / 10 * 2 * pi y <- sin(x) plot(x, y, type = "l") You can use points and lines at the same time using “b”: plot(x, y, type = "b") Another option for plotting two quantitative variables, especially when there are many overlapping points, is the smooth scatter: smoothScatter(gy_bb_wr$Height, gy_bb_wr$Weight) Create a scatter plot of athlete height (y axis) vs. year (x axis) for athletes with Sport “Weightlifting”, and color the points by Sex. Create an appropriate title and axis titles. What was the first year to allow Female Weightlifters? 5.6.3 One Categorical Variable One useful way to visualize categorical variables is barplots. Before creating a barplot, we need to create a summary table of the variable of interest: sport_tab <- table(gy_bb_wr$Sport) barplot(sport_tab, col = rgb(0.2, 0.2, 1)) Create a barplot for the Season variable, with an appropriate title and axis labels. Which Season has more rows in the data frame? 5.6.4 Two Categorical Variables With two categorical variables, you can create a mosaicplot, where the size of each region is relative to the number of observations in that group. mosaicplot(gy_bb_wr$Sport ~ gy_bb_wr$Sex, col = c("blue", "orange"), main = "Athlete Sex by Sport", xlab = "Sport", ylab = "Sex") 5.6.5 Multiple plots One nice feature of R’s plotting capability is that you can plot multiple things at the same time. One way to do this is to create a plot and then add another plot on top of it, using either the points or lines function. points will add a scatter plot using points/dots, and lines will add a scatter plot using a line. Normally, a plotting function like plot or hist will create a new plot figure, erasing what may have been plotted before. But with the points and lines functions, R just adds to the existing figure. Here’s an example of each: # Create some data to plot x <- (1:100) / 100 y1 <- x y2 <- sin(3 / x) * x plot(x, y2,) # Plot x against y2 points(x, y1, col = "blue") # Add points of x against y1 (on same figure) lines(x, -y1, col = "red") # Add lines of x against -y1 (on same figure) 5.6.6 Other types of plots The following plots that are less common, but may be useful for you, and this is an opportunity to show some other capabilities of R! 5.6.6.1 Scatterplot Matrix Given several quantitative variables, there are many different possible scatterplots you could make. The pairs function takes in a matrix or data frame and creates a matrix of all possible scatter plots. Here’s an example using the iris data set which is included in R: pairs(iris, pch = 20) To know the x axis for one of these plots, look up/down to the diagonal, which will tell you the variable on the x axis. To know the y axis for one of these plots, look left/right to the diagonal, which will tell you the variable on the y axis. 5.6.6.2 Surfaces If you need to plot a surface, there are a few options for visualization. The first is contour, which shows level curves of the surface in a 2d plane: # Make a surface using the rep function n <- 100 x <- rep(1:n, n) / n * 2 * pi y <- rep(1:n, each = n) / n * 2 * pi z <- matrix(sin(x) + cos(y), n, n) contour(z, nlevels = 20) The second option is persp, which gives a 3d perspective of the surface: persp(z, theta = 45, phi = 30, shade = 0.5) 5.6.7 Saving Images Creating visualizations in R wouldn’t be very useful if there were no way to save them onto your hard drive (or SSD). Thankfully, R provides various ways of doing this, depending on where the plot “lives”. We’ll talk through each of these below. 5.6.7.1 RCode The most universal way to save plots is to use R code itself! This will work anywhere that R code can be run, whether that’s the RStudio console, an R script, or an RMarkdown document. All you have to do is type a few simple commands. The idea is, that normally R “sends” a plot to the plotting window (in the lower right of RStudio), or to the output of a code chunk (if you’re using RMarkdown), but to save the file, you just have to change where R is sending the plot. For example, if you add put the png function before a plotting command, then instead of sending the plot to wherever it normally does, R will send the plot into the png file you specify. Here’s an example: png("output/test_plot.png") # Start "sending" plots to the png file called "test_plot.png" plot(y1, y2) # This plot will go to "test_plot.png" dev.off() # Stop sending plots to "test_plot.png" quartz_off_screen 2 After you’re done sending plots to a file, use the command dev.off() to reset where R is sending the plots. R graphics works with objects called “graphics devices”. The png function creates a new graphics device which is a file on your computer. The dev.off() shuts down the current graphics device, so no more plots are sent to the file. You can check out other dev. functions by running `?dev.off(). There are other commands like png as well, including bmp for bitmap images, and jpeg for jpeg images. When you’re sending a plot to a file, it will not display in the plot window. 5.6.7.2 RStudio Plot Window If you run code to generate a plot from the console or an R script, then the plot will show up in the RStudio plot window. To save a figure displayed in the plot window, use the “Export” button in the plot window menu. 5.6.7.3 RMarkdown If you’re plotting inside of an RMarkdown document, then plots will be shown inside your document. One way to get them “out of RStudio” is simply to knit the document. But if you want the plot by itself, then right click on the plot and select “Save image as”. Choose a plot that you previously created, and write code to save the plot to a png file in the “output” directory of your RStudio project. Choose an appropriate filename for the file. 5.6.8 Plotting Wrap Up These examples of plotting are only scratching the surface. There are many more things possible with base R graphics, not to mention the numerous other capabilities provided by community developed Packages. Before ending this section, we’ll leave you with an example from the ggplot2 package, just to give you a taste of what’s possible. library(ggplot2) ggplot(gy_bb_wr, aes(Height, Weight, color=Sex)) + geom_point(alpha = 0.2) + theme_bw() + labs(title = "Athlete Height vs. Weight") + facet_grid(Sex~Sport) Warning: Removed 199 rows containing missing values or values outside the scale range (`geom_point()`). Any feedback for this section? Click here "],["vignettes.html", "5.7 Vignettes", " 5.7 Vignettes In this section, you’ll gain more experience working with data by following along with some more data analysis examples. 5.7.1 Flood analysis example In this example we will learn how to analyze flood data to better understand the history of flooding in the last ten years in the Cache La Poudre river which runs through Fort Collins. This vignette will help you learn three key ideas: Data can be read into R directly from online data services using packages which you will learn about later in this book. We can use this ‘live’ data to understand both past and present river conditions in the river. We can use R to look at changes over time in river flow and water height. 5.7.1.1 Map The river monitoring location for the Cache La Poudre River is right at Lincoln Bridge near Odell Brewing. 5.7.1.2 Installing and using packages In order to download river flow and height data we will first need to load a package called dataRetrieval this is a package run by the United States Geological Survey (USGS) and it provides access to data from over 8000 river monitoring stations in the United States and millions of water quantity and quality records. You can learn more about the data from the USGS here. To use packages we first have to install them using the command install.packages and then load them using the command library. # Install the package if it's not already installed by uncommenting the line # below #install.packages('dataRetrieval') # Load the package library(dataRetrieval) 5.7.1.3 Downloading the data Once we have loaded the package we can use the special functions that it brings to the table. In this case, dataRetrival provides a function called readNWISdv which can download daily data (or daily values, hence readNWISdv) for specific monitoring locations. But how do we use this function? Try ?readNWISdv to get more details. So the readNWISdv command requires a few key arguments. First siteNumbers, these are simply the site identifiers that the USGS uses to track different monitoring stations and in our case that number for the Cache La Poudre is 06752260, which you can find here. The second argument is the parameterCd which is a cryptic code that indicates what kind of data you want to download. In this case we want to download river flow data. River flow tells us how much water is moving past a given point and is correlated with the height of the river water. This code is 00060 for discharge which means river flow. Lastly we need to tell the readNWISdv command the time period for which we want data which is startDate which we will set to 2010, and endDate which we will set to the current day using the command Sys.Date(). These arguments should be in the YYYY-MM-DD format. With all this knowledge of how the command works, we can finally download some data, directly into R! poudre <- readNWISdv(siteNumbers = '06752260', parameterCd = c('00060'), startDate = '2010-10-01', endDate = Sys.Date()) 5.7.1.4 Explore the data structure Now that we have our dataframe called poudre, we can explore the properties of this data frame using commands we have already learned. First let’s see what the structure of the data is using the head command, which will print the first 6 rows of data. head(poudre) It looks like we have a dataframe that is 5 columns wide with columns agency_cd which is just the USGS, site_no which is just the site id we already told it. Since we only asked for data from one site, we don’t really need this column. A Date column which tells us… the date! There are two more columns that are kind of weird which are labeled X_00060_00003 which is the column that actually has values of river flow in Cubic Feet Per Second (cfs), or the amount of water that is flowing by a location per second in Cubic Feet volume units (1 cubic foot ~ 7.5 gallons). Finally X_00060_00003_cd tells us something about the quality of the data. For now we will ignore this final column, but if you were doing an analysis of this data for a project, you would want to investigate what codes are acceptable for high quality analyses. To make working with this data a little easier let’s rename and remove some of our columns in a new, simpler dataframe. # Remove the first two columns pq <- poudre[,-c(1,2,5)] # Rename the remaining columns names(pq) <- c('Date','q_cfs') 5.7.1.5 Explore the data Now that we have cleaned up our data frame a little, let’s explore the data. First we can use the summary function to just quickly look at the variables we have. summary(pq) Date q_cfs Min. :2010-10-01 Min. : 1.31 1st Qu.:2014-03-04 1st Qu.: 22.90 Median :2017-08-06 Median : 62.40 Mean :2017-08-06 Mean : 222.74 3rd Qu.:2021-01-08 3rd Qu.: 147.00 Max. :2024-06-12 Max. :7150.00 It looks like we have data from 2010 to 2024-06-13 and a range in river flow (q_cfs) from 2.6 cfs all the way up to 7150 cfs. If you’re a hydrologist, hopefully these flow numbers look right, but another way to check to make sure is to simply plot the data as we do below. plot(pq$q_cfs ~ pq$Date, type = 'l', ylab = 'River Flow (cfs)', xlab = 'Date', col = 'blue3') The above plot is called a “hydrograph” or a plot of how river flow has changed over time. In the Cache La Poudre, what might explain the peaks and valleys of the data? What controls river flow in Colorado rivers? 5.7.1.6 Analyze the data Now that we’ve plotted the data we can see some interesting patterns that we might want to explore. For example, how has the average flow changed in the last ten years. To analyze this, we need to use the concept of a Water Year. Simply put, a water year is a way to analyze yearly variation in flow, which doesn’t map well to a calendar year. Water years in the USA are typically from October 1 to September 30th. Luckily for us, the dataRetrieval package has a function that calculates water year for us. It’s simply called addWaterYear. pq_wy <- addWaterYear(pq) To look at variation per year we can use the function tapply which can take the mean, max or any summary function of groups of data (more on this in the next chapter, but you can type ?tapply for more info). In this case, we want to look at the mean river flow for each water year. Now to use tapply we use the following code annual <- tapply(pq_wy$q_cfs, pq_wy$waterYear, mean) Now let’s plot the data, where the values (y) are the annual average flow and the years (x) are the names of the annual vector from the tapply function. plot(names(annual), annual, xlab = "Water Year", ylab = "Annual Average Flow (cfs)") Has annual mean river flow declined over the past ten years? What about the last 6? Any feedback for this section? Click here "],["performing-effective-data-analysis.html", "Chapter 6 Performing Effective Data Analysis", " Chapter 6 Performing Effective Data Analysis “Learning to write programs stretches your mind, and helps you think better, creates a way of thinking about things that I think is helpful in all domains.” —Bill Gates In the previous chapter, you learned how to load a data set, compute summary statistics, and create visualizations. Suppose instead of just one data set, you had to do analysis on 100 different data sets. Will you have to write 100 times the amount of code? Now suppose that instead of 100 data sets, you have one data set and 100 columns, and you would like to create a visualization of each column. As you’ve seen, different types of data merit different types of visualizations. Will you have to manually examine each column and write the appropriate code to visualize that column? Clearly these scenarios (and many others) would benefit from smarter R programs. In this Chapter you’ll discover ways to make R do more work and letting you do less. This is where the true power of R as a programming language will be harnessed, and you will be able to write less code and perform more effective analysis. You will also be able to reduce mistakes and increase consistency in analysis, as well as better communicate your work to others. This chapter is where you will gain the skills to move you from being able to work with data to being able to perform effective data analysis. It will all start with basic logic, in the next section! "],["basic-control-flow.html", "6.1 Basic Control Flow", " 6.1 Basic Control Flow When you write R code, you are creating commands that R will execute one at a time in order, from top to bottom. This is the basic flow of an R program, but R also provides ways that you can control the flow, using basic logic. In this section, we’ll introduce a few ways of controlling the flow of an R program, but first, we need a data set to work with. Our working example for this chapter will be the latest (as of this book’s writing) provisional estimates of COVID-19 Deaths in the United States, available from the Centers for Disease Control at this link. We’ve downloaded the data and saved it in the data_raw folder, and you should do the same (the data are also available here). First, let’s load the data and do some minor cleaning: # Load the data # The "Footnote" column has hyphens, # which only display correctly if we specify "UTF-8" encoding covid <- read.csv("data_raw/Provisional_COVID-19_Death_Counts_by_Sex__Age__and_State.csv", fileEncoding = "UTF-8") # Remove rows with state totals, this will mess up our summary statistics later covid <- covid[!grepl("Total", covid$State),] # Remove all ages category covid <- covid[covid$Age.group != "All ages",] Download the covid data into your ‘data_raw’ folder, and load/clean it using the code above. 6.1.1 Loops One of the first things we might like to do with our data set is create visualizations. This data contains deaths data for different states, age groups, and sexes. Let’s pick a state and sex, create a bar chart for deaths in different age groups, and save the image to the output directory: # Select only Females from Colorado covid_co_f <- covid[(covid$State == "Colorado") & (covid$Sex == "Female"),] # Save a barplot of the deaths by age group png("output/covid_deaths_by_agegroup_colorado_female.png") par(mar = c(9, 4, 2, 2)) # The COVID.19.Deaths vector doesn't have row names, # so we specify the bar labels with names.arg barplot(covid_co_f$COVID.19.Deaths, names.arg = covid_co_f$Age.group, las = 2, main = "Deaths By Age Group") dev.off() Here’s the plot we just created: covid_co_f <- covid[(covid$State == "Colorado") & (covid$Sex == "Female"),] par(mar = c(9, 4, 2, 2)) barplot(covid_co_f$COVID.19.Deaths, names.arg = covid_co_f$Age.group, las = 2, main = "Deaths By Age Group") Note that three age groups have more than 0 but less than 9 cases, so the counts have been omitted from the data set to maintain confidentiality of the victims. Let’s repeat this process for two other states: # Deaths by age group for Females in Wyoming covid_wy_f <- covid[(covid$State == "Wyoming") & (covid$Sex == "Female"),] png("output/covid_deaths_by_agegroup_wyoming_female.png") par(mar = c(9, 4, 2, 2)) barplot(covid_wy_f$COVID.19.Deaths, names.arg = covid_wy_f$Age.group, las = 2, main = "Deaths By Age Group") dev.off() # Deaths by age group for Females in New Mexico covid_nm_f <- covid[(covid$State == "New Mexico") & (covid$Sex == "Female"),] png("output/covid_deaths_by_agegroup_newmexico_female.png") par(mar = c(9, 4, 2, 2)) barplot(covid_nm_f$COVID.19.Deaths, names.arg = covid_nm_f$Age.group, las = 2, main = "Deaths By Age Group") dev.off() Here are these plots, too: Now, if we wanted to do this for all states in our dataset, this would take a lot of code. But, did you notice that the code we wrote in each case was very similar? This is a perfect opportunity to use looping. Looping involves running the same R commands multiple times, usually making small changes in between. The most common form of loop is called a for-loop. Here’s a simple example: vec <- c("a", "b", "c") # Create a vector for(i in vec){ # Loop through the elements of the vector print(i) # Print out the current element } # Stop the loop [1] "a" [1] "b" [1] "c" This for-loop printed out each element of the vec variable, one at a time. Here’s the way this works: for tells R that we want to repeat code multiple times. When R “sees” the for command, it knows that the code that follows will be repeated. the parentheses (( and )) specify a vector that will be looped over (vec in this example), and a variable name to use while looping (i in this example). On each iteration of the loop, the variable (i) will have a different value. In this example, the first time through the loop, i will have the value of the first element of vec (\"a\"), the second time through the loop, i will have the value of the second element of vec (\"b\"), etc. The name for-loop is common in many programming languages, which reflects the fact that R is running the loop for each element of the vector. The braces ({ and }) specify which code should be run each time through the loop. In this example, we’re just printing out the value of i, so the result is that each element of vec is printed in order. Recall that braces are a way of specifying a block of code, and R knows that everything inside the block should be run while looping. After it finishes looping, R proceeds to run any code below the for-loop. Here’s another example of a for-loop: for(j in 1:10){ print(j^2) } print(j + 1) [1] 1 [1] 4 [1] 9 [1] 16 [1] 25 [1] 36 [1] 49 [1] 64 [1] 81 [1] 100 [1] 11 There are a few things to learn from this second example: The variable used in the loop doesn’t have to be i. It can be any name you like. You can create vectors in the for-loop. Here we use 1:10 to generate a sequence of numbers from 1 to 10 (remember this?). The value of j (or whatever your looping variable is called) still exists after the for-loop is over. Here the last value of j was 10, so printing j+1 produced 11. Don’t forget to include the curly braces ({, }) after your for-loop, or else R may not include your code in the loop. In some languages, white space like tabs and spaces are significant, meaning they imply something about what should happen when the code is run. In R, spaces and tabs don’t change anything about how code is run, and usually are used to make code more readable. For example, it’s common to indent for-loops, for clarity, but it’s not strictly necessary for the code to run. This is another example of coding style. Technically, you don’t need to include braces after the for-loop, but if you leave them out, then R will only run the first command it finds after the for(...). Now, let’s gradually change the first example into a loop that runs visualizations for each state in our data set. First, instead of looping over c(\"a\", \"b\", \"c\"), let’s loop over state names: for(i in c("Colorado", "Wyoming", "New Mexico")){ print(i) } [1] "Colorado" [1] "Wyoming" [1] "New Mexico" Now, instead of just printing the state name, let’s create a data frame of just that state, for females: for(i in c("Colorado", "Wyoming", "New Mexico")){ covid_state_f <- covid[(covid$State == i) & (covid$Sex == "Female"),] } Remember, each time through the loop, the value of i matches one of the state names in the vector. So covid$State == i will produce a logical vector which is true for the rows specific to whichever state name we’re on. Notice that each time through the loop, the covid_state_f data frame will also change, containing only the rows for the state we’re on. Now that we are selecting only the state of interest, let’s produce a bar plot of cases, split by age group: # Loop though three states for(i in c("Colorado", "Wyoming", "New Mexico")){ # Select only the rows from the state covid_state_f <- covid[(covid$State == i) & (covid$Sex == "Female"),] # Create the file name using the state's name file_name <- paste("output/covid_deaths_by_agegroup_", i, "_female.png", sep="") # Produce the plot png(file_name) par(mar = c(9, 4, 2, 2)) barplot(covid_state_f$COVID.19.Deaths, names.arg = covid_state_f$Age.group, las = 2, main = paste("Deaths By Age Group, ", i, sep="")) dev.off() } We’ve used the paste function a few times in this loop, remember that it combines multiple strings using a separator, which we’ve set as an empty string (so no separator between the strings being combined). This is some of the longest and most complex code that we’ve discussed so far! It’s important that you fully understand what each line is doing, so take your time and review the code chunk above until you’re comfortable with it. Here comes the real power of this method. So far, we’ve just produced plots for three states, but with one small change, we can produce plots for each state in the data frame: for(i in unique(covid$State)){ # <<------ Here's the one change we made! covid_state_f <- covid[(covid$State == i) & (covid$Sex == "Female"),] file_name <- paste("output/covid_deaths_by_agegroup_", i, "_female.png", sep="") png(file_name) par(mar = c(9, 4, 2, 2)) barplot(covid_state_f$COVID.19.Deaths, names.arg = covid_state_f$Age.group, las = 2, main = paste("Deaths By Age Group, ", i, sep="")) dev.off() } This code will now loop through every unique value in the State column and produce identical visualizations for each state! Write a for-loop which loops through each age group category, and prints the total number of COVID-19 deaths across all states (Hint: each time through the loop, subset based on the age group, then find the sum of the deaths column, then print the result). R has other functions for looping as well, but for-loops are by far the most common. Another option is while which, rather than looping through a vector, just continues looping forever as long as some condition is true. Try ?Control for more info. 6.1.1.1 Nested Loops Sometimes, it becomes necessary to loop over multiple vectors at once. This is possible by nesting the for-loops (putting one inside the other) like so: for(i in c(10, 50)){ for(j in c(1, 2)){ print(i + j) } } [1] 11 [1] 12 [1] 51 [1] 52 Look carefully at the output, and notice that j is changing “faster” than i: First i is 10, and j cycles through 1 and 2, then i is 50, and j cycles through 1 and 2 again. Notice that when nesting for-loops, each for-loop has its own set of braces ({, }). Don’t forget to put the second ending brace }! Another reason to use indenting is to catch mistakes like a missing ending brace. Let’s apply this concept to our COVID-19 data. So far, we’ve been generating plots for the females only, but we can include another loop which cycles through each Sex for each state (changes to the code are marked with comments): for(i in unique(covid$State)){ for(j in unique(covid$Sex)){ # Add a nested loop for sex covid_state_sex <- covid[(covid$State == i) & (covid$Sex == j),] # Compare covid$Sex to j # Add j to the file name file_name <- paste("output/covid_deaths_by_agegroup_", i, "_", j, ".png", sep="") png(file_name) par(mar = c(9, 4, 2, 2)) barplot(covid_state_f$COVID.19.Deaths, names.arg = covid_state_f$Age.group, las = 2, main = paste("Deaths By Age Group,", i, j)) # Change add Sex to title dev.off() } } Nested for-loops can be useful and even necessary, but nesting can sometimes take a very long time to run. If two nested for-loops each run through 1,000 vector elements, that means a total of 1,000,000 iterations through the inner loop’s code! It’s possible to have a set of three nested for-loops or even more, but generally this is not wise practice, and in most cases there is a way to accomplish the same goal without so much looping. 6.1.1.2 Breaking Out of For-Loops. Sometimes it’s necessary to stop a loop earlier than expected. This can be done with break, but this is best explained after discussing if/else statements. 6.1.2 If Statements So far, you’ve seen how to control the flow of a program by having R run the same chunk of code multiple times. Another common way of controlling flow is to change the code that runs based on some condition. Let’s return to the COVID example for motivation. Suppose we wanted to create a visualization of the data in each column of the data frame. Remember that the choice of visualization is affected by the type of variable being visualized (quantitative or categorical). If the column is quantitative, we’d like to produce a histogram, perhaps, and if the column is categorical, we’d like to produce a bar graph. Remember that looping runs the same code each time through the loop, so how are we supposed to change the plot method to suit the variable type? The answer is to use if statements. Before going further, here’s a quick example: if("cat" == "dog"){ print("Something doesn't make sense!") } This code produces precisely no output. Even though there is a print command, R does not print anything! The reason is that the print command is inside of an if statement, and R only runs that code if the specified condition is met. Here’s how it works: The if indicates the start of the if statement. R expects the parentheses to contain a logical statement that produces either TRUE or FALSE. In this example, we are comparing the character strings \"cat\" and \"dog\" (which are not the same, so the result is FALSE). If the condition is TRUE, then the code block in curly braces is run (not true for this example). If the condition is FALSE, then the code block is not run (which is why the above example did not print). Whether the code block is run or not, R will then proceed to run any code below the if statement. In the simple example above, the logical condition (“cat” == “dog”) is obviously false, so every time we run the code, the print statement will not be run. If the code never runs, then why go through the trouble of including it? The answer is that this simple example isn’t realistic, and you should look at the next example. Let’s see how if statements can be used inside of a for-loop. for(i in 1:5){ if(i == 4){ print(i) } } [1] 4 Here we have a for-loop which loops through the vector 1:5. Remember that the value of i is changing each time through the loop to a different element of the vector. Each time through the loop, R evaluates the condition i == 4. If it is true, then the value of i is printed. Otherwise, nothing happens because there is no other code in the for-loop. i takes on the value 4 exactly once, in which case the print statement runs and we see the value of i. To summarize, the for-loop code ran five times, four of these times the if condition was FALSE and nothing happened, but one time the if condition was TRUE. 6.1.2.1 Else If statements can also be written with an else block, which specifies code to run if the logical condition is FALSE: for(i in 1:5){ if(i == 4){ # Condition to test print(i) # Code to run if condition is TRUE } else { print("Not 4") # Code to run if condition is FALSE } } [1] "Not 4" [1] "Not 4" [1] "Not 4" [1] 4 [1] "Not 4" Here you can see that rather than doing nothing when the condition is not true, the second code block (after else) is run instead. Returning to the COVID example, let’s loop through each of the columns of the data frame, and use an if statement to determine if it is a character or numeric mode (remember mode?). Then let’s choose an appropriate visualization based on the mode: for(col_name in names(covid)){ col <- covid[[col_name]] if(mode(col) == "numeric"){ # Check if mode is numeric hist(col, main = col_name) # Plot histogram } else { # Not numeric, assume character barplot(table(col), main = col_name) # Plot barplot } } Admittedly, these plots are a little crude, but the point is that the code is able to create the appropriate plot depending on the type of variable. This is another way in which you can control the flow of an R program. Looking at visualizations like this for variables in a data set can be a useful way to identify potential problems. Look at the barplot for State, and notice that one category has more observations than the others. Which state this is (hint: the table and sort functions might be useful)? Create a new data frame by subsetting on the outlier state, and examine it. Is there cause for concern? Why or why not? There are other variations on if statements, including using else if to test a second condition if the first is not met, and the switch function which matches an argument to one of several possibilities, and runs different code for each match. These are more advanced topics that will not be covered here. Create a for-loop which loops through each state. In the for-loop, determine whether there are more male or female deaths in the 45-54 age group. If there are more females, print “There are more female deaths in <State>”, where <State> is the state name for that iteration in the loop. If there are more males or the deaths are the same, the print “There are not more female deaths in <State>”. 6.1.2.2 Breaking Out of For Loops. Sometimes it’s useful to be able to stop a for-loop before it has finished looping through the whole vector. This can be done with the break statement, which is usually placed within an if statement. Here’s an example: for(i in 1:10){ if(i == 6){ break } print(i) } [1] 1 [1] 2 [1] 3 [1] 4 [1] 5 The if condition is FALSE until i is 6, at which point the if condition is TRUE, so the break statement is run. The break statement causes R to exit from the loop before 6 is printed and before i is updated to 7. Hence we see the numbers 1-5 printed but not the numbers 6-10. 6.1.3 Formatting Conventions Since R is a programming language, it is not immune to the common debates between programmers regarding proper formatting. For example, the following for-loops are all equivalent: for(i in 1:3){ print(i) } [1] 1 [1] 2 [1] 3 for(i in 1:3) { print(i) } [1] 1 [1] 2 [1] 3 for(i in 1:3) {print(i)} [1] 1 [1] 2 [1] 3 for(i in 1:3) print(i) [1] 1 [1] 2 [1] 3 But different programmers (and sometimes programming communities) will have different ideas about what is best. For this book, we’ll use the first convention, but you could reasonably choose the second as well. The third and fourth conventions should probably only be used if the code block is very short (e.g. a single command). Mainly, we raise these differences because you may have to read code written by someone with different conventions from yourself. This is the last section you should include in Progress Check 4. Knit your output document and submit on Canvas. Any feedback for this section? Click here "],["writing-functions.html", "6.2 Writing Functions", " 6.2 Writing Functions Throughout this course, we’ve been using various R functions, like print, sum, is.na, and hist. Each of these functions does different things, but they all obey similar rules. First we’ll think carefully about what all R functions have in common, then we’ll see how you can write your own functions to suit your needs! 6.2.1 The Components Of A Function As an example, consider the sum function: v <- c(1, 2, 3) sum(v) [1] 6 When R runs this function, it takes a numeric vector and computes the sum of its elements. The numeric vector is specified by you, the programmer, and it’s formally called an argument. The argument can be thought of as the “input” into the function. Some functions use more than one argument, like the seq function: # Create a sequence of numbers from 3 to 9 seq(3, 9) [1] 3 4 5 6 7 8 9 while others functions might have no arguments, like getwd: # Get the current working directory getwd() [1] "/Users/lanedrew/Documents/Teaching/STAT158_SU23/Module1" Other functions can work with different numbers of arguments, like the combine function, c: c(1) [1] 1 c(1,2) [1] 1 2 c(1,2,3) [1] 1 2 3 Thinking back to the sum example, we also notice that the function produces a result, which is the sum of the elements of the vector. This result is called a return value, because it’s something that the function “returns” back to you after it has finished running. Return values can be assigned to R objects: s <- sum(v) print(s) [1] 6 The combine function’s output is a vector, which we can assign to an object called w: # The return value of c() is assigned to w w <- c("a", "b", "c") print(w) [1] "a" "b" "c" Sometimes a function doesn’t have a return value, as with the rm function: # rm doesn't have a return value, which is why result is NULL (i.e. no object) result <- rm(w) print(result) NULL Remember what the rm function does? Aside from the arguments and the return value of a function, we can talk about what the function actually does. The sum function obviously computes the sum of a vector, but the sqrt function takes the square root of a number: sqrt(58) [1] 7.615773 As we will see shortly, what a function does is determined by the code in its body. That’s right, functions are basically a collection of code that is combined in a convenient package. We can even examine the code for a function by typing its name without parentheses. Here’s the sort function: # View the code of the sort function sort function (x, decreasing = FALSE, ...) { if (!is.logical(decreasing) || length(decreasing) != 1L) stop("'decreasing' must be a length-1 logical vector.\\nDid you intend to set 'partial'?") UseMethod("sort") } <bytecode: 0x14be3cca8> <environment: namespace:base> Now, there are some things in this output that may be confusing and that we won’t explain in this book, but at least some of the output should look like R code to you! Here’s another example, the mean function: # View the code of the mean function (or so we think) mean function (x, ...) UseMethod("mean") <bytecode: 0x12c8f9c78> <environment: namespace:base> This example doesn’t seem to have as much R code in it, so where is the code for this function? The answer is that both sort and mean (and many other R functions) are written in a different programming language, C, which isn’t human readable once it’s compiled. Don’t worry too much about this, except that we will use the same method to view the code of our own functions later. The way we’ve described R functions as being arguments, a body, and a return value, is mostly correct, but there is also something called the environment of the function, which is essentially scoping, if you are familiar with that concept from other programming languages. We will discuss scoping briefly here but not in detail. For more on functions, check out this link. 6.2.2 Writing A Function The beauty of functions in R is that you can write your own! All you have to do is specify the arguments, body, and return value for your function. Here’s a simple example how to define a function: # Create function which adds 1 to the input argument add_one <- function(x){ y <- x + 1 return(y) } # Test out the function add_one(100) [1] 101 Here we define a function called add_one, using the assignment operator <-, just like when we define new vectors, data frames, integers, etc. The statement function signifies that we are defining a new function, and the parentheses surround any arguments that this function accepts. Here, we have just one argument called x. The body of the code has just two commands. The first command creates a new variable y by adding 1 to the argument x. The second command specifies that y will be the return value of the function. The function is used by writing its name add_one and specifying the arguments in parentheses (100). Technically we are specifying that the value of x is 100. When the function is run, we see the return value (100 + 1) displayed in the output. Let’s view the code of the function we just wrote: add_one function(x){ y <- x + 1 return(y) } Here it shows us exactly the code that we used to create the function. Let’s use the function a few more times: number <- add_one(10) # Assign the return value of add_one to `number` number [1] 11 # Nest our function add_one(add_one(add_one(1))) [1] 4 It’s possible re-define the built in R functions by choosing a function name that already exists (print for example), but this is a very bad idea. This can make your code very difficult to understand, and potentially unpredictable! Sometimes it’s not necessary to specify a return value. If you don’t, then R will take any output generated by the last command in the function and return it: add_two <- function(x){ x + 2 # R will return the result of x + 2 } add_two(12) [1] 14 But you must be careful, because some commands produce no output. Remember that if we type math, then R will print the result: 1 + 1 [1] 2 but if we assign the result to a variable, R will not print anything (the result is assigned to the variable instead): two <- 1 + 1 This is how it works for function return values as well. So if we write a statement at the end of a function, but assign the result to a variable, R will not return the value. add_three <- function(x){ y <- x + 3 # The results are assigned to y, but y is not returned } add_three(4) # This returns nothing This is technically not true. The above function does return the value of y, but it is “invisible”. To display the output, you can wrap the result in parentheses like this: (add_three(4)) Now let’s look at a more complicated example that has two arguments: # Function to raise x to the y-th power pow <- function(x, y){ # Here we specify the function has two arguments. p <- x^y return(p) } # Test the arguments with x=2 and y=3 pow(2, 3) [1] 8 There’s an important lesson to learn from this example. When we tested the function, R used 2 as the value of x and 3 for the value of y (after all, 2 cubed is 8), and this is because of the order that the arguments were supplied. When we defined the function, we specified that x and y are the arguments, in that order. Then when we called the function, we put 2 first and 3 second. Perhaps this is obvious, but strange things are possible, because R also allows you to specify the arguments by name like so: pow(x = 2, y = 3) [1] 8 So far this gives the same result, but watch what happens if we do this instead: pow(y = 2, x = 3) [1] 9 This time, R computed 3 squared instead of 2 cubed, even though we specified y first and x second. When you specify parameters by name, R will ignore the order that they are given in. R also allows you to specify some arguments by name and some by position, as long as the position arguments come first. For more, see here. (No need to turn this in) Write a function called math which has three arguments, a, b, and c. In the body of the function, write code which computes a - b * c, store the result as x, then specify the return value of the function to be x. Demonstrate the use of your function with a few examples. 6.2.3 Using Functions for Data Analysis Functions offer many of the same advantages as loops: They allow you to write less code and do more. Let’s see how functions might be used for data analysis. Suppose we want to compare deaths between men and women for particular states and age groups. Here’s a barplot for Colorado in the 45-54 age group: # Extract just the state and age group of interest covid2 <- covid[(covid$State == "Colorado") & (covid$Age.group == "45-54 years"),] # Create a bar plot barplot(covid2$COVID.19.Deaths, # Specify column to plot names.arg = covid2$Sex, # Specify bar names main = "Sex Comparison: Colorado 45-54 years", # Title ylab = "COVID-19 Deaths") # y label Suppose we wanted to view this information for more states and age groups. Rather than repeat the above code each time, let’s put it in a function: # Create a function called plot_fm with two arguments: state and ages plot_fm <- function(state, ages){ covid2 <- covid[(covid$State == state) & (covid$Age.group == ages),] barplot(covid2$COVID.19.Deaths, names.arg = covid2$Sex, main = paste("Sex Comparison:", state, ages), ylab = "COVID-19 Deaths") return(NULL) } Now let’s try out the code on a few states and age groups: plot_fm("Colorado", "45-54 years") NULL plot_fm("Texas", "65-74 years") NULL plot_fm("New York", "85 years and over") NULL Notice that our function doesn’t actually return anything, but it does produce a plot while running. The plots produced by this function are one example of side effects, which are changes that persist after the function is completed, and that aren’t the return value. If you tried to run plot_fm(\"Colorado\", \"5-14 years\"), R would produce an error. This is because both the COVID.19.Deaths column for that State/Age group is NA, and R needs at least one non-NA value to determine the limits of the y axis. To get around this error, we could write extra code to manually set the y limits and specify them while plotting, like so: covid2 <- covid[(covid$State == state) & (covid$Age.group == ages),] # Set the maximum y limit manually, in case there are NA values ymax = max(covid2$COVID.19.Deaths, na.rm = T) if(ymax == -Inf) ymax <- 1 # Create the plot barplot(covid2$COVID.19.Deaths, names.arg = covid2$Sex, main = paste(\"Sex Comparison:\", state, ages), ylab = \"COVID-19 Deaths\", ylim = c(0, ymax)) return(NULL) (No need to turn this in) Make a function with arguments for state, sex, and age group, and print out the COVID 19 deaths, Total Deaths, Pneumonia Deaths, and Influenza Deaths for that demographic. 6.2.4 Function Scope There’s another important concept for functions in R, called scope, which is best illustrated through the following example: simple_f <- function(){ XYZ <- 2 return(XYZ) } print(XYZ) Error in eval(expr, envir, enclos): object 'XYZ' not found print(simple_f()) [1] 2 This function has no arguments, but it does create a new object called XYZ, which is returned from the function. Notice, however, that printing out XYZ gives an error. This is because the object XYZ only exists in the scope of the function simple_f, and is “forgotten” after the function finishes running. This is true for any objects created inside any function (with one exception, noted in the bonus block below). Variables defined outside of functions are in the global scope, which means they can be accessed anywhere, both inside and outside functions: y <- "hello" say_hello <- function(){ print(y) } say_hello() [1] "hello" It’s also important to realize that variables in different scopes can have the same name without conflict. For example, we can use x as the argument to a function and as a variable outside of the function. R will search the current scope first, then look outside of the current scope if it can’t find an object. # Define x and y in the global scope x <- "a" y <- "b" f <- function(x){ print(x) # This is NOT the global x print(y) # There's no y in the function scope, this is the global y } f("c") [1] "c" [1] "b" In the above example, x was defined inside the function f (it’s the name of the first argument), so the global x is ignored. However, y is not defined inside the function, so R uses the y from the global scope. In an earlier chapter, we briefly mentioned the assignment operators <<- and ->>, but didn’t say what made them special. It turns out, they are able to assign objects in the global scope from inside functions. You can test this by altering the simple_f function in a previous example (above) by replacing the command XYZ <- 2 with the command XYZ <<- 2 and observing the result. This assignment operator should almost never be used, as it can cause confusion and unpredictable behavior if used in a more complicated R program. When writing functions, it helps to start simple. It’s easy to make a complicated function, but when you try to put it into use and it doesn’t work, debugging the issue can be equally complicated. You may be familiar with “pointers” in other languages, and the difference between “pass by value” and “pass by reference”. In most ordinary circumstances with R, there is only pass by value. (No need to turn this in) When discussing Objects in a previous chapter, we mentioned that everything in R is an object, and every object has a mode and length. Pick an R function, or create your own function, and print its mode and length. Any feedback for this section? Click here "],["advanced-control-flow.html", "6.3 Advanced Control Flow", " 6.3 Advanced Control Flow In this section, we’ll discuss more ways to control the flow of your code. Specifically, we’ll talk about the apply family of functions, starting with sapply. To show what sapply does, let’s look at the following function: square_plus_one <- function(x){ return(x^2 + 1) } This function returns the result of squaring the input argument and adding 1. Suppose we wanted to run this function to every element of a vector. One option would be to write a for-loop: # The function we want to apply our function to x <- 1:10 # Create an empty vector to hold the result y <- numeric(10) # Loop through x and apply the function for(i in 1:10){ y[i] <- square_plus_one(x[i]) } y [1] 2 5 10 17 26 37 50 65 82 101 Here’s another way to do the same thing using the sapply function: # Apply the function square_plus_one to every element in x z <- sapply(x, square_plus_one) # z agrees with y! print(z == y) # z is a vector mode(z) [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE [1] "numeric" In words, the sapply function says “loop through every element of this vector, and apply this function to it.” All you have to specify is which vector to loop through, and which function to apply. The “s” in sapply stands for “simplify”, meaning the result will be simplified to a vector, matrix, or higher dimensional array. In some cases, you may want the result to be returned as a list, instead of a vector. In this case, the lapply function can be used: # Apply the function square_plus_one to every element in x w <- lapply(x, square_plus_one) # w is a list mode(w) [1] "list" lapply and sapply can also be used if the function doesn’t always return the same type or length of data. Here’s an example: make_vector <- function(n){ # Make a vector of length n numbered from 1 to n 1:n } # Apply make_vector to each element of x: x <- c(2, 2, 3, 1, 6) lapply(x, make_vector) [[1]] [1] 1 2 [[2]] [1] 1 2 [[3]] [1] 1 2 3 [[4]] [1] 1 [[5]] [1] 1 2 3 4 5 6 The differences between lapply and sapply (and other functions in the apply family) can be subtle and very confusing at times, even after reading the documentation using ?lapply, but here is one way they are different: x <- list(1, 2, 3) l <- lapply(x, square_plus_one) print(mode(l)) s <- sapply(x, square_plus_one) print(mode(s)) [1] "list" [1] "numeric" The input x started as a list, so the default return of lapply is a list. However, sapply simplified the result to a vector. If you know the type of data that will be returned, you can use the vapply function, which can be faster than sapply in some cases. ch <- vapply(x, square_plus_one, 1) Here we’ve supplied an extra argument (1) to tell R that the elements will be numeric types. The differences between lapply, sapply, and vapply are not easy to understand, especially because they give the same results sometimes. A simple yet imperfect rule is that sapply will work in most cases, but you can use lapply if you don’t want lists to be simplified, and use vapply if you know what type the result will be. 6.3.1 Applying Over Multiple Dimensions Suppose we want to find the variance of each row of a matrix. The lapply or sapply only work on each element of a matrix, not each row. For this, we need the apply function: m <- matrix(c(1, 1, 1, 1, 2, 3, 2, 4, 6), 3, 3, byrow = T) apply(m, 1, var) [1] 0 1 4 The arguments to this function are: m: The matrix to be iterated over 1: The axis to iterate over var: The function to apply over the axis 6.3.2 Applying Over Data Frame Groups Lastly, we’ll show how you can apply a function to each group specified by a grouping variable. Suppose we wanted to add the COVID deaths across all Age groups for each state. Then we could use the tapply function, with COVID.19.Deaths as the vector to iterate over, State as the grouping variable, and sum as the function to use. Here’s the result: state_deaths <- tapply(covid$COVID.19.Deaths, covid$State, sum, na.rm = T) sort(state_deaths) Alaska Hawaii Montana 0 0 0 Wyoming Puerto Rico Vermont 0 13 26 South Dakota North Dakota West Virginia 68 91 93 Idaho Maine Utah 107 107 183 Oregon Nebraska Kansas 232 270 302 Arkansas New Hampshire Oklahoma 332 367 398 New Mexico Delaware Nevada 502 503 567 District of Columbia Kentucky Tennessee 633 644 656 Iowa Wisconsin Rhode Island 762 810 912 South Carolina Missouri Mississippi 957 1001 1193 North Carolina Washington Alabama 1205 1223 1244 Minnesota Colorado Virginia 1469 1623 2062 Arizona Georgia Ohio 2430 2534 2686 Indiana Louisiana Maryland 2719 3082 3607 Texas Connecticut Florida 3693 4007 4331 Michigan Illinois California 5588 6637 7089 Pennsylvania Massachusetts New York 7216 7741 11238 New Jersey New York City United States 13806 20450 390745 Here we also had to specify the na.rm=T parameter so that NA values are removed when computing the sum. Remember that these totals may not match the All Ages number from each state, because some counts are suppressed. Here’s another example where we sum the deaths across all states for each Age group # Remove US total numbers first covid <- covid[covid$State != "United States",] agegroup_deaths <- tapply(covid$COVID.19.Deaths, covid$Age.group, sum, na.rm=T) sort(agegroup_deaths) 1-4 years 5-14 years Under 1 year 15-24 years 0 0 0 54 25-34 years 35-44 years 45-54 years 55-64 years 730 2246 6451 15821 65-74 years 75-84 years 85 years and over 27117 34351 42639 Remember that these totals may not match the United States values from the dataset because some counts are suppressed. Any feedback for this section? Click here "],["working-with-popular-packages.html", "6.4 Working With Popular Packages", " 6.4 Working With Popular Packages 6.4.1 What is a package? Up to this point in this book/course, we have really focused on using base R. By base, we simply mean the functions, data sets, and arguments that come pre-packaged with R. While this book has (hopefully) shown you just how much these basic functions can do, R can do so much more by relying on packages. Packages are an integral part of R programming, and you have been using them throughout this book and class. A package is a contained set of arguments, operations, data, and/or other tools that don’t come with R. In general these are built by the vast community of R users and they cover tools from making beautiful maps in R to doing financial time-series analyses to downloading and analyzing hydrology data (see Vignettes). In fact, you have been using packages this whole time. For example, In order to knit a document using RMarkdown, you have to have the RMarkdown package installed. On many (most?) projects, the most efficient way to complete whatever task you are doing is to spend at least some time checking out whether there is a package that makes it easier for you to do things like: Download data from the internet Perform statistical analyses Plot data Make maps Add interactivity to your R code (like zoomable maps or plots) And so much more! 6.4.2 How do I use packages? There are always at least two steps to using any package. Install the package using install.packages(). You only have to do this once. Load the package using library(). You have to do this every time you want to use the capabilities of that package, but only once per Script or once per RMarkdown document. Here is an example with an extremely common plotting package ggplot2 that has been mentioned in the course (and that you have probably already seen on the internet) install.packages('ggplot2') Now that we’ve installed the package, we can load it into R using library(). library('ggplot2') Now that we have installed the package, we will need to learn how to use it. Where can we go to for help? 6.4.3 Finding and using package help. All R packages installed with install.packages will come from the Comprehensive R Archive Network (“CRAN”). In order for you to work with them they have to have gone through a minimum overview, which ensures that they will at least have a minimum help page. So, for any package you want to read more about you can simply search for: CRAN <package name>. For ggplot2 this will lead you to this website. This site outlines many of the resources for using ggplot2, but they can be hard to find. The two most important places to look for help are the Reference manual and the URL. The reference manual will outline every function that the package can perform and how to use the functions. ggplot2 is a big package so it has tons of functions, which is why you might not want to only use the PDF, which can be hard to navigate. Luckily they made a website that is more clear and has far more examples here. 6.4.4 Making Beautiful Plots with ggplot2 Our package is now loaded, and we have a manual for reference so let’s use it! # Making up data for plotting dat <- data.frame( response = c(1, 5, 10, 30, 100, 300), driver = c(1, 2, 3, 4, 5, 6)) # Make a scatter plot with x and y ggplot(dat, aes(x = driver, y = response)) + geom_point() In the above command ggplot2 uses the data frame dat and the aesthetics (aes) argument to map which columns go where. In this case we want the driver variable to be on the x-axis and the response variable to be on the y-axis. Finally we want to use points to display this relationship between x and y (geom_point). Note: ggplot2 connects a series of arguments using + operator. This is unique to ggplot, but it’s a helpful way to make complex plots by combining simpler pieces. This can be difficult to get used to, but can be very powerful once you get the hang of it. Let’s add some lines to connect the points using the geom_line() command. ggplot(dat, aes(x = driver, y = response)) + geom_point() + geom_line() # Add lines to connect the points The geom prefix on the geom_point and geom_line functions stands for geometry. ggplot2 comes with many different types of geometries (see here ), and some folks have created their own packages to add even more options! We can also change the way the lines and points look with arguments in the geom_point and geom_line functions: ggplot(dat, aes(x = driver, y = response)) + geom_point(color = "blue") + # Make the points blue geom_line(linetype = "dashed", color = "blue") # Make the lines dashed and blue We can add a title and axis labels using the labs function: ggplot(dat, aes(x = driver, y = response)) + geom_point(color = "blue") + geom_line(linetype = "dashed", color = "blue") + labs(title = "Driver vs. Response", x = "Driver", y = "Response") # Add labels to the plot Finally, we can use one of the included ggplot2 themes to change how the plot looks, using the theme_set function: theme_set(theme_minimal()) # Change the theme ggplot(dat, aes(x = driver, y = response)) + geom_point(color = "blue") + geom_line(linetype = "dashed", color = "blue") + labs(title = "Driver vs. Response", x = "Driver", y = "Response") Here’s another example using the mtcars data frame, where we color the points based on their fuel economy (mpg) and annotate a few cars. mtcars$car <- row.names(mtcars) # Turn row names into a column so we can label with them ggplot(mtcars, aes(x = hp, y = disp, color = mpg, label = car)) + geom_point() + geom_text(color = "black", hjust = 0, nudge_x = 5, alpha = 0.8, size = 2) + # Annotate each car scale_color_viridis_c(option = "D") + # Change color scale to use labs(title = "Motor Trend Car Comparison", x = "Horsepower", y = "Displacement", color = "MPG") This is only scratching the surface of what ggplot2 can do, but hopefully this introduction is enough to hint at the possibilities. You can find many more examples at The R Graph Gallery. (No need to turn this in) Create a plot of wt vs. mpg using the mtcars data frame using ggplot2. Make the points green. 6.4.5 Organizing Your Data With dplyr As we saw, ggplot2 is a package intended to make nice looking visualizations in R easy. This is interesting, because R already has the capability to make plots, it’s just that ggplot2 is another way of making plots which many people think is more powerful. The same can be said about the next package we’ll discuss, dplyr (rhymes with “deep liar”), which is another way of manipulating data in R. We’ve spent a considerable amount of time on indexing, and you may have found the process somewhat confusing. Well, dplyr is another way of indexing data frames that many people find to be more intuitive. As always, you have to install dplyr if you haven’t already. install.packages("dplyr") # Install using quotes! Then whenever you’d like to use the package, you have to load it: library(dplyr) # Load without using quotes! Let’s look at some examples of base R indexing and compare that to how dplyr accomplishes the same task. In base R, to select columns matching a certain condition, you create a logical vector and use it to index rows of the data frame. index <- (mtcars$cyl == 4) & (mtcars$wt < 2) # Select only columns with 4 cylinders and a weight under 2 tons mtcars[index,] In dplyr, the same thing can be accomplished with the filter function: filter(mtcars, cyl == 4, wt < 2) # Select only columns with 4 cylinders and a weight under 2 tons This might already seem like an improvement, because it requires less code, but most people use the filter function differently than this. dplyr uses a pipe (which looks like this %>%) to structure arguments differently. Here’s how the same function looks with the pipe: # Do the same filtering, but use the pipe, %>% mtcars %>% filter(cyl == 4, wt < 2) Basically, the pipe operator says “Take the thing on the left and use it as the first argument for the function on the right”. This may seem backwards at first, but it allows the chaining of multiple functions together in an order that reflects the order of computation that R will use (more on this after the next example). Recall that here’s how we select a column in base R: mtcars[,"qsec"] # Select the qsec column [1] 16.46 17.02 18.61 19.44 17.02 20.22 15.84 20.00 22.90 18.30 18.90 17.40 [13] 17.60 18.00 17.98 17.82 17.42 19.47 18.52 19.90 20.01 16.87 17.30 15.41 [25] 17.05 18.90 16.70 16.90 14.50 15.50 14.60 18.60 And here’s how to do the same thing in dplyr: mtcars %>% select(qsec) Notice that dplyr has maintained the data frame structure, while indexing has not. We can get the same thing from indexing if we use the drop = F argument: mtcars[,"qsec", drop = F] The pipe works with the select function because the first argument of select is the data frame to select from, so the pipe says “Use mtcars as the first argument of the select function”. Here’s how we would do the filtering and selection at the same time in dplyr: mtcars %>% filter(cyl == 4, wt < 2) %>% select(qsec) Since the result of the filter function is a data frame (which is why it printed in the result in the example above!), that data frame can be piped into the select function. This easy chaining of arguments is one reason why people love to work with tidyverse packages. The pipe operator is one of the most common elements of the tidyverse group of packages. One of the tidyverse packages called magrittr even uses the pipe operator as its official logo, with the slogan “Ceci n’est pas un pipe”, a reference to this famous work of art. dplyr can also summarize columns in different groups similarly to the tapply function. Here’s an example of tapply: # Find the mean mpg for different numbers of cylinders: tapply(mtcars$mpg, mtcars$cyl, mean) 4 6 8 26.66364 19.74286 15.10000 In dplyr this is accomplished with the group_by and summarize functions: mtcars %>% group_by(cyl) %>% summarize(ave_mpg = mean(mpg)) With only a few functions, we can now start to chain together quite complex operations in a human readable way: mtcars %>% filter(wt > 2) %>% # Filter out cars below 2 tons group_by(cyl, gear) %>% # Group by number of cylinders and number of gears summarize(n = n(), # Compute number of cars in each group ave_mpg = mean(mpg), # Compute average mpg sd_mpg = sd(mpg)) # Compute standard deviation of mpg `summarise()` has grouped output by 'cyl'. You can override using the `.groups` argument. Again, this is only a teaser of the capabilities of dplyr, but the hope is that if/when you encounter dplyr in the future, you will at least have an introduction to some of the basic concepts. 6.4.6 Working With Character Strings with stringr stringr is another tidyverse package that provides functions for easily working with character strings. # install.packages("stringr") # Install if you haven't before library(stringr) To show some of the capabilities of the stringr package, we’ll read in “Pride and Prejudice” which is available on Project Gutenberg here. lines <- readLines(file("data_raw/pride_and_prejudice.txt", "rt")) length(lines) # The book is now a long character vector [1] 14594 The first thing we’ll do is convert the text into “UTF-8” formatting using stringr’s str_conv function: lines <- str_conv(lines, "UTF-8") Right now, each element of lines is just a single line from the original text file. Let’s collapse all the elements into a single character string: book <- str_c(lines, collapse=" ") nchar(book) [1] 775739 Now we can split the book in a more sensible way. Let’s split the string at the end of each sentence using the strsplit function (this is a base R function, actually). sent <- strsplit(book, "(?<=[[:punct:]])\\\\s(?=[A-Z])", perl = T) # Split by end of sentences sent <- unlist(sent) # Convert list to character vector length(sent) [1] 5175 The strsplit function above used something called a regular expression to identify patterns that indicate the end of a sentence. Regular expressions are commonly used in programming, and can be confusing when first encountered. This is okay! You might want to take a look at this resource if you want more info on regular expressions in R. The sent vector now contains sentences as elements. Let’s look at an arbitrary sentence: sent[300] [1] "I should think she had as good a chance of happiness as if she were to be studying his character for a twelvemonth." We notice that there are some extra spaces in the sentence, which probably result from the formatting of the original text file. Ignoring that for now, we can find all sentences containing the word “Jane”: has_jane <- str_detect(sent, "Jane") # Returns logical vector sum(has_jane) [1] 265 We see there are 265 sentences with the string “Jane” in them. Let’s look at some of them: jane_sent <- sent[has_jane] jane_sent[100:105] [1] "She could think of nothing else; and yet whether Bingley’s regard had really died away, or were suppressed by his friends’ interference; whether he had been aware of Jane’s attachment, or whether it had escaped his observation; whatever were the case, though her opinion of him must be materially affected by the difference, her sister’s situation remained the same, her peace equally wounded. A day or two passed before Jane had courage to speak of her feelings to Elizabeth; but at last, on Mrs." [2] "It cannot last long. He will be forgot, and we shall all be as we were before.” Elizabeth looked at her sister with incredulous solicitude, but said nothing. “You doubt me,” cried Jane, slightly colouring; “indeed, you have no reason." [3] "A little time, therefore—I shall certainly try to get the better.” With a stronger voice she soon added, “I have this comfort immediately, that it has not been more than an error of fancy on my side, and that it has done no harm to anyone but myself.” “My dear Jane!” exclaimed Elizabeth, “you are too good." [4] "My dear Jane," [5] "You shall not, for the sake of one individual, change the meaning of principle and integrity, nor endeavour to persuade yourself or me, that selfishness is prudence, and insensibility of danger security for happiness.” “I must think your language too strong in speaking of both,” replied Jane; “and I hope you will be convinced of it by seeing them happy together." [6] "They may wish many things besides his happiness; they may wish his increase of wealth and consequence; they may wish him to marry a girl who has all the importance of money, great connections, and pride.” “Beyond a doubt, they do wish him to choose Miss Darcy,” replied Jane; “but this may be from better feelings than you are supposing." We can also count the number of occurrences of a string in the book using the str_count function: str_count(book, "pride") [1] 46 str_count(book, "prejudice") [1] 8 To see more capability of the stringr package, you can check out this cheat sheet. Any feedback for this section? Click here "],["404.html", "Page not found", " Page not found The page you requested cannot be found (perhaps it was moved or renamed). You may want to try searching to find the page's new location, or use the table of contents to find the page you are looking for. "]] diff --git a/docs/vignettes.html b/docs/vignettes.html index 36b37f4..3c438cb 100644 --- a/docs/vignettes.html +++ b/docs/vignettes.html @@ -446,11 +446,11 @@

5.7.1.5 Explore the data Date q_cfs Min. :2010-10-01 Min. : 1.31 1st Qu.:2014-03-04 1st Qu.: 22.90 - Median :2017-08-05 Median : 62.35 - Mean :2017-08-05 Mean : 222.52 - 3rd Qu.:2021-01-06 3rd Qu.: 147.00 - Max. :2024-06-10 Max. :7150.00 -

It looks like we have data from 2010 to 2024-06-11 and a range in river + Median :2017-08-06 Median : 62.40 + Mean :2017-08-06 Mean : 222.74 + 3rd Qu.:2021-01-08 3rd Qu.: 147.00 + Max. :2024-06-12 Max. :7150.00 +

It looks like we have data from 2010 to 2024-06-13 and a range in river flow (q_cfs) from 2.6 cfs all the way up to 7150 cfs. If you’re a hydrologist, hopefully these flow numbers look right, but another way to check to make sure is to simply plot the data as we do below.

diff --git a/docs/workspace-setup.html b/docs/workspace-setup.html index 62aaf73..052a71b 100644 --- a/docs/workspace-setup.html +++ b/docs/workspace-setup.html @@ -453,8 +453,8 @@

3.5.4 Some useful commands you sh
rm(list = ls())  # Clear everything in your workspace
 gc()             # Perform garbage collection
          used (Mb) gc trigger (Mb) limit (Mb) max used (Mb)
-Ncells  879268 47.0    1675977 89.6         NA  1322192 70.7
-Vcells 1630663 12.5    8388608 64.0     102400  2584202 19.8
+Ncells 879272 47.0 1676008 89.6 NA 1322144 70.7 +Vcells 1630670 12.5 8388608 64.0 102400 2591288 19.8

You might also want to clear the R console, which you can do by placing your cursor in the R console and typing <control> l (careful! that’s a lowercase L).

diff --git a/docs/writing-functions.html b/docs/writing-functions.html index 1b3fa0d..0b45363 100644 --- a/docs/writing-functions.html +++ b/docs/writing-functions.html @@ -406,7 +406,7 @@

6.2.1 The Components Of A Functio stop("'decreasing' must be a length-1 logical vector.\nDid you intend to set 'partial'?") UseMethod("sort") } -<bytecode: 0x11a66a380> +<bytecode: 0x14be3cca8> <environment: namespace:base>

Now, there are some things in this output that may be confusing and that we won’t explain in this book, but at least some of the output should look like R code to you! Here’s another example, the mean function:

@@ -414,7 +414,7 @@

6.2.1 The Components Of A Functio mean

function (x, ...) 
 UseMethod("mean")
-<bytecode: 0x11b948678>
+<bytecode: 0x12c8f9c78>
 <environment: namespace:base>

This example doesn’t seem to have as much R code in it, so where is the code for this function? The answer is that both sort and mean (and many other R functions) are written in a different programming language, C, which isn’t human readable once it’s compiled.

Alex Fout1