RStudio and GitHub Advanced

library(learnr)
library(tutorial.helpers)
library(tidyverse)
library(knitr)
library(usethis)
library(palmerpenguins)
library(gert)
library(gitcreds)

knitr::opts_chunk$set(echo = FALSE)
knitr::opts_chunk$set(out.width = '90%')
options(tutorial.exercise.timelimit = 60, 
        tutorial.storage = "local")


Introduction

This tutorial mostly covers material which is not actually in R for Data Science (2e) by Hadley Wickham, Mine Çetinkaya-Rundel, and Garrett Grolemund. But the material is in keeping with the spirit of that book, especially Chapter 28 Quarto. The material covered in Chapter 4 Workflow: code style appears in the "RStudio and Code" tutorial in this package.

Professionals store their work on Github, or a similar "source control" tool. If your computer blows up, you don't want to lose your work. Github is like Google Drive --- both live in the cloud --- but for your computational work rather than your documents.

This tutorial will introduce you to Github and to Git, a program for keeping track of changes in your code.

The most useful reference for Git/Github/RStudio is Happy Git and GitHub for the useR. Refer to that book whenever you have a problem.

Terminal Overview

The RStudio Terminal is how you directly communicate with the computer using commands, whereas the RStudio Console is how you talk to R.

This section will help introduce you to the Terminal so that you'll be up to speed for the commands needed later.

Project 1

Restart the R session with Cmd/Ctrl + Shift + 0.

This first project will simply review the steps which we have already learned. Making the data science work cycle second nature requires practice.

We don't need to set up Git/Github/RPubs again, having already done so above. In this section, our goal is to publish this plot to RPubs:

penguins |> 
  ggplot(aes(x = body_mass_g, y = flipper_length_mm, color = species)) +
    geom_point() +
    labs(title = "Penguins Body Mass compared to Flipper Length", 
         x = "Body Mass", 
         y = "Flipper Length")

Exercise 1

Create a Github repo (called project-1). Make sure to click the "Add a README file" check box. Copy/paste the URL for its Github location.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 3)

Your answer should look something like:

https://github.com/davidkane9/project-1

Always start a new data science project with a new Github repo.

Exercise 2

Connect the project-1 Github repo to an R project on your computer. Recall the steps:

That "tab" key trick is very handy! Keeping the names of repos/projects aligned makes organization simpler.

From the Console, run list.files(). CP/CR.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 3)
list.files()

Your answer should look something like this:

> list.files()
[1] "project-1.Rproj" "README.md"      
> 

The default README has an "md" suffix to indicate that it is a Markdown document.

RStudio has automatically restarted and placed you within the project-1 R project. The project-1 directory should be in the location in which you store your all your R projects.

Exercise 3

Go to File -> New File -> Quarto Document.... Title it "Quarto 1". You are the author. Save it with the name quarto-1. RStudio will automatically add the qmd suffix.

From the Console, run list.files(). CP/CR.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 6)

Your answer should look like this:

> list.files()
[1] "project-1.Rproj" "quarto-1.qmd"    "README.md"      

Titles should be in title case, obviously. File names are usually all lower case. Spaces in titles are fine, but there should never be spaces (or other weird characters --- other than underlines, _, and, less commonly, dashes -) in file names.

Exercise 4

To produce a complete report containing all text, code, and results, click “Render” or press Cmd/Ctrl + Shift + K.

This will create an HTML file and display it in the Viewer tab in the Output pane.

From the Console, run list.files(). CP/CR.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 3)

Your answer should look like this:

> list.files()
[1] "project-1.Rproj" "quarto-1_files"  "quarto-1.html"   "quarto-1.qmd"    "README.md"      
>    

The quarto-1.html is our rendered file, as expected. The quarto-1_files directory contains a variety of files which were involved in the transformation of quarto-1.qmd into quarto-1.html. None of the files in quarto-1_files are worth understanding, at least at this point in your data science education.

Exercise 5

Edit the .gitignore file to include two new lines: project-1.Rproj and quarto-1_files. Save the file.

In the Console, run:

tutorial.helpers::show_file(".gitignore")

CP/CR.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 3)

Your answer should look like:

> tutorial.helpers::show_file(".gitignore")
.Rproj.user
.Rhistory
.RData
.Ruserdata

project-1.Rproj
quarto-1_files
>

