R building block
#### Review
<-
+ - * / ^
c()
seq() # by=, length=
sum(), prod(), mean(), sd(), var(),
min(), median(), max(), range()
a[]
(a > 1), ==, !=, >, <, >=, <=, %in%
&, |, !
NA, mean(a, na.rm = TRUE), !is.na()
Plotting with ggplot2
library(ggplot2)
p <- ggplot(mpg, aes(x = displ, y = hwy))
p <- p + geom_point(aes(colour = class, size = cyl, shape = drv)
, alpha = 1/4)
print(p)

# examples of subsetting the scatterplot in facets
# facet_grid(rows ~ cols) for 2D grid, "." for no split.
# facet_wrap(~ var) for 1D ribbon wrapped into 2D.
p <- ggplot(mpg, aes(x = displ, y = hwy))
p <- p + geom_point()
p1 <- p + facet_grid(. ~ cyl) # columns are cyl categories
p2 <- p + facet_grid(drv ~ .) # rows are drv categories
p3 <- p + facet_grid(drv ~ cyl) # both
p4 <- p + facet_wrap(~ class) # wrap plots by class category
library(gridExtra)
grid.arrange(p1, p2, p3, p4, ncol = 2)

#### ggplot_mpg_class_hwy
p <- ggplot(mpg, aes(x = class, y = hwy))
p <- p + geom_point()
print(p)

#### ggplot_mpg_reorder_class_hwy
p <- ggplot(mpg, aes(x = reorder(class, hwy), y = hwy))
p <- p + geom_point()
print(p)

#### ggplot_mpg_reorder_class_hwy_jitter
p <- ggplot(mpg, aes(x = reorder(class, hwy), y = hwy))
p <- p + geom_point(position = "jitter")
print(p)

#### ggplot_mpg_reorder_class_hwy_jitter_less
p <- ggplot(mpg, aes(x = reorder(class, hwy), y = hwy))
p <- p + geom_jitter(position = position_jitter(width = 0.1))
print(p)

#### ggplot_mpg_reorder_class_hwy_boxplot
p <- ggplot(mpg, aes(x = reorder(class, hwy), y = hwy))
p <- p + geom_boxplot()
print(p)

#### ggplot_mpg_reorder_class_hwy_jitter_boxplot
p <- ggplot(mpg, aes(x = reorder(class, hwy), y = hwy))
p <- p + geom_jitter(position = position_jitter(width = 0.1))
p <- p + geom_boxplot(alpha = 0.5)
print(p)

#### ggplot_mpg_reorder_class_hwy_boxplot_jitter
p <- ggplot(mpg, aes(x = reorder(class, hwy), y = hwy))
p <- p + geom_boxplot(alpha = 0.5)
p <- p + geom_jitter(position = position_jitter(width = 0.1))
print(p)

#### ggplot_mpg_reorder_class_hwy_boxplot_jitter_median
p <- ggplot(mpg, aes(x = reorder(class, hwy, FUN = median), y = hwy))
p <- p + geom_boxplot(alpha = 0.5)
p <- p + geom_jitter(position = position_jitter(width = 0.1))
print(p)

LS0tCnRpdGxlOiAiSW50cm9kdWN0aW9uIHRvIFIsIFJzdHVkaW8sIGFuZCBnZ3Bsb3QiCm91dHB1dDogCiAgaHRtbF9ub3RlYm9vazogCiAgICB0b2M6IHllcwotLS0KCiMjIyBSIGJ1aWxkaW5nIGJsb2NrCmBgYHtyfQojIyMjIFJldmlldwo8LQorIC0gKiAvIF4KYygpCnNlcSgpICMgYnk9LCBsZW5ndGg9CnN1bSgpLCBwcm9kKCksIG1lYW4oKSwgc2QoKSwgdmFyKCksCm1pbigpLCBtZWRpYW4oKSwgbWF4KCksIHJhbmdlKCkKYVtdCihhID4gMSksID09LCAhPSwgPiwgPCwgPj0sIDw9LCAlaW4lCiYsIHwsICEKTkEsIG1lYW4oYSwgbmEucm0gPSBUUlVFKSwgIWlzLm5hKCkKYGBgCgojIyMgIFBsb3R0aW5nIHdpdGggZ2dwbG90MgpgYGB7cn0KbGlicmFyeShnZ3Bsb3QyKQpwIDwtIGdncGxvdChtcGcsIGFlcyh4ID0gZGlzcGwsIHkgPSBod3kpKQpwIDwtIHAgKyBnZW9tX3BvaW50KGFlcyhjb2xvdXIgPSBjbGFzcywgc2l6ZSA9IGN5bCwgc2hhcGUgPSBkcnYpCiAgICAgICAgICAgICAgICAgICwgYWxwaGEgPSAxLzQpCnByaW50KHApCmBgYAoKYGBge3J9CiMgZXhhbXBsZXMgb2Ygc3Vic2V0dGluZyB0aGUgc2NhdHRlcnBsb3QgaW4gZmFjZXRzCiMgZmFjZXRfZ3JpZChyb3dzIH4gY29scykgZm9yIDJEIGdyaWQsICIuIiBmb3Igbm8gc3BsaXQuCiMgZmFjZXRfd3JhcCh+IHZhcikgICAgICAgZm9yIDFEIHJpYmJvbiB3cmFwcGVkIGludG8gMkQuCnAgPC0gZ2dwbG90KG1wZywgYWVzKHggPSBkaXNwbCwgeSA9IGh3eSkpCnAgPC0gcCArIGdlb21fcG9pbnQoKQpwMSA8LSBwICsgZmFjZXRfZ3JpZCguIH4gY3lsKSAgICAgIyBjb2x1bW5zIGFyZSBjeWwgY2F0ZWdvcmllcwpwMiA8LSBwICsgZmFjZXRfZ3JpZChkcnYgfiAuKSAgICAgIyByb3dzIGFyZSBkcnYgY2F0ZWdvcmllcwpwMyA8LSBwICsgZmFjZXRfZ3JpZChkcnYgfiBjeWwpICAgIyBib3RoCnA0IDwtIHAgKyBmYWNldF93cmFwKH4gY2xhc3MpICAgICAjIHdyYXAgcGxvdHMgYnkgY2xhc3MgY2F0ZWdvcnkKbGlicmFyeShncmlkRXh0cmEpCmdyaWQuYXJyYW5nZShwMSwgcDIsIHAzLCBwNCwgbmNvbCA9IDIpCmBgYAoKYGBge3J9CiMjIyMgZ2dwbG90X21wZ19jbGFzc19od3kKcCA8LSBnZ3Bsb3QobXBnLCBhZXMoeCA9IGNsYXNzLCB5ID0gaHd5KSkKcCA8LSBwICsgZ2VvbV9wb2ludCgpCnByaW50KHApCiMjIyMgZ2dwbG90X21wZ19yZW9yZGVyX2NsYXNzX2h3eQpwIDwtIGdncGxvdChtcGcsIGFlcyh4ID0gcmVvcmRlcihjbGFzcywgaHd5KSwgeSA9IGh3eSkpCnAgPC0gcCArIGdlb21fcG9pbnQoKQpwcmludChwKQojIyMjIGdncGxvdF9tcGdfcmVvcmRlcl9jbGFzc19od3lfaml0dGVyCnAgPC0gZ2dwbG90KG1wZywgYWVzKHggPSByZW9yZGVyKGNsYXNzLCBod3kpLCB5ID0gaHd5KSkKcCA8LSBwICsgZ2VvbV9wb2ludChwb3NpdGlvbiA9ICJqaXR0ZXIiKQpwcmludChwKQojIyMjIGdncGxvdF9tcGdfcmVvcmRlcl9jbGFzc19od3lfaml0dGVyX2xlc3MKcCA8LSBnZ3Bsb3QobXBnLCBhZXMoeCA9IHJlb3JkZXIoY2xhc3MsIGh3eSksIHkgPSBod3kpKQpwIDwtIHAgKyBnZW9tX2ppdHRlcihwb3NpdGlvbiA9IHBvc2l0aW9uX2ppdHRlcih3aWR0aCA9IDAuMSkpCnByaW50KHApCiMjIyMgZ2dwbG90X21wZ19yZW9yZGVyX2NsYXNzX2h3eV9ib3hwbG90CnAgPC0gZ2dwbG90KG1wZywgYWVzKHggPSByZW9yZGVyKGNsYXNzLCBod3kpLCB5ID0gaHd5KSkKcCA8LSBwICsgZ2VvbV9ib3hwbG90KCkKcHJpbnQocCkKIyMjIyBnZ3Bsb3RfbXBnX3Jlb3JkZXJfY2xhc3NfaHd5X2ppdHRlcl9ib3hwbG90CnAgPC0gZ2dwbG90KG1wZywgYWVzKHggPSByZW9yZGVyKGNsYXNzLCBod3kpLCB5ID0gaHd5KSkKcCA8LSBwICsgZ2VvbV9qaXR0ZXIocG9zaXRpb24gPSBwb3NpdGlvbl9qaXR0ZXIod2lkdGggPSAwLjEpKQpwIDwtIHAgKyBnZW9tX2JveHBsb3QoYWxwaGEgPSAwLjUpCnByaW50KHApCiMjIyMgZ2dwbG90X21wZ19yZW9yZGVyX2NsYXNzX2h3eV9ib3hwbG90X2ppdHRlcgpwIDwtIGdncGxvdChtcGcsIGFlcyh4ID0gcmVvcmRlcihjbGFzcywgaHd5KSwgeSA9IGh3eSkpCnAgPC0gcCArIGdlb21fYm94cGxvdChhbHBoYSA9IDAuNSkKcCA8LSBwICsgZ2VvbV9qaXR0ZXIocG9zaXRpb24gPSBwb3NpdGlvbl9qaXR0ZXIod2lkdGggPSAwLjEpKQpwcmludChwKQojIyMjIGdncGxvdF9tcGdfcmVvcmRlcl9jbGFzc19od3lfYm94cGxvdF9qaXR0ZXJfbWVkaWFuCnAgPC0gZ2dwbG90KG1wZywgYWVzKHggPSByZW9yZGVyKGNsYXNzLCBod3ksIEZVTiA9IG1lZGlhbiksIHkgPSBod3kpKQpwIDwtIHAgKyBnZW9tX2JveHBsb3QoYWxwaGEgPSAwLjUpCnAgPC0gcCArIGdlb21faml0dGVyKHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyKHdpZHRoID0gMC4xKSkKcHJpbnQocCkKYGBgCgo=