13 Solutions
There is way more than one way to solve these challenges. Notice the differences between my solution and yours. Why are those differences there? Are they just differences in style or are they differences in function? In what ways is your solution better? In what ways is mine better?
13.1 Hello
# Function: hello_world_name -----
# Description: Prints "Hello World"
# Inputs: name - character string
# Outputs: Character string "Hello World, my name is _____!"
# Required packages
# None
# Example call
# hello_world("Thomas")
<- function(name = "_____") {
hello_world_name # Function body
print(paste0("Hello world, my name is ", name, "!"))
## End function ----- }
hello_world_name(name = "Thomas")
# [1] "Hello world, my name is Thomas!"
13.2 Freeform
I chose to explore the built in iris
data set.
iris# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 5.1 3.5 1.4 0.2 setosa
# 2 4.9 3.0 1.4 0.2 setosa
# 3 4.7 3.2 1.3 0.2 setosa
# 4 4.6 3.1 1.5 0.2 setosa
# 5 5.0 3.6 1.4 0.2 setosa
# 6 5.4 3.9 1.7 0.4 setosa
# 7 4.6 3.4 1.4 0.3 setosa
# 8 5.0 3.4 1.5 0.2 setosa
# 9 4.4 2.9 1.4 0.2 setosa
# 10 4.9 3.1 1.5 0.1 setosa
# 11 5.4 3.7 1.5 0.2 setosa
# 12 4.8 3.4 1.6 0.2 setosa
# 13 4.8 3.0 1.4 0.1 setosa
# 14 4.3 3.0 1.1 0.1 setosa
# 15 5.8 4.0 1.2 0.2 setosa
# 16 5.7 4.4 1.5 0.4 setosa
# 17 5.4 3.9 1.3 0.4 setosa
# 18 5.1 3.5 1.4 0.3 setosa
# 19 5.7 3.8 1.7 0.3 setosa
# 20 5.1 3.8 1.5 0.3 setosa
# 21 5.4 3.4 1.7 0.2 setosa
# 22 5.1 3.7 1.5 0.4 setosa
# 23 4.6 3.6 1.0 0.2 setosa
# 24 5.1 3.3 1.7 0.5 setosa
# 25 4.8 3.4 1.9 0.2 setosa
# 26 5.0 3.0 1.6 0.2 setosa
# 27 5.0 3.4 1.6 0.4 setosa
# 28 5.2 3.5 1.5 0.2 setosa
# 29 5.2 3.4 1.4 0.2 setosa
# 30 4.7 3.2 1.6 0.2 setosa
# 31 4.8 3.1 1.6 0.2 setosa
# 32 5.4 3.4 1.5 0.4 setosa
# 33 5.2 4.1 1.5 0.1 setosa
# 34 5.5 4.2 1.4 0.2 setosa
# 35 4.9 3.1 1.5 0.2 setosa
# 36 5.0 3.2 1.2 0.2 setosa
# 37 5.5 3.5 1.3 0.2 setosa
# 38 4.9 3.6 1.4 0.1 setosa
# 39 4.4 3.0 1.3 0.2 setosa
# 40 5.1 3.4 1.5 0.2 setosa
# 41 5.0 3.5 1.3 0.3 setosa
# 42 4.5 2.3 1.3 0.3 setosa
# 43 4.4 3.2 1.3 0.2 setosa
# 44 5.0 3.5 1.6 0.6 setosa
# 45 5.1 3.8 1.9 0.4 setosa
# 46 4.8 3.0 1.4 0.3 setosa
# 47 5.1 3.8 1.6 0.2 setosa
# 48 4.6 3.2 1.4 0.2 setosa
# 49 5.3 3.7 1.5 0.2 setosa
# 50 5.0 3.3 1.4 0.2 setosa
# 51 7.0 3.2 4.7 1.4 versicolor
# 52 6.4 3.2 4.5 1.5 versicolor
# 53 6.9 3.1 4.9 1.5 versicolor
# 54 5.5 2.3 4.0 1.3 versicolor
# 55 6.5 2.8 4.6 1.5 versicolor
# 56 5.7 2.8 4.5 1.3 versicolor
# 57 6.3 3.3 4.7 1.6 versicolor
# 58 4.9 2.4 3.3 1.0 versicolor
# 59 6.6 2.9 4.6 1.3 versicolor
# 60 5.2 2.7 3.9 1.4 versicolor
# 61 5.0 2.0 3.5 1.0 versicolor
# 62 5.9 3.0 4.2 1.5 versicolor
# 63 6.0 2.2 4.0 1.0 versicolor
# 64 6.1 2.9 4.7 1.4 versicolor
# 65 5.6 2.9 3.6 1.3 versicolor
# 66 6.7 3.1 4.4 1.4 versicolor
# 67 5.6 3.0 4.5 1.5 versicolor
# 68 5.8 2.7 4.1 1.0 versicolor
# 69 6.2 2.2 4.5 1.5 versicolor
# 70 5.6 2.5 3.9 1.1 versicolor
# 71 5.9 3.2 4.8 1.8 versicolor
# 72 6.1 2.8 4.0 1.3 versicolor
# 73 6.3 2.5 4.9 1.5 versicolor
# 74 6.1 2.8 4.7 1.2 versicolor
# 75 6.4 2.9 4.3 1.3 versicolor
# 76 6.6 3.0 4.4 1.4 versicolor
# 77 6.8 2.8 4.8 1.4 versicolor
# 78 6.7 3.0 5.0 1.7 versicolor
# 79 6.0 2.9 4.5 1.5 versicolor
# 80 5.7 2.6 3.5 1.0 versicolor
# 81 5.5 2.4 3.8 1.1 versicolor
# 82 5.5 2.4 3.7 1.0 versicolor
# 83 5.8 2.7 3.9 1.2 versicolor
# 84 6.0 2.7 5.1 1.6 versicolor
# 85 5.4 3.0 4.5 1.5 versicolor
# 86 6.0 3.4 4.5 1.6 versicolor
# 87 6.7 3.1 4.7 1.5 versicolor
# 88 6.3 2.3 4.4 1.3 versicolor
# 89 5.6 3.0 4.1 1.3 versicolor
# 90 5.5 2.5 4.0 1.3 versicolor
# 91 5.5 2.6 4.4 1.2 versicolor
# 92 6.1 3.0 4.6 1.4 versicolor
# 93 5.8 2.6 4.0 1.2 versicolor
# 94 5.0 2.3 3.3 1.0 versicolor
# 95 5.6 2.7 4.2 1.3 versicolor
# 96 5.7 3.0 4.2 1.2 versicolor
# 97 5.7 2.9 4.2 1.3 versicolor
# 98 6.2 2.9 4.3 1.3 versicolor
# 99 5.1 2.5 3.0 1.1 versicolor
# 100 5.7 2.8 4.1 1.3 versicolor
# 101 6.3 3.3 6.0 2.5 virginica
# 102 5.8 2.7 5.1 1.9 virginica
# 103 7.1 3.0 5.9 2.1 virginica
# 104 6.3 2.9 5.6 1.8 virginica
# 105 6.5 3.0 5.8 2.2 virginica
# 106 7.6 3.0 6.6 2.1 virginica
# 107 4.9 2.5 4.5 1.7 virginica
# 108 7.3 2.9 6.3 1.8 virginica
# 109 6.7 2.5 5.8 1.8 virginica
# 110 7.2 3.6 6.1 2.5 virginica
# 111 6.5 3.2 5.1 2.0 virginica
# 112 6.4 2.7 5.3 1.9 virginica
# 113 6.8 3.0 5.5 2.1 virginica
# 114 5.7 2.5 5.0 2.0 virginica
# 115 5.8 2.8 5.1 2.4 virginica
# 116 6.4 3.2 5.3 2.3 virginica
# 117 6.5 3.0 5.5 1.8 virginica
# 118 7.7 3.8 6.7 2.2 virginica
# 119 7.7 2.6 6.9 2.3 virginica
# 120 6.0 2.2 5.0 1.5 virginica
# 121 6.9 3.2 5.7 2.3 virginica
# 122 5.6 2.8 4.9 2.0 virginica
# 123 7.7 2.8 6.7 2.0 virginica
# 124 6.3 2.7 4.9 1.8 virginica
# 125 6.7 3.3 5.7 2.1 virginica
# 126 7.2 3.2 6.0 1.8 virginica
# 127 6.2 2.8 4.8 1.8 virginica
# 128 6.1 3.0 4.9 1.8 virginica
# 129 6.4 2.8 5.6 2.1 virginica
# 130 7.2 3.0 5.8 1.6 virginica
# 131 7.4 2.8 6.1 1.9 virginica
# 132 7.9 3.8 6.4 2.0 virginica
# 133 6.4 2.8 5.6 2.2 virginica
# 134 6.3 2.8 5.1 1.5 virginica
# 135 6.1 2.6 5.6 1.4 virginica
# 136 7.7 3.0 6.1 2.3 virginica
# 137 6.3 3.4 5.6 2.4 virginica
# 138 6.4 3.1 5.5 1.8 virginica
# 139 6.0 3.0 4.8 1.8 virginica
# 140 6.9 3.1 5.4 2.1 virginica
# 141 6.7 3.1 5.6 2.4 virginica
# 142 6.9 3.1 5.1 2.3 virginica
# 143 5.8 2.7 5.1 1.9 virginica
# 144 6.8 3.2 5.9 2.3 virginica
# 145 6.7 3.3 5.7 2.5 virginica
# 146 6.7 3.0 5.2 2.3 virginica
# 147 6.3 2.5 5.0 1.9 virginica
# 148 6.5 3.0 5.2 2.0 virginica
# 149 6.2 3.4 5.4 2.3 virginica
# 150 5.9 3.0 5.1 1.8 virginica
dim(iris)
# [1] 150 5
str(iris)
# 'data.frame': 150 obs. of 5 variables:
# $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
# $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
# $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
# $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
# $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
# Distribution statistics in iris data
summary(iris)
# Sepal.Length Sepal.Width Petal.Length Petal.Width
# Min. :4.300 Min. :2.000 Min. :1.000 Min. :0.100
# 1st Qu.:5.100 1st Qu.:2.800 1st Qu.:1.600 1st Qu.:0.300
# Median :5.800 Median :3.000 Median :4.350 Median :1.300
# Mean :5.843 Mean :3.057 Mean :3.758 Mean :1.199
# 3rd Qu.:6.400 3rd Qu.:3.300 3rd Qu.:5.100 3rd Qu.:1.800
# Max. :7.900 Max. :4.400 Max. :6.900 Max. :2.500
# Species
# setosa :50
# versicolor:50
# virginica :50
#
#
#
# There are better ways to do this in the tidyverse
summary(iris$Sepal.Length[iris$Species == "setosa"])
# Min. 1st Qu. Median Mean 3rd Qu. Max.
# 4.300 4.800 5.000 5.006 5.200 5.800
summary(iris$Sepal.Length[iris$Species == "setosa"])
# Min. 1st Qu. Median Mean 3rd Qu. Max.
# 4.300 4.800 5.000 5.006 5.200 5.800
summary(iris$Sepal.Length[iris$Species == "setosa"])
# Min. 1st Qu. Median Mean 3rd Qu. Max.
# 4.300 4.800 5.000 5.006 5.200 5.800
# Histogram of Petal.Length
hist(iris$Petal.Length)
13.3 Loop
<- c("hello", "this", "is", "a", "character", "vector")
vector <- NULL
vec for (i in 1:length(vector)) {
print(paste("loop #", i))
<- paste(vec, vector[i])
vec print(vec)
}# [1] "loop # 1"
# [1] " hello"
# [1] "loop # 2"
# [1] " hello this"
# [1] "loop # 3"
# [1] " hello this is"
# [1] "loop # 4"
# [1] " hello this is a"
# [1] "loop # 5"
# [1] " hello this is a character"
# [1] "loop # 6"
# [1] " hello this is a character vector"
13.4 Tidy iris
<- iris %>%
iris_dat # Save with individual samples go together by saving the row name
rownames_to_column(var = "sample") %>%
# Pivot the variables
pivot_longer(c(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width),
names_to = "measurement",
values_to = "cm")
13.5 iris
summary stats
<- iris %>%
iris_avg_tidy rownames_to_column(var = "sample") %>%
pivot_longer(c(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width),
names_to = "measurement",
values_to = "cm") %>%
group_by(Species, measurement) %>%
summarize(avg = mean(cm),
sd = sd(cm))
# `summarise()` has grouped output by 'Species'. You can override using the
# `.groups` argument.
# Make a more easily human readable table
%>%
iris_avg_tidy mutate(avg_sd = paste(signif(avg, 3),
"±",
signif(sd, 3))) %>%
::select(-c(avg, sd)) %>%
dplyrpivot_wider(names_from = Species,
values_from = avg_sd) %>%
::kable() kableExtra
measurement | setosa | versicolor | virginica |
---|---|---|---|
Petal.Length | 1.46 ± 0.174 | 4.26 ± 0.47 | 5.55 ± 0.552 |
Petal.Width | 0.246 ± 0.105 | 1.33 ± 0.198 | 2.03 ± 0.275 |
Sepal.Length | 5.01 ± 0.352 | 5.94 ± 0.516 | 6.59 ± 0.636 |
Sepal.Width | 3.43 ± 0.379 | 2.77 ± 0.314 | 2.97 ± 0.322 |