Every time that you render a Quarto document, RStudio creates a directory in which it places the supporting files which we used in that rendering. The name of that directory is name-of-your-file-without-the-suffx plus _files. The material in this directory is not worth backing up on GitHub. They are neither the original source material (quarto-1.qmd) which we will edit to make changes nor the final product (quarto-1.html) which we will show to others.

Exercise 6

Go to the Git tab within the Environment pane. Commit all the files --- .gitignore, quarto-1.qmd and quarto-1.html --- which have not been committed yet. Your commit message should be something like "Initial version." Push all the files.

From the Terminal, run git log. CP/CR.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 3)

The output of git log is somewhat confusing, but you should see your commit message in the top (most recent) commit.

Exercise 7

Note the "Source" and "Visual" boxes in the menu above the Source pane. As you are getting used to Quarto documents, it is best to look at the actual source, at least at the start. By default, the "Source" box should be selected. If you click on the "Visual" box, you will see a WYSIWYG display of what your document should look like after rendering.

Delete everything in quarto-1.qmd except the YAML header.

In the Console, run:

tutorial.helpers::show_file("quarto-1.qmd")

CP/CR.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 6)

Your answer should look like this:

> tutorial.helpers::show_file("quarto-1.qmd")
---                                            
title: "Quarto 1"
author: "David Kane"
format: html
---

When you render the document, Quarto sends the QMD file to knitr, which executes all of the code chunks and creates a new Markdown (.md) document which includes the code and its output. The Markdown file generated by knitr is then processed by pandoc, which is responsible for creating the finished HTML file.

Exercise 8

Add a code chunk within your document which includes library(tidyverse) and library(palmerpenguins). Render the document to ensure that everything works. (Fix any errors if it doesn't.)

In the Console, run:

tutorial.helpers::show_file("quarto-1.qmd", chunk = "Last")

CP/CR.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 8)

Your answer should look like:


Recall that you can add a code chunk by either pressing the “Insert” button icon in the editor toolbar (the green button with the letter C and a tiny plus sign) or by using the shortcut key combination: Command + Option + i or Ctrl + Alt + i.

You could also manually type the chunk delimiters ```r and ```, but, obviously, that is the worst option.

Exercise 9

Add a new code chunk, which just includes penguins. Render the document. Copy the displayed bottom contents of quarto-1.html below, starting with penguins.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 15)

Your answer should look like this (although some hash marks were removed):

penguins

A tibble: 344 × 8
   species island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
   <fct>   <fct>              <dbl>         <dbl>             <int>       <int>
 1 Adelie  Torgersen           39.1          18.7               181        3750
 2 Adelie  Torgersen           39.5          17.4               186        3800
 3 Adelie  Torgersen           40.3          18                 195        3250
 4 Adelie  Torgersen           NA            NA                  NA          NA
 5 Adelie  Torgersen           36.7          19.3               193        3450
 6 Adelie  Torgersen           39.3          20.6               190        3650
 7 Adelie  Torgersen           38.9          17.8               181        3625
 8 Adelie  Torgersen           39.2          19.6               195        4675
 9 Adelie  Torgersen           34.1          18.1               193        3475
10 Adelie  Torgersen           42            20.2               190        4250
 ℹ 334 more rows
 ℹ 2 more variables: sex <fct>, year <int>

Because the code is just the name of the tibble, R prints out the first 10 rows of the tibble, along with some other information, just like it would if you typed penguins at the Console.

Exercise 10

Change the code to pipe penguins into ggplot(), and within ggplot(), set mapping = aes(). Set x to body_mass_g. Cmd/Ctrl + Shift + K

In the Console, run:

tutorial.helpers::show_file("quarto-1.qmd", chunk = "Last")

CP/CR.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 6)

Inserting images and customizing how they are displayed is also facilitated with the visual editor. You can either paste an image from your clipboard directly into the visual editor (and RStudio will place a copy of that image in the project directory and link to it) or you can use the visual editor’s Insert -> Figure / Image ... menu to browse to the image you want to insert or paste it’s URL. In addition, using the same menu you can resize the image as well as add a caption, alternative text, and a link.

Exercise 11

Set y to flipper_length_mm within aes(). Cmd/Ctrl + Shift + K

In the Console, run:

tutorial.helpers::show_file("quarto-1.qmd", chunk = "Last")

CP/CR.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 6)

In the Visual editor you can either use the buttons on the menu bar to insert images, tables, cross-references, etc. or you can use the catch-all Cmd/Ctrl + / shortcut to insert just about anything. If you are at the beginning of a line, you can also enter just / to invoke the shortcut.

Exercise 12

Within aes(), set color to species to sort the graph by the species and add the geom_point() function. Don't forget +.

In the Console, run:

tutorial.helpers::show_file("quarto-1.qmd", chunk = "Last")

CP/CR.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 6)

The "Visual" editor has many more features that we haven’t enumerated here that you might find useful as you gain experience authoring with it.

Most importantly, while the Visual editor displays your content with formatting, under the hood, it saves your content in plain Markdown and you can switch back and forth between the Visual and Source editors to view and edit your content using either tool.

Exercise 13

Add labs() with +. Set title to "Penguins Body Mass compared to Flipper Length", x to "Body Mass", and y to "Flipper Length".

In the Console, run:

tutorial.helpers::show_file("quarto-1.qmd", chunk = "Last")

CP/CR.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 6)

Inserting images and customizing how they are displayed is also facilitated with the Visual editor. You can either paste an image from your clipboard directly into the Visual editor (and RStudio will place a copy of that image in the project directory and link to it) or you can use the Visual editor’s Insert > Figure / Image menu to browse to the image you want to insert or paste it’s URL. In addition, using the same menu you can resize the image as well as add a caption, alternative text, and a link.

But, since we rarely make use of this image functionality, we will almost always select the "Source" editor.

Exercise 14

Render quarto-1.qmd, either by hitting the "Render" button or by using Cmd/Ctrl + Shift + K.

Run list.files() from the Console. CP/CR.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 3)

Each time you render a Quarto document, RStudio should create an HTML and then send you to view the HTML, either in the Viewer tab within the Outputs pane or in your default browser.

You can toggle between these two options by clicking the gear symbol just to the right of the "Render" button and selecting either "Preview in Window" (which uses your browser) or "Preview in Viewer Pane." By running tutorial.helpers::set_rstudio_settings() in a previous tutorial, you have probably set the default to the latter.

Exercise 15

Near to the green code chunk button at the top right of your Quarto Doc and next to the "Run" button, you should see a blue circle button. That is the publish button. Click that, then click RPubs, then click publish. Copy the URL of your website below.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 6)

And that is it! You have completed a simple example of the data science workflow cycle. You started with nothing, created a Github repository, connected it to an R project on your computer, created a Quarto document, rendered it into a plot and published it on RPubs.

But we still haven't backed up our work on GitHub.

Exercise 16

Commit the changes in quarto-1.qmd and quarto-1.html. Ignore other files and directories like rsconnect. (We will discuss them in the next Section.) Use a sensible commit message. At the Terminal, run git log. CP/CR.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 3)

This plot is not perfect. In particular, we don't want to see any code, much less any ugly package startup messages. Nor do we like the warning message. The next section will address these issues, but in the context of a new repo/project.

Project 2

Restart the R session with Cmd/Ctrl + Shift + 0.

Exercise 1

Create a Github repo called project-2. Make sure to click the "Add a README file" check box. Copy/paste the URL for its Github location.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 3)

Your answer should look something like:

https://github.com/davidkane9/project-2

Note that Github looks different depending on which page you go to, whether it is the main page (github.com), your account page (github.com/your-user-name) or the repository tab on your account page github.com/your-user-name?tab=repositories. The green button to create a new repo only appears on the main page (upper left) and on the repository tab on your account page (upper right).

Exercise 2

Connect the project-2 Github repo to an R project on your computer. Name the R project project-2 also. (Don't forget the "tab" key trick.) Keeping the names of repos/projects aligned makes organization simpler.

In the Console, run:

list.files()

CP/CR.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 3)

Your answer should include two files: README.md and project-2.Rproj.

RStudio will automatically restart and place you within the project-2 R project. Recall that the definition of an R project is a directory which includes a Rproj file. If you run tutorial.helpers::show_file("project-2.Rproj") you will see that a Rproj file does not include the name of the project. The name of the project is taken from the directory in which it is located, i.e., the directory which contains the Rproj file.

Exercise 3

Select File -> New File -> Quarto Document .... Provide a title ("Quarto 2") and an author (you). Save the document as quarto-2.qmd. Cmd/Ctrl + Shift + K.

In the Console, run:

list.files(all.files = TRUE)

CP/CR.

The all.files = TRUE argument for list.files() generates all the files/directories, including the "hidden" ones whose names begin with a period, ..

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 6)

Your answer should look like this:

> list.files(all.files = TRUE)
 [1] "."               ".."              ".git"            ".gitignore"      ".Rproj.user"     "project-2.Rproj"
 [7] "quarto-2_files"  "quarto-2.html"   "quarto-2.qmd"    "README.md"      
> 

The single . refers to this directory while .. refers to the directory above, which is /Users/dkane/Desktop/projects in this case. .Rproj.user and .git are directories, meant solely for the use of RStudio and Git, respectively. The only other directory is quarto-2_files, a junk directory, created for the use of Quarto. We have discussed the other 5 files above.

Exercise 4

Edit the .gitignore by adding *Rproj and *_files.

In the Console, run:

tutorial.helpers::show_file(".gitignore")

CP/CR.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 6)

Your answer should look like this:

> tutorial.helpers::show_file(".gitignore")
.Rproj.user                                          
.Rhistory
.RData
.Ruserdata

*Rproj
*_files
>

We could have specified the file/directory to ignore more precisely by using their exact names: project-2.Rproj and quarto-2_files. Doing so would avoid any weird complications if we end up adding other files to the project which, by coincidence, happen to have names which end with Rproj or _files.

But that never (?) happens! And it is just easier to use the * versions. Note that * is a "regular expression" which matches any characters. So, Git will ignore any files or directories which end with Rproj or _files, including project-2.Rproj and quarto-2_files.

Exercise 5

Using the Git tab in the Environment pane, add, commit and push the three remaining files: .gitignore, quarto-2.qmd, and quarto-2.html. Use a sensible commit message.

From the Terminal, run git log. CP/CR.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 3)

Your answer should look like this:

Davids-MBP:project-2 dkane$ git log
commit 8f414d418c039a79364b6fbe4c6de32acb1e6235 (HEAD -> main, origin/main, origin/HEAD)
Author: davidkane9 <dave.kane@gmail.com>
Date:   Tue Feb 20 14:38:54 2024 -0500

    initial version

commit 4abced5c8c5b3dcd3a26d9efdce126031d8a0a0b
Author: David Kane <dave.kane@gmail.com>
Date:   Tue Feb 20 14:26:05 2024 -0500

    Initial commit
Davids-MBP:project-2 dkane$ 

There have been two commits in this repo. The first was generated automatically when we create the repo. The second was the one we just committed by hand, along with the commit message "initial version." Note how, next to the word "commit" there is a 40 character string of letters and numbers. This is the "hash" by which Github identifies each commit. The hash is always unique.

Exercise 6

Remove everything below the YAML header from quarto-2.qmd. Add the code chunks from the previous section:


Render the document. Copy-and-paste the "Warning" message which appears in quarto-2.html.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 3)

Your answer should look like this:

Warning: Removed 2 rows containing missing values (`geom_point()`).

There are at least three problems with quarto-2.html:

First, it displays the R code. Very few readers understand R code and even fewer want it to clutter up our pretty plot.

Second, it shows the startup message printed by the tidyverse package. This is never useful to our viewers. They care about our data and graphics.

Third, there is a warning message. We need to handle this sensibly, lest readers think that our results are suspect.

Exercise 7

We need to make it so that we do not see this code or the output in the render quarto-2.html document. To do this, we will put #| echo: false and #| message: false before library(tidyverse) in the first code chunk. Render.

In the Console, run:

tutorial.helpers::show_file("quarto-2.qmd")

CP/CR.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 8)

#| echo: false makes it so that the code in the code chunk does not appear in the rendered HTML file.#| message: false prevents the display of any R messages, in this case ones generated by loading the tiydverse package. So, the previous code makes the whole code chunk with the libraries in it not visible in quarto-2.html.

Exercise 8

Unfortunately, quarto-2.html still shows the code which creates the plot. So, before penguins in the second code chunk, add #| echo: false. Render the document.

In the Console, run:

tutorial.helpers::show_file("quarto-2.qmd")

CP/CR.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 3)

The #| echo: false makes it so that the code in the code chunk --- in this case, the code which create our plot --- does not appear in the rendered HTML. Except for the Warning, quarto-2.html is starting to look professional.

Exercise 9

It is annoying to have to include #| echo: false in multiple code chunks. So, Quarto allows us to include a command in the YAML which will then be applied in every code chunk.

Delete #| echo: false from the two code chunks. In the YAML header, add

execute: 
  echo: false

In the Console, run:

tutorial.helpers::show_file("quarto-2.qmd")

CP/CR.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 8)

Your answer should look like:


Render quarto-2.qmd to make sure everything still works. Fix anything which doesn't.

Exercise 10

We still have the Warning to deal with. From the Console, type penguins and hit Enter. (This will probably produce an error.) CP/CR.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 3)

Here is what I got:

> penguins
Error: object 'penguins' not found
> 

Recall the distinction between QMD World and Console World. In the QMD World, we have loaded the tidyverse and palmerpenguins packages. The latter contains the penguins tibble and the former includes the functions for printing tibbles nicely.

But in Console world, we haven't done those things. We restarted R at the beginning of this section. We need to explicitly library() those two packages.

Exercise 11

Put your cursor in quarto-2.qmd on the library(tidyverse) line. Hit Cmd/Ctrl + Enter. Note how the code is pasted down in the Console and then run there. Your cursor automatically moves down one line in quarto-2.qmd to the library(palmerpenguins) line. Hit Cmd/Ctrl + Enter again.

From the Console, run search(). CP/CR.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 3)

The return value from search() should include "package:palmerpenguins" along with all the packages which make up the Tidyverse, like lubridate and forcats.

The key lesson is that the Console does not know about the QMD file and the QMD file does not know about the Console. You need to keep them in sync.

Exercise 12

We have forgotten to label the code chunks. Not good! Add #| label: setup to the first code chunk and #| label: make-plot to the second. Cmd/Ctrl + Shift + K

In the Console, run:

tutorial.helpers::show_file("quarto-2.qmd", chunk = "Last")

CP/CR.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 3)

quarto-2.html is unchanged. Label'ing code chunk does not affect the output, but it is still good practice.

Exercise 13

From the Console, run summary(penguins$body_mass_g). CP/CR.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 3)

Your answer should look like this:

> summary(penguins$body_mass_g)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
   2700    3550    4050    4202    4750    6300       2 
> 

Note the two missing values. This is what is causing the warning message.

Exercise 14

There are two standard ways to get rid of a warning message. First, we can make deal with the substance of the issue, determine the problem with our code/data which is causing the warning and solve it. Second (and much easier) we can simply hide the warning, although in that case, we should really add a code comment explaining what is going on.

Because this section has gone on long enough, we take the second approach. To the make-plot code chunk, add #| warning: false. Render quarto-2.qmd.

In the Console, run:

tutorial.helpers::show_file("quarto-2.qmd", chunk = "Last")

CP/CR.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 3)

If you turn off warnings, you ought to add some code comments explaining why. A better approach, in this case, would have been to add a command like drop_na(body_mass_g) to the pipe. This would have removed the two rows with missing data.

Exercise 15

Press the Publish button. Choose RPubs. Include a sensible slug. (I chose quarto-2. A slug should not have any spaces since it is a URL.) Copy/paste the full URL below.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 3)

Your answer should look like:

https://rpubs.com/dkane/quarto-2

Exercise 16

Check out the Git tab. Note the "M" next to quarto-2.qmd and quarto-2.html. The "M" is Git's (and RStudio's) way of telling us that the files have been modified. Note, also, the new directory, rsconnect. This is another directory, like quarto-2_files, which does not belong on GitHub.

Add rsconnect to .gitignore. Commit and push .gitignore, quarto-2.qmd and quarto-2.html. Use a sensible commit message like "published version."

From the Terminal, run git log -n 1. CP/CR.

question_text(NULL,
    answer(NULL, correct = TRUE),
    allow_retry = TRUE,
    try_again_button = "Edit Answer",
    incorrect = NULL,
    rows = 8)

The -n 1 argument pulls up just the last commit.

This is the third time that we have started with nothing and gone all the way to publishing something on the web. Well done! The key steps are GitHub repo -> R project -> Quarto document -> HTML -> RPubs.

Summary

This tutorial mostly covered material which is not actually in R for Data Science (2e) by Hadley Wickham, Mine Çetinkaya-Rundel, and Garrett Grolemund. But the material is in keeping with the spirit of that book, especially Chapter 28 Quarto. The material covered in Chapter 4 Workflow: code style appears in the RStudio and Code tutorial in this package.

You should now have Git working on your computer. You should have a Github account and know how to connect Github repositories to RStudio projects.

The most useful reference for Git/Github/RStudio is Happy Git and GitHub for the useR. Bookmark it!




Try the r4ds.tutorials package in your browser

Any scripts or data that you put into this service are public.

r4ds.tutorials documentation built on April 3, 2025, 5:50 p.m.