About this R Notebook
R Notebooks are a ‘flavor’ of R markdown that combine plain text with R commands in code chunks. You can (and should!) edit them with your own notes. Don’t forget to save every few minutes, like anything else!
You can use markdown characters to format text as bold, italic, or strikethrough.
R codes are embedded in ‘code chunks’. When you run the code, the output appears in the notebook under the code chunk (this can be changed under Settings).
To view a copy of your notebook as HTML, just hit Save, then Preview.
Keyboard shortcuts: - run the current line of R: ctrl + enter - run everything in the current code chunk: ctrl + shift + enter - insert a new code chunk: ctrl + alt + i
Run Code
x = "Hello World!"
x
[1] "Hello World!"
LETTERS[1:5]
[1] "A" "B" "C" "D" "E"
YOUR TURN
Compute the product of the numbers from 1 to 5. Answer
1 * 2 * 3 * 4 * 5
[1] 120
## or factorial(5)
Plot a Cosine Wave
Run the following:
## Plot a cosine wave
xvals = 4 * pi * (0:100)/100
plot(x = xvals, y = cos(xvals), type = "b")

YOUR TURN
Plot a sine wave Answer
xvals = 4 * pi * (0:100)/100
plot(x = xvals, y = sin(xvals), type = "b")

Plot the Batman Logo
Run the following lines all at once:
## Plot the batman logo
f1u <- function(x) ifelse ((abs(x) > 3 & abs(x) <= 7), 3*sqrt(1-(x/7)^2), 0)
f1d <- function(x) ifelse ((abs(x) >= 4 & abs(x) <= 7), -3*sqrt(1-(x/7)^2), 0)
f2u <- function(x) ifelse ((abs(x) > 0.50 & abs(x) < 0.75), 3*abs(x)+0.75, 0)
f2d <- function(x) ifelse ((abs(x) > -4 & abs(x) < 4), abs(x/2)-(3*sqrt(33)-7)*x^2/112-3 + sqrt(1-(abs(abs(x)-2)-1)^2), 0)
f3u <- function(x) ifelse ((x > -0.5 & x < 0.5), 2.25, 0)
f4u <- function(x) ifelse ((abs(x) > 1 & abs(x) <= 3), 6 * sqrt(10)/7 + (1.5 - 0.5 * abs(x)) * sqrt(abs(abs(x)-1)/(abs(x)-1)) - 6 * sqrt(10) * sqrt(4-(abs(x)-1)^2)/14, 0)
f5u <- function(x) ifelse ((abs(x) >= 0.75 & abs(x) <= 1), 9-8*abs(x), 0)
fu <- function (x) f1u(x) + f2u(x) + f3u(x) + f4u(x) + f5u(x)
fd <- function (x) f1d(x) + f2d(x)
bm <- function(r,x) ifelse(r%%2==0, fu(x), fd(x))
opar <- par(bg="#02233f", mar=c(0,0,0,0))
plot(x=seq(-7,7,0.065), y=Vectorize(bm)(1:216, seq(-7,7,0.065)), col="#999900", type="l", lwd=3)
par(opar)

View the Attendee Map
library(googlesheets4)
library(sf)
Linking to GEOS 3.9.0, GDAL 3.2.1, PROJ 7.2.1
library(leaflet)
Registered S3 methods overwritten by 'htmltools':
method from
print.html tools:rstudio
print.shiny.tag tools:rstudio
print.shiny.tag.list tools:rstudio
Registered S3 method overwritten by 'htmlwidgets':
method from
print.htmlwidget tools:rstudio
sheet_id <- "1lu2PBiKCK_A628ADY9opgpeqGmg0kc8JsV63KCYmLzo"
## Read the data frame from Google Sheets
gs4_deauth()
pipo_df <- range_read(sheet_id, sheet = "Form Responses 1")
Reading from "Spatial Analysis with R Workshop (Responses)"
Range "'Form Responses 1'"
## Convert the data frame to a simple features data frame
pipo_sf <- st_as_sf(pipo_df, coords = c("Lon", "Lat"), crs = 4326)
## Plot the locations in an interactive leaflet map
leaflet(pipo_sf) %>%
addTiles() %>%
addCircleMarkers(radius = 5, color = "red", opacity = 0.5,
popup = ~paste0("<p><b>", `First Name`, "</b></p>",
"Favorite plant / animal: ", `Favorite plant or animal`, "</p>"))
End
Congratulations on finishing the Notebook! Save it (again).
Click on the ‘Preview’ button in the RStudio toolbar to save a copy of your work as HTML.
LS0tDQp0aXRsZTogIkludHJvIHRvIFIgTm90ZWJvb2tzIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KIyBBYm91dCB0aGlzIFIgTm90ZWJvb2sNCg0KUiBOb3RlYm9va3MgYXJlIGEgJ2ZsYXZvcicgb2YgUiBtYXJrZG93biB0aGF0IGNvbWJpbmUgcGxhaW4gdGV4dCB3aXRoIFIgY29tbWFuZHMgaW4gY29kZSBjaHVua3MuIFlvdSBjYW4gKGFuZCBzaG91bGQhKSBlZGl0IHRoZW0gd2l0aCB5b3VyIG93biBub3Rlcy4gRG9uJ3QgZm9yZ2V0IHRvIHNhdmUgZXZlcnkgZmV3IG1pbnV0ZXMsIGxpa2UgYW55dGhpbmcgZWxzZSENCg0KWW91IGNhbiB1c2UgbWFya2Rvd24gY2hhcmFjdGVycyB0byBmb3JtYXQgdGV4dCBhcyAqKmJvbGQqKiwgKml0YWxpYyosIG9yIH5+c3RyaWtldGhyb3VnaH5+Lg0KDQpSIGNvZGVzIGFyZSBlbWJlZGRlZCBpbiAnY29kZSBjaHVua3MnLiBXaGVuIHlvdSBydW4gdGhlIGNvZGUsIHRoZSBvdXRwdXQgYXBwZWFycyBpbiB0aGUgbm90ZWJvb2sgdW5kZXIgdGhlIGNvZGUgY2h1bmsgKHRoaXMgY2FuIGJlIGNoYW5nZWQgdW5kZXIgU2V0dGluZ3MpLg0KDQpUbyB2aWV3IGEgY29weSBvZiB5b3VyIG5vdGVib29rIGFzIEhUTUwsIGp1c3QgaGl0ICoqU2F2ZSoqLCB0aGVuICoqUHJldmlldyoqLg0KDQpLZXlib2FyZCBzaG9ydGN1dHM6DQogLSBydW4gdGhlIGN1cnJlbnQgbGluZSBvZiBSOiAqY3RybCArIGVudGVyKg0KIC0gcnVuIGV2ZXJ5dGhpbmcgaW4gdGhlIGN1cnJlbnQgY29kZSBjaHVuazogKmN0cmwgKyBzaGlmdCArIGVudGVyKg0KIC0gaW5zZXJ0IGEgbmV3IGNvZGUgY2h1bms6ICpjdHJsICsgYWx0ICsgaSoNCg0KIyBSdW4gQ29kZQ0KDQpgYGB7cn0NCnggPSAiSGVsbG8gV29ybGQhIg0KeA0KYGBgDQoNCmBgYHtyfQ0KTEVUVEVSU1sxOjVdDQpgYGANCg0KIyBZT1VSIFRVUk4NCg0KQ29tcHV0ZSB0aGUgcHJvZHVjdCBvZiB0aGUgbnVtYmVycyBmcm9tIDEgdG8gNS4gW0Fuc3dlcl0oaHR0cHM6Ly9iaXQubHkvM3JubE9hWSkNCg0KYGBge3J9DQoxICogMiAqIDMgKiA0ICogNQ0KDQojIyBvciBmYWN0b3JpYWwoNSkNCmBgYA0KDQojIFBsb3QgYSBDb3NpbmUgV2F2ZQ0KDQpSdW4gdGhlIGZvbGxvd2luZzoNCg0KYGBge3J9DQojIyBQbG90IGEgY29zaW5lIHdhdmUNCnh2YWxzID0gNCAqIHBpICogKDA6MTAwKS8xMDANCnBsb3QoeCA9IHh2YWxzLCB5ID0gY29zKHh2YWxzKSwgdHlwZSA9ICJiIikNCmBgYA0KDQojIFlPVVIgVFVSTg0KDQpQbG90IGEgc2luZSB3YXZlIFtBbnN3ZXJdKGh0dHBzOi8vYml0Lmx5LzM2TlBtcDIpDQoNCmBgYHtyfQ0KeHZhbHMgPSA0ICogcGkgKiAoMDoxMDApLzEwMA0KcGxvdCh4ID0geHZhbHMsIHkgPSBzaW4oeHZhbHMpLCB0eXBlID0gImIiKQ0KYGBgDQoNCiMgUGxvdCB0aGUgQmF0bWFuIExvZ28NCg0KUnVuIHRoZSBmb2xsb3dpbmcgbGluZXMgYWxsIGF0IG9uY2U6DQoNCmBgYHtyfQ0KIyMgUGxvdCB0aGUgYmF0bWFuIGxvZ28NCmYxdSA8LSBmdW5jdGlvbih4KSBpZmVsc2UgKChhYnMoeCkgPiAgMyAmIGFicyh4KSA8PSA3KSwgMypzcXJ0KDEtKHgvNyleMiksIDApDQpmMWQgPC0gZnVuY3Rpb24oeCkgaWZlbHNlICgoYWJzKHgpID49IDQgJiBhYnMoeCkgPD0gNyksIC0zKnNxcnQoMS0oeC83KV4yKSwgMCkNCmYydSA8LSBmdW5jdGlvbih4KSBpZmVsc2UgKChhYnMoeCkgPiAwLjUwICYgYWJzKHgpIDwgMC43NSksIDMqYWJzKHgpKzAuNzUsIDApDQpmMmQgPC0gZnVuY3Rpb24oeCkgaWZlbHNlICgoYWJzKHgpID4gLTQgJiBhYnMoeCkgPCA0KSwgYWJzKHgvMiktKDMqc3FydCgzMyktNykqeF4yLzExMi0zICsgc3FydCgxLShhYnMoYWJzKHgpLTIpLTEpXjIpLCAwKQ0KZjN1IDwtIGZ1bmN0aW9uKHgpIGlmZWxzZSAoKHggPiAtMC41ICYgeCA8IDAuNSksIDIuMjUsIDApDQpmNHUgPC0gZnVuY3Rpb24oeCkgaWZlbHNlICgoYWJzKHgpID4gIDEgJiBhYnMoeCkgPD0gMyksIDYgKiBzcXJ0KDEwKS83ICsgKDEuNSAtIDAuNSAqIGFicyh4KSkgKiBzcXJ0KGFicyhhYnMoeCktMSkvKGFicyh4KS0xKSkgLSA2ICogc3FydCgxMCkgKiBzcXJ0KDQtKGFicyh4KS0xKV4yKS8xNCwgMCkNCmY1dSA8LSBmdW5jdGlvbih4KSBpZmVsc2UgKChhYnMoeCkgPj0gMC43NSAmIGFicyh4KSA8PSAxKSwgOS04KmFicyh4KSwgMCkNCmZ1IDwtIGZ1bmN0aW9uICh4KSBmMXUoeCkgKyBmMnUoeCkgKyBmM3UoeCkgKyBmNHUoeCkgKyBmNXUoeCkNCmZkIDwtIGZ1bmN0aW9uICh4KSBmMWQoeCkgKyBmMmQoeCkNCmJtIDwtIGZ1bmN0aW9uKHIseCkgaWZlbHNlKHIlJTI9PTAsIGZ1KHgpLCBmZCh4KSkNCm9wYXIgPC0gcGFyKGJnPSIjMDIyMzNmIiwgbWFyPWMoMCwwLDAsMCkpDQpwbG90KHg9c2VxKC03LDcsMC4wNjUpLCB5PVZlY3Rvcml6ZShibSkoMToyMTYsIHNlcSgtNyw3LDAuMDY1KSksIGNvbD0iIzk5OTkwMCIsIHR5cGU9ImwiLCBsd2Q9MykNCnBhcihvcGFyKQ0KYGBgDQoNCiMgVmlldyB0aGUgQXR0ZW5kZWUgTWFwDQoNCmBgYHtyfQ0KbGlicmFyeShnb29nbGVzaGVldHM0KQ0KbGlicmFyeShzZikNCmxpYnJhcnkobGVhZmxldCkNCg0Kc2hlZXRfaWQgPC0gIjFsdTJQQmlLQ0tfQTYyOEFEWTlvcGdwZXFHbWcwa2M4SnNWNjNLQ1ltTHpvIg0KDQojIyBSZWFkIHRoZSBkYXRhIGZyYW1lIGZyb20gR29vZ2xlIFNoZWV0cw0KZ3M0X2RlYXV0aCgpDQpwaXBvX2RmIDwtIHJhbmdlX3JlYWQoc2hlZXRfaWQsIHNoZWV0ID0gIkZvcm0gUmVzcG9uc2VzIDEiKQ0KDQojIyBDb252ZXJ0IHRoZSBkYXRhIGZyYW1lIHRvIGEgc2ltcGxlIGZlYXR1cmVzIGRhdGEgZnJhbWUNCnBpcG9fc2YgPC0gc3RfYXNfc2YocGlwb19kZiwgY29vcmRzID0gYygiTG9uIiwgIkxhdCIpLCBjcnMgPSA0MzI2KQ0KDQojIyBQbG90IHRoZSBsb2NhdGlvbnMgaW4gYW4gaW50ZXJhY3RpdmUgbGVhZmxldCBtYXANCmxlYWZsZXQocGlwb19zZikgJT4lIA0KICBhZGRUaWxlcygpICU+JSANCiAgYWRkQ2lyY2xlTWFya2VycyhyYWRpdXMgPSA1LCBjb2xvciA9ICJyZWQiLCBvcGFjaXR5ID0gMC41LCANCiAgICAgICAgICAgICAgICAgICBwb3B1cCA9IH5wYXN0ZTAoIjxwPjxiPiIsIGBGaXJzdCBOYW1lYCwgIjwvYj48L3A+IiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhdm9yaXRlIHBsYW50IC8gYW5pbWFsOiAiLCBgRmF2b3JpdGUgcGxhbnQgb3IgYW5pbWFsYCwgIjwvcD4iKSkNCmBgYA0KDQojIEVuZA0KDQpDb25ncmF0dWxhdGlvbnMgb24gZmluaXNoaW5nIHRoZSBOb3RlYm9vayEgU2F2ZSBpdCAoYWdhaW4pLg0KDQpDbGljayBvbiB0aGUgJ1ByZXZpZXcnIGJ1dHRvbiBpbiB0aGUgUlN0dWRpbyB0b29sYmFyIHRvIHNhdmUgYSBjb3B5IG9mIHlvdXIgd29yayBhcyBIVE1MLg0KDQoNCg==