This is an R Markdown document for the course ‘Computing in R’. Using this document, you can easily run selected pieces of R code shown during the lectures from within RStudio.

Basics of R

2+7
## [1] 9
sqrt(2)
## [1] 1.414214
cos(pi)
## [1] -1
log10(10^3)
## [1] 3
x <- 2
print(x)
## [1] 2
x
## [1] 2
x^2
## [1] 4
x
## [1] 2
#y < - x 
help(sqrt)
## starting httpd help server ... done
help.start()
## If nothing happens, you should open
## 'http://127.0.0.1:10229/doc/html/index.html' yourself
help(mean)
# ? is a shorthand for help()
?mean

Syntax: data

Data structures

x <- c(10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
x
##  [1] 10  9  8  7  6  5  4  3  2  1
x <- seq(from = 10, to = 1, by = -1)
x
##  [1] 10  9  8  7  6  5  4  3  2  1
x <- seq(10, 1)
x
##  [1] 10  9  8  7  6  5  4  3  2  1
x <- 10:1
x
##  [1] 10  9  8  7  6  5  4  3  2  1
x[5]
## [1] 6
x[10]
## [1] 1
x[5] + x[10]
## [1] 7
indx <- c(5,10)
indx
## [1]  5 10
x[indx]
## [1] 6 1
x[c(5,10)]
## [1] 6 1
c(-5, -10)
## [1]  -5 -10
x[c(-5, -10)]
## [1] 10  9  8  7  5  4  3  2
x[4] <- 12
x
##  [1] 10  9  8 12  6  5  4  3  2  1
mean(x)
## [1] 6
x + 1
##  [1] 11 10  9 13  7  6  5  4  3  2
2*x
##  [1] 20 18 16 24 12 10  8  6  4  2
help(matrix)
A <- matrix(data = 1:10, nrow = 2, ncol = 5)
A <- matrix(1:10, 2, 5)
A
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    3    5    7    9
## [2,]    2    4    6    8   10
A[2, 3]
## [1] 6
A[2,3] <- 12
A[1, ]
## [1] 1 3 5 7 9
A[1,1:5]
## [1] 1 3 5 7 9
A[, c(1, 5)]
##      [,1] [,2]
## [1,]    1    9
## [2,]    2   10
A[1:2, c(1,5)]
##      [,1] [,2]
## [1,]    1    9
## [2,]    2   10
dim(A[, c(1, 5)])
## [1] 2 2
#x[1,3]
x[c(1,3)]
## [1] 10  8
ls()
## [1] "A"    "indx" "r"    "x"
summary(x)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.00    3.25    5.50    6.00    8.75   12.00
summary(A)
##        V1             V2             V3              V4      
##  Min.   :1.00   Min.   :3.00   Min.   : 5.00   Min.   :7.00  
##  1st Qu.:1.25   1st Qu.:3.25   1st Qu.: 6.75   1st Qu.:7.25  
##  Median :1.50   Median :3.50   Median : 8.50   Median :7.50  
##  Mean   :1.50   Mean   :3.50   Mean   : 8.50   Mean   :7.50  
##  3rd Qu.:1.75   3rd Qu.:3.75   3rd Qu.:10.25   3rd Qu.:7.75  
##  Max.   :2.00   Max.   :4.00   Max.   :12.00   Max.   :8.00  
##        V5       
##  Min.   : 9.00  
##  1st Qu.: 9.25  
##  Median : 9.50  
##  Mean   : 9.50  
##  3rd Qu.: 9.75  
##  Max.   :10.00
a2 <- 1
#2a <- 1
c <- 1
c
## [1] 1
c(1,2)
## [1] 1 2
#else <- 1
c(1, 2, 3, 4)
## [1] 1 2 3 4
-2 < -2
## [1] FALSE
letters[1:3]
## [1] "a" "b" "c"
mode(x)
## [1] "numeric"
as.character(x)
##  [1] "10" "9"  "8"  "12" "6"  "5"  "4"  "3"  "2"  "1"
x
##  [1] 10  9  8 12  6  5  4  3  2  1
x[c(TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE,FALSE, TRUE, FALSE)]
## [1] 10  8  6  4  2
x>5
##  [1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE
x[x>5]
## [1] 10  9  8 12  6
length(x>5)
## [1] 10
length(x)
## [1] 10
x[x==5]   # == : test for equality
## [1] 5
x[x=5]    # = : assignment operator
## [1] 6
sum(x>5)
## [1] 5
TRUE & FALSE
## [1] FALSE
TRUE | FALSE
## [1] TRUE
x
##  [1] 10  9  8 12  6  5  4  3  2  1
x>5
##  [1]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE
x<8
##  [1] FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
x>5 & x<8
##  [1] FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
sum(x>5 & x<8)
## [1] 1
x[x>5 & x<8]
## [1] 6
m <- c(1,2,3,4)
names(m) <- c("gene 1","gene 2","gene 3","gene 4")
m
## gene 1 gene 2 gene 3 gene 4 
##      1      2      3      4
rownames(A)
## NULL
rownames(A) <- c("gene 1", "gene 2")
colnames(A) <- c("array 1", "array 2", "array 3","array 4", "array 5")
A
##        array 1 array 2 array 3 array 4 array 5
## gene 1       1       3       5       7       9
## gene 2       2       4      12       8      10
A["gene 1", ]
## array 1 array 2 array 3 array 4 array 5 
##       1       3       5       7       9
c("gene 1", 5)
## [1] "gene 1" "5"
list(gene = "gene 1", number = 5)
## $gene
## [1] "gene 1"
## 
## $number
## [1] 5
x <- list(gene = "gene 1", number = 5)
x[1]
## $gene
## [1] "gene 1"
x[[1]]
## [1] "gene 1"
x$gene
## [1] "gene 1"
pclass <- c("1st","2nd","1st")
survived <- c(1,1,0)
name <- c("Elisabeth Walton","Hudson Trevor","Helen Loraine")
age <- c(29.0,0.9167,2.0)
titanic <- data.frame(pclass,survived,name,age)
titanic
##   pclass survived             name     age
## 1    1st        1 Elisabeth Walton 29.0000
## 2    2nd        1    Hudson Trevor  0.9167
## 3    1st        0    Helen Loraine  2.0000
titanic[c(2,3),]
##   pclass survived          name    age
## 2    2nd        1 Hudson Trevor 0.9167
## 3    1st        0 Helen Loraine 2.0000
titanic[,c("name","age")]
##               name     age
## 1 Elisabeth Walton 29.0000
## 2    Hudson Trevor  0.9167
## 3    Helen Loraine  2.0000
titanic[c(2,3),c("name","age")]
##            name    age
## 2 Hudson Trevor 0.9167
## 3 Helen Loraine 2.0000
titanic$age
## [1] 29.0000  0.9167  2.0000
titanic[["age"]]
## [1] 29.0000  0.9167  2.0000
titanic$status <- c("yes","yes","no")
titanic
##   pclass survived             name     age status
## 1    1st        1 Elisabeth Walton 29.0000    yes
## 2    2nd        1    Hudson Trevor  0.9167    yes
## 3    1st        0    Helen Loraine  2.0000     no

In the exercises, we use the Titanic data set. See here for a description of the data.

library(foreign)
titanic3 <- read.dta("Exercises/titanic3.dta", convert.underscore=TRUE) # convert.underscore: Convert "_" in Stata variable names to "." in R names?
dim(titanic3)
## [1] 1309   17
head(titanic3[,1:4])
##   pclass survived                            name    sex
## 1    1st        1   Allen, Miss. Elisabeth Walton female
## 2    1st        1  Allison, Master. Hudson Trevor   male
## 3    1st        0    Allison, Miss. Helen Loraine female
## 4    1st        0 Allison, Mr. Hudson Joshua Crei   male
## 5    1st        0 Allison, Mrs. Hudson J C (Bessi female
## 6    1st        1             Anderson, Mr. Harry   male
tail(titanic3[,1:4])
##      pclass survived                      name    sex
## 1304    3rd        0     Yousseff, Mr. Gerious   male
## 1305    3rd        0      Zabour, Miss. Hileni female
## 1306    3rd        0     Zabour, Miss. Thamine female
## 1307    3rd        0 Zakarian, Mr. Mapriededer   male
## 1308    3rd        0       Zakarian, Mr. Ortin   male
## 1309    3rd        0        Zimmerman, Mr. Leo   male
str(titanic3[,1:4])
## 'data.frame':    1309 obs. of  4 variables:
##  $ pclass  : Factor w/ 3 levels "1st","2nd","3rd": 1 1 1 1 1 1 1 1 1 1 ...
##  $ survived: int  1 1 0 0 0 1 1 0 1 0 ...
##  $ name    : chr  "Allen, Miss. Elisabeth Walton" "Allison, Master. Hudson Trevor" "Allison, Miss. Helen Loraine" "Allison, Mr. Hudson Joshua Crei" ...
##  $ sex     : Factor w/ 2 levels "female","male": 1 2 1 2 1 2 1 2 1 2 ...

Data import

In R, we can also import directly from a web site:

load(url("http://biostat.mc.vanderbilt.edu/wiki/pub/Main/DataSets/titanic3.sav"))
ls()
##  [1] "A"        "a2"       "age"      "c"        "indx"     "m"       
##  [7] "name"     "pclass"   "r"        "survived" "titanic"  "titanic3"
## [13] "x"

An example using the readxl package for MS Excel files. The data set can be obtained from here. If the data set has been stored in a subfolder Exercises, it can be imported via

install.packages("readxl")
## package 'readxl' successfully unpacked and MD5 sums checked
## 
## The downloaded binary packages are in
##  C:\Users\pdmoerland\AppData\Local\Temp\RtmpkxKEGu\downloaded_packages
library(readxl)
## Warning: package 'readxl' was built under R version 3.5.3
titanic3 <- read_excel("Exercises/titanic3.xls")
## Warning in read_fun(path = enc2native(normalizePath(path)), sheet_i =
## sheet, : Coercing text to numeric in M1306 / R1306C13: '328'
## Explain warning message and repair by converting to number
## tibble
dim(titanic3)
## [1] 1309   14
head(titanic3[,1:4])
## # A tibble: 6 x 4
##   pclass survived name                                            sex   
##    <dbl>    <dbl> <chr>                                           <chr> 
## 1      1        1 Allen, Miss. Elisabeth Walton                   female
## 2      1        1 Allison, Master. Hudson Trevor                  male  
## 3      1        0 Allison, Miss. Helen Loraine                    female
## 4      1        0 Allison, Mr. Hudson Joshua Creighton            male  
## 5      1        0 Allison, Mrs. Hudson J C (Bessie Waldo Daniels) female
## 6      1        1 Anderson, Mr. Harry                             male
tail(titanic3[,1:4])
## # A tibble: 6 x 4
##   pclass survived name                      sex   
##    <dbl>    <dbl> <chr>                     <chr> 
## 1      3        0 Yousseff, Mr. Gerious     male  
## 2      3        0 Zabour, Miss. Hileni      female
## 3      3        0 Zabour, Miss. Thamine     female
## 4      3        0 Zakarian, Mr. Mapriededer male  
## 5      3        0 Zakarian, Mr. Ortin       male  
## 6      3        0 Zimmerman, Mr. Leo        male
## Last row: (not) empty?

We run the code to import the STATA file, which is what we will do in the exercises as well.

library(foreign)
titanic3 <- read.dta("Exercises/titanic3.dta", convert.underscore=TRUE)

Functions; special data formats; selections

Functions

Using the logarithm as an example, we show the different ways to obtain the 10-log of 100 (which should give 2 as outcome).

## Basic structure
log(100)  # does not give 2
## [1] 4.60517
help(log)
log(100, 10) 
## [1] 2
log(10, 100) # does not give 2
## [1] 0.5
log(base=10, x=100)
## [1] 2
log(b=10,x=100)
## [1] 2
## Some functions have an ... argument
c
## [1] 1
c(3,6,8)
## [1] 3 6 8
AMC <- c("Academic","Medical","Center")
help(paste)
paste(AMC, collapse=" ")
## [1] "Academic Medical Center"
## Some functions have an alias that is closer to common use
## E.g. + is an alias for the "+" function
"+"(1,7)
## [1] 8
## To cite R in publications:
citation()
## 
## To cite R in publications use:
## 
##   R Core Team (2018). R: A language and environment for
##   statistical computing. R Foundation for Statistical Computing,
##   Vienna, Austria. URL https://www.R-project.org/.
## 
## A BibTeX entry for LaTeX users is
## 
##   @Manual{,
##     title = {R: A Language and Environment for Statistical Computing},
##     author = {{R Core Team}},
##     organization = {R Foundation for Statistical Computing},
##     address = {Vienna, Austria},
##     year = {2018},
##     url = {https://www.R-project.org/},
##   }
## 
## We have invested a lot of time and effort in creating R, please
## cite it when using it for data analysis. See also
## 'citation("pkgname")' for citing R packages.

We can see the contents of a function by leaving out the parentheses. And we can write our own functions.

help 
## function (topic, package = NULL, lib.loc = NULL, verbose = getOption("verbose"), 
##     try.all.packages = getOption("help.try.all.packages"), help_type = getOption("help_type")) 
## {
##     types <- c("text", "html", "pdf")
##     help_type <- if (!length(help_type)) 
##         "text"
##     else match.arg(tolower(help_type), types)
##     if (!missing(package)) 
##         if (is.name(y <- substitute(package))) 
##             package <- as.character(y)
##     if (missing(topic)) {
##         if (!is.null(package)) {
##             if (interactive() && help_type == "html") {
##                 port <- tools::startDynamicHelp(NA)
##                 if (port <= 0L) 
##                   return(library(help = package, lib.loc = lib.loc, 
##                     character.only = TRUE))
##                 browser <- if (.Platform$GUI == "AQUA") {
##                   get("aqua.browser", envir = as.environment("tools:RGUI"))
##                 }
##                 else getOption("browser")
##                 browseURL(paste0("http://127.0.0.1:", port, "/library/", 
##                   package, "/html/00Index.html"), browser)
##                 return(invisible())
##             }
##             else return(library(help = package, lib.loc = lib.loc, 
##                 character.only = TRUE))
##         }
##         if (!is.null(lib.loc)) 
##             return(library(lib.loc = lib.loc))
##         topic <- "help"
##         package <- "utils"
##         lib.loc <- .Library
##     }
##     ischar <- tryCatch(is.character(topic) && length(topic) == 
##         1L, error = function(e) FALSE)
##     if (!ischar) {
##         reserved <- c("TRUE", "FALSE", "NULL", "Inf", "NaN", 
##             "NA", "NA_integer_", "NA_real_", "NA_complex_", "NA_character_")
##         stopic <- deparse(substitute(topic))
##         if (!is.name(substitute(topic)) && !stopic %in% reserved) 
##             stop("'topic' should be a name, length-one character vector or reserved word")
##         topic <- stopic
##     }
##     paths <- index.search(topic, find.package(if (is.null(package)) 
##         loadedNamespaces()
##     else package, lib.loc, verbose = verbose))
##     try.all.packages <- !length(paths) && is.logical(try.all.packages) && 
##         !is.na(try.all.packages) && try.all.packages && is.null(package) && 
##         is.null(lib.loc)
##     if (try.all.packages) {
##         for (lib in .libPaths()) {
##             packages <- .packages(TRUE, lib)
##             packages <- packages[is.na(match(packages, .packages()))]
##             paths <- c(paths, index.search(topic, file.path(lib, 
##                 packages)))
##         }
##         paths <- paths[nzchar(paths)]
##     }
##     structure(unique(paths), call = match.call(), topic = topic, 
##         tried_all_packages = try.all.packages, type = help_type, 
##         class = "help_files_with_topic")
## }
## <bytecode: 0x0000000007ab5a88>
## <environment: namespace:utils>
good.morning <- function(work){ 
  if(work==TRUE) cat("wake up") else 
    cat("you can stay in bed")
}
good.morning
## function(work){ 
##   if(work==TRUE) cat("wake up") else 
##     cat("you can stay in bed")
## }
#good.morning()
good.morning(work=FALSE)
## you can stay in bed

Selections

install.packages("ISwR")
## package 'ISwR' successfully unpacked and MD5 sums checked
## 
## The downloaded binary packages are in
##  C:\Users\pdmoerland\AppData\Local\Temp\RtmpkxKEGu\downloaded_packages
library(ISwR)
## Warning: package 'ISwR' was built under R version 3.5.3
help(juul)
summary(juul)
##       age            menarche          sex             igf1      
##  Min.   : 0.170   Min.   :1.000   Min.   :1.000   Min.   : 25.0  
##  1st Qu.: 9.053   1st Qu.:1.000   1st Qu.:1.000   1st Qu.:202.2  
##  Median :12.560   Median :1.000   Median :2.000   Median :313.5  
##  Mean   :15.095   Mean   :1.476   Mean   :1.534   Mean   :340.2  
##  3rd Qu.:16.855   3rd Qu.:2.000   3rd Qu.:2.000   3rd Qu.:462.8  
##  Max.   :83.000   Max.   :2.000   Max.   :2.000   Max.   :915.0  
##  NA's   :5        NA's   :635     NA's   :5       NA's   :321    
##      tanner        testvol      
##  Min.   :1.00   Min.   : 1.000  
##  1st Qu.:1.00   1st Qu.: 1.000  
##  Median :2.00   Median : 3.000  
##  Mean   :2.64   Mean   : 7.896  
##  3rd Qu.:5.00   3rd Qu.:15.000  
##  Max.   :5.00   Max.   :30.000  
##  NA's   :240    NA's   :859
juul$age[1:10] 
##  [1]   NA   NA   NA   NA   NA 0.17 0.17 0.17 0.17 0.17
juul[1:10,"age"]
##  [1]   NA   NA   NA   NA   NA 0.17 0.17 0.17 0.17 0.17
## head and tail functions
tail(juul[, c("menarche","sex")])
##      menarche sex
## 1334        2   2
## 1335        2   2
## 1336        2   2
## 1337        2   2
## 1338        2   2
## 1339        2   2
## in baby steps
tmp <- juul[, c("menarche","sex")] # all rows, two columns
tail(tmp) # last six rows
##      menarche sex
## 1334        2   2
## 1335        2   2
## 1336        2   2
## 1337        2   2
## 1338        2   2
## 1339        2   2
## or 
tail(juul)[, c("menarche","sex")]
##      menarche sex
## 1334        2   2
## 1335        2   2
## 1336        2   2
## 1337        2   2
## 1338        2   2
## 1339        2   2
## in baby steps 
tmp <- tail(juul) # last six rows, all columns
tmp[, c("menarche","sex")] # two columns
##      menarche sex
## 1334        2   2
## 1335        2   2
## 1336        2   2
## 1337        2   2
## 1338        2   2
## 1339        2   2
## some selections using subset function
subset(juul, tanner==2 & age<10)
##      age menarche sex igf1 tanner testvol
## 192 9.50       NA   1   NA      2       2
## 831 9.82        1   2   NA      2      NA
## 835 9.89        1   2  229      2      NA
subset(juul, tanner>=4 & age>45)
##        age menarche sex igf1 tanner testvol
## 1325 47.37        2   2  144      5      NA
## 1326 48.01        2   2  154      5      NA
## 1329 51.07        2   2  187      5      NA
## 1334 58.95        2   2  218      5      NA
## 1335 60.99        2   2  226      5      NA
subset(juul, tanner %in% c(1,5) & (age==0.25|age>50))
##        age menarche sex igf1 tanner testvol
## 13    0.25       NA   1   90      1      NA
## 14    0.25       NA   1  141      1      NA
## 628   0.25       NA   2   51      1      NA
## 1329 51.07        2   2  187      5      NA
## 1334 58.95        2   2  218      5      NA
## 1335 60.99        2   2  226      5      NA
with(juul, table(sex, tanner))
##    tanner
## sex   1   2   3   4   5
##   1 291  55  34  41 124
##   2 224  48  38  40 204
xtabs(~sex+tanner, data=juul)
##    tanner
## sex   1   2   3   4   5
##   1 291  55  34  41 124
##   2 224  48  38  40 204
xtabs(~sex+tanner, data=juul, subset=(menarche==1))
##    tanner
## sex   1   2   3   4   5
##   2 221  43  32  14   2
## also select columns using subset function
subset(juul, tanner==2 & age<10, select=c(menarche,sex))
##     menarche sex
## 192       NA   1
## 831        1   2
## 835        1   2

Some special data types

Missing data

When checking for missingness, we need to use the is.na function.

titanic3$age[1:20]
##  [1] 29.0000  0.9167  2.0000 30.0000 25.0000 48.0000 63.0000 39.0000
##  [9] 53.0000 71.0000 47.0000 18.0000 24.0000 26.0000 80.0000      NA
## [17] 24.0000 50.0000 32.0000 36.0000
table(titanic3$age==NA)
## < table of extent 0 >
3==NA
## [1] NA
is.na(3)
## [1] FALSE
table(is.na(titanic3$age))
## 
## FALSE  TRUE 
##  1046   263
## select those with missing igf1 value
subset(juul, tanner %in% c(1,5) & is.na(igf1) & (age<5|age>18))
##        age menarche sex igf1 tanner testvol
## 630   2.64        1   2   NA      1      NA
## 1225 18.09        2   2   NA      5      NA
## 1239 18.44        2   2   NA      5      NA
#quantile(juul$age, prob=c(0.025,0.25,0.5,0.75,0.975)) # gives an error
quantile(juul$age, prob=c(0.025,0.25,0.5,0.75,0.975), na.rm=TRUE)
##     2.5%      25%      50%      75%    97.5% 
##  2.88525  9.05250 12.56000 16.85500 51.48175
with(juul, table(sex, menarche))
##    menarche
## sex   1   2
##   1   0   0
##   2 369 335
with(juul, table(sex, menarche, useNA="always"))
##       menarche
## sex      1   2 <NA>
##   1      0   0  621
##   2    369 335    9
##   <NA>   0   0    5

Factors

DiseaseState <- factor(c("Cancer", "Cancer", "Normal"))
DiseaseState
## [1] Cancer Cancer Normal
## Levels: Cancer Normal
str(DiseaseState)
##  Factor w/ 2 levels "Cancer","Normal": 1 1 2
levels(DiseaseState)
## [1] "Cancer" "Normal"
typeof(DiseaseState) # the internal coding is via integers
## [1] "integer"
is.factor(DiseaseState)
## [1] TRUE
help(factor)
## change labels
factor(c("Cancer", "Cancer", "Normal"), labels=c("Dis","Norm"))
## [1] Dis  Dis  Norm
## Levels: Dis Norm
## change ordering of levels
DiseaseState2 <- factor(c("Cancer", "Cancer", "Normal"),levels=c("Normal","Cancer"))
table(DiseaseState)
## DiseaseState
## Cancer Normal 
##      2      1
table(DiseaseState2)
## DiseaseState2
## Normal Cancer 
##      1      2
## can also use relevel function
relevel(DiseaseState, ref="Normal")
## [1] Cancer Cancer Normal
## Levels: Normal Cancer
## see what changes internally
as.numeric(DiseaseState)
## [1] 1 1 2
as.numeric(relevel(DiseaseState, ref="Normal"))
## [1] 2 2 1

Dates

as.Date("15 April 1912", "%d %b %Y")
## [1] "1912-04-15"
julian(as.Date("15 April 1912", "%d %b %Y"))
## [1] -21080
## attr(,"origin")
## [1] "1970-01-01"
titanic3$dob <- as.Date("15 April 1912", "%d %b %Y")+ (-titanic3$age*365.25)
as.Date("15041912", "%d%m%Y")
## [1] "1912-04-15"
as.Date("150412", "%d%m%y")
## [1] "2012-04-15"
format(as.Date("1912April15", "%Y%b%d"),"%A %B %d, %Y")
## [1] "Monday April 15, 1912"
install.packages("lubridate")
## package 'lubridate' successfully unpacked and MD5 sums checked
## 
## The downloaded binary packages are in
##  C:\Users\pdmoerland\AppData\Local\Temp\RtmpkxKEGu\downloaded_packages
library(lubridate)
## Warning: package 'lubridate' was built under R version 3.5.3
## 
## Attaching package: 'lubridate'
## The following object is masked from 'package:base':
## 
##     date
wday(as.Date("1912April15", "%Y%b%d"),label=TRUE)
## [1] Mon
## Levels: Sun < Mon < Tue < Wed < Thu < Fri < Sat

Swirl

#install.packages("swirl")
#library(swirl)
#install_from_swirl("R Programming")
#swirl()

Graphics

Basic graphics

x <- (0:100)/10
plot(x, x^3 - 13 * x^2 + 39 * x)

plot(x, x^3 - 13 * x^2 + 39 * x,cex.axis=1.5,cex.lab=1.5)

plot(x,x^3-13*x^2+39*x,type="l",xlab="time (hours)",ylab="temperature",main="Enhanced plot",cex.axis=1.5,cex.lab=1.5)

colors()
##   [1] "white"                "aliceblue"            "antiquewhite"        
##   [4] "antiquewhite1"        "antiquewhite2"        "antiquewhite3"       
##   [7] "antiquewhite4"        "aquamarine"           "aquamarine1"         
##  [10] "aquamarine2"          "aquamarine3"          "aquamarine4"         
##  [13] "azure"                "azure1"               "azure2"              
##  [16] "azure3"               "azure4"               "beige"               
##  [19] "bisque"               "bisque1"              "bisque2"             
##  [22] "bisque3"              "bisque4"              "black"               
##  [25] "blanchedalmond"       "blue"                 "blue1"               
##  [28] "blue2"                "blue3"                "blue4"               
##  [31] "blueviolet"           "brown"                "brown1"              
##  [34] "brown2"               "brown3"               "brown4"              
##  [37] "burlywood"            "burlywood1"           "burlywood2"          
##  [40] "burlywood3"           "burlywood4"           "cadetblue"           
##  [43] "cadetblue1"           "cadetblue2"           "cadetblue3"          
##  [46] "cadetblue4"           "chartreuse"           "chartreuse1"         
##  [49] "chartreuse2"          "chartreuse3"          "chartreuse4"         
##  [52] "chocolate"            "chocolate1"           "chocolate2"          
##  [55] "chocolate3"           "chocolate4"           "coral"               
##  [58] "coral1"               "coral2"               "coral3"              
##  [61] "coral4"               "cornflowerblue"       "cornsilk"            
##  [64] "cornsilk1"            "cornsilk2"            "cornsilk3"           
##  [67] "cornsilk4"            "cyan"                 "cyan1"               
##  [70] "cyan2"                "cyan3"                "cyan4"               
##  [73] "darkblue"             "darkcyan"             "darkgoldenrod"       
##  [76] "darkgoldenrod1"       "darkgoldenrod2"       "darkgoldenrod3"      
##  [79] "darkgoldenrod4"       "darkgray"             "darkgreen"           
##  [82] "darkgrey"             "darkkhaki"            "darkmagenta"         
##  [85] "darkolivegreen"       "darkolivegreen1"      "darkolivegreen2"     
##  [88] "darkolivegreen3"      "darkolivegreen4"      "darkorange"          
##  [91] "darkorange1"          "darkorange2"          "darkorange3"         
##  [94] "darkorange4"          "darkorchid"           "darkorchid1"         
##  [97] "darkorchid2"          "darkorchid3"          "darkorchid4"         
## [100] "darkred"              "darksalmon"           "darkseagreen"        
## [103] "darkseagreen1"        "darkseagreen2"        "darkseagreen3"       
## [106] "darkseagreen4"        "darkslateblue"        "darkslategray"       
## [109] "darkslategray1"       "darkslategray2"       "darkslategray3"      
## [112] "darkslategray4"       "darkslategrey"        "darkturquoise"       
## [115] "darkviolet"           "deeppink"             "deeppink1"           
## [118] "deeppink2"            "deeppink3"            "deeppink4"           
## [121] "deepskyblue"          "deepskyblue1"         "deepskyblue2"        
## [124] "deepskyblue3"         "deepskyblue4"         "dimgray"             
## [127] "dimgrey"              "dodgerblue"           "dodgerblue1"         
## [130] "dodgerblue2"          "dodgerblue3"          "dodgerblue4"         
## [133] "firebrick"            "firebrick1"           "firebrick2"          
## [136] "firebrick3"           "firebrick4"           "floralwhite"         
## [139] "forestgreen"          "gainsboro"            "ghostwhite"          
## [142] "gold"                 "gold1"                "gold2"               
## [145] "gold3"                "gold4"                "goldenrod"           
## [148] "goldenrod1"           "goldenrod2"           "goldenrod3"          
## [151] "goldenrod4"           "gray"                 "gray0"               
## [154] "gray1"                "gray2"                "gray3"               
## [157] "gray4"                "gray5"                "gray6"               
## [160] "gray7"                "gray8"                "gray9"               
## [163] "gray10"               "gray11"               "gray12"              
## [166] "gray13"               "gray14"               "gray15"              
## [169] "gray16"               "gray17"               "gray18"              
## [172] "gray19"               "gray20"               "gray21"              
## [175] "gray22"               "gray23"               "gray24"              
## [178] "gray25"               "gray26"               "gray27"              
## [181] "gray28"               "gray29"               "gray30"              
## [184] "gray31"               "gray32"               "gray33"              
## [187] "gray34"               "gray35"               "gray36"              
## [190] "gray37"               "gray38"               "gray39"              
## [193] "gray40"               "gray41"               "gray42"              
## [196] "gray43"               "gray44"               "gray45"              
## [199] "gray46"               "gray47"               "gray48"              
## [202] "gray49"               "gray50"               "gray51"              
## [205] "gray52"               "gray53"               "gray54"              
## [208] "gray55"               "gray56"               "gray57"              
## [211] "gray58"               "gray59"               "gray60"              
## [214] "gray61"               "gray62"               "gray63"              
## [217] "gray64"               "gray65"               "gray66"              
## [220] "gray67"               "gray68"               "gray69"              
## [223] "gray70"               "gray71"               "gray72"              
## [226] "gray73"               "gray74"               "gray75"              
## [229] "gray76"               "gray77"               "gray78"              
## [232] "gray79"               "gray80"               "gray81"              
## [235] "gray82"               "gray83"               "gray84"              
## [238] "gray85"               "gray86"               "gray87"              
## [241] "gray88"               "gray89"               "gray90"              
## [244] "gray91"               "gray92"               "gray93"              
## [247] "gray94"               "gray95"               "gray96"              
## [250] "gray97"               "gray98"               "gray99"              
## [253] "gray100"              "green"                "green1"              
## [256] "green2"               "green3"               "green4"              
## [259] "greenyellow"          "grey"                 "grey0"               
## [262] "grey1"                "grey2"                "grey3"               
## [265] "grey4"                "grey5"                "grey6"               
## [268] "grey7"                "grey8"                "grey9"               
## [271] "grey10"               "grey11"               "grey12"              
## [274] "grey13"               "grey14"               "grey15"              
## [277] "grey16"               "grey17"               "grey18"              
## [280] "grey19"               "grey20"               "grey21"              
## [283] "grey22"               "grey23"               "grey24"              
## [286] "grey25"               "grey26"               "grey27"              
## [289] "grey28"               "grey29"               "grey30"              
## [292] "grey31"               "grey32"               "grey33"              
## [295] "grey34"               "grey35"               "grey36"              
## [298] "grey37"               "grey38"               "grey39"              
## [301] "grey40"               "grey41"               "grey42"              
## [304] "grey43"               "grey44"               "grey45"              
## [307] "grey46"               "grey47"               "grey48"              
## [310] "grey49"               "grey50"               "grey51"              
## [313] "grey52"               "grey53"               "grey54"              
## [316] "grey55"               "grey56"               "grey57"              
## [319] "grey58"               "grey59"               "grey60"              
## [322] "grey61"               "grey62"               "grey63"              
## [325] "grey64"               "grey65"               "grey66"              
## [328] "grey67"               "grey68"               "grey69"              
## [331] "grey70"               "grey71"               "grey72"              
## [334] "grey73"               "grey74"               "grey75"              
## [337] "grey76"               "grey77"               "grey78"              
## [340] "grey79"               "grey80"               "grey81"              
## [343] "grey82"               "grey83"               "grey84"              
## [346] "grey85"               "grey86"               "grey87"              
## [349] "grey88"               "grey89"               "grey90"              
## [352] "grey91"               "grey92"               "grey93"              
## [355] "grey94"               "grey95"               "grey96"              
## [358] "grey97"               "grey98"               "grey99"              
## [361] "grey100"              "honeydew"             "honeydew1"           
## [364] "honeydew2"            "honeydew3"            "honeydew4"           
## [367] "hotpink"              "hotpink1"             "hotpink2"            
## [370] "hotpink3"             "hotpink4"             "indianred"           
## [373] "indianred1"           "indianred2"           "indianred3"          
## [376] "indianred4"           "ivory"                "ivory1"              
## [379] "ivory2"               "ivory3"               "ivory4"              
## [382] "khaki"                "khaki1"               "khaki2"              
## [385] "khaki3"               "khaki4"               "lavender"            
## [388] "lavenderblush"        "lavenderblush1"       "lavenderblush2"      
## [391] "lavenderblush3"       "lavenderblush4"       "lawngreen"           
## [394] "lemonchiffon"         "lemonchiffon1"        "lemonchiffon2"       
## [397] "lemonchiffon3"        "lemonchiffon4"        "lightblue"           
## [400] "lightblue1"           "lightblue2"           "lightblue3"          
## [403] "lightblue4"           "lightcoral"           "lightcyan"           
## [406] "lightcyan1"           "lightcyan2"           "lightcyan3"          
## [409] "lightcyan4"           "lightgoldenrod"       "lightgoldenrod1"     
## [412] "lightgoldenrod2"      "lightgoldenrod3"      "lightgoldenrod4"     
## [415] "lightgoldenrodyellow" "lightgray"            "lightgreen"          
## [418] "lightgrey"            "lightpink"            "lightpink1"          
## [421] "lightpink2"           "lightpink3"           "lightpink4"          
## [424] "lightsalmon"          "lightsalmon1"         "lightsalmon2"        
## [427] "lightsalmon3"         "lightsalmon4"         "lightseagreen"       
## [430] "lightskyblue"         "lightskyblue1"        "lightskyblue2"       
## [433] "lightskyblue3"        "lightskyblue4"        "lightslateblue"      
## [436] "lightslategray"       "lightslategrey"       "lightsteelblue"      
## [439] "lightsteelblue1"      "lightsteelblue2"      "lightsteelblue3"     
## [442] "lightsteelblue4"      "lightyellow"          "lightyellow1"        
## [445] "lightyellow2"         "lightyellow3"         "lightyellow4"        
## [448] "limegreen"            "linen"                "magenta"             
## [451] "magenta1"             "magenta2"             "magenta3"            
## [454] "magenta4"             "maroon"               "maroon1"             
## [457] "maroon2"              "maroon3"              "maroon4"             
## [460] "mediumaquamarine"     "mediumblue"           "mediumorchid"        
## [463] "mediumorchid1"        "mediumorchid2"        "mediumorchid3"       
## [466] "mediumorchid4"        "mediumpurple"         "mediumpurple1"       
## [469] "mediumpurple2"        "mediumpurple3"        "mediumpurple4"       
## [472] "mediumseagreen"       "mediumslateblue"      "mediumspringgreen"   
## [475] "mediumturquoise"      "mediumvioletred"      "midnightblue"        
## [478] "mintcream"            "mistyrose"            "mistyrose1"          
## [481] "mistyrose2"           "mistyrose3"           "mistyrose4"          
## [484] "moccasin"             "navajowhite"          "navajowhite1"        
## [487] "navajowhite2"         "navajowhite3"         "navajowhite4"        
## [490] "navy"                 "navyblue"             "oldlace"             
## [493] "olivedrab"            "olivedrab1"           "olivedrab2"          
## [496] "olivedrab3"           "olivedrab4"           "orange"              
## [499] "orange1"              "orange2"              "orange3"             
## [502] "orange4"              "orangered"            "orangered1"          
## [505] "orangered2"           "orangered3"           "orangered4"          
## [508] "orchid"               "orchid1"              "orchid2"             
## [511] "orchid3"              "orchid4"              "palegoldenrod"       
## [514] "palegreen"            "palegreen1"           "palegreen2"          
## [517] "palegreen3"           "palegreen4"           "paleturquoise"       
## [520] "paleturquoise1"       "paleturquoise2"       "paleturquoise3"      
## [523] "paleturquoise4"       "palevioletred"        "palevioletred1"      
## [526] "palevioletred2"       "palevioletred3"       "palevioletred4"      
## [529] "papayawhip"           "peachpuff"            "peachpuff1"          
## [532] "peachpuff2"           "peachpuff3"           "peachpuff4"          
## [535] "peru"                 "pink"                 "pink1"               
## [538] "pink2"                "pink3"                "pink4"               
## [541] "plum"                 "plum1"                "plum2"               
## [544] "plum3"                "plum4"                "powderblue"          
## [547] "purple"               "purple1"              "purple2"             
## [550] "purple3"              "purple4"              "red"                 
## [553] "red1"                 "red2"                 "red3"                
## [556] "red4"                 "rosybrown"            "rosybrown1"          
## [559] "rosybrown2"           "rosybrown3"           "rosybrown4"          
## [562] "royalblue"            "royalblue1"           "royalblue2"          
## [565] "royalblue3"           "royalblue4"           "saddlebrown"         
## [568] "salmon"               "salmon1"              "salmon2"             
## [571] "salmon3"              "salmon4"              "sandybrown"          
## [574] "seagreen"             "seagreen1"            "seagreen2"           
## [577] "seagreen3"            "seagreen4"            "seashell"            
## [580] "seashell1"            "seashell2"            "seashell3"           
## [583] "seashell4"            "sienna"               "sienna1"             
## [586] "sienna2"              "sienna3"              "sienna4"             
## [589] "skyblue"              "skyblue1"             "skyblue2"            
## [592] "skyblue3"             "skyblue4"             "slateblue"           
## [595] "slateblue1"           "slateblue2"           "slateblue3"          
## [598] "slateblue4"           "slategray"            "slategray1"          
## [601] "slategray2"           "slategray3"           "slategray4"          
## [604] "slategrey"            "snow"                 "snow1"               
## [607] "snow2"                "snow3"                "snow4"               
## [610] "springgreen"          "springgreen1"         "springgreen2"        
## [613] "springgreen3"         "springgreen4"         "steelblue"           
## [616] "steelblue1"           "steelblue2"           "steelblue3"          
## [619] "steelblue4"           "tan"                  "tan1"                
## [622] "tan2"                 "tan3"                 "tan4"                
## [625] "thistle"              "thistle1"             "thistle2"            
## [628] "thistle3"             "thistle4"             "tomato"              
## [631] "tomato1"              "tomato2"              "tomato3"             
## [634] "tomato4"              "turquoise"            "turquoise1"          
## [637] "turquoise2"           "turquoise3"           "turquoise4"          
## [640] "violet"               "violetred"            "violetred1"          
## [643] "violetred2"           "violetred3"           "violetred4"          
## [646] "wheat"                "wheat1"               "wheat2"              
## [649] "wheat3"               "wheat4"               "whitesmoke"          
## [652] "yellow"               "yellow1"              "yellow2"             
## [655] "yellow3"              "yellow4"              "yellowgreen"
plot(x,x^3-13*x^2+39*x,pch=18,xlab="time (hours)",ylab="temperature",col="red",main="Enhanced plot",cex.axis=1.5,cex.lab=1.5)

palette()
## [1] "black"   "red"     "green3"  "blue"    "cyan"    "magenta" "yellow" 
## [8] "gray"
plot(x,x^3-13*x^2+39*x,pch=18,xlab="time (hours)",ylab="temperature",col=3,main="Enhanced plot",cex.axis=1.5,cex.lab=1.5)

plot(1:25, pch=1:25,cex=2,bg="grey") 

x<-(0:100)/10
plot(x,x^3-13*x^2+39*x,type="l",xlab="time (hours)",ylab="temperature",cex.axis=1.5,cex.lab=1.5)
points(2,34,col="red",pch=16,cex=2)
arrows(4,50,2.2,34.5)
text(4.15,50,"local maximum",adj=0,col="blue",cex=1.5)
lines(x,30-50*sin(x/2),col="blue")
legend(x=0,y=80,legend=c("Sahara","Gobi"),lty=1,col=c("black","blue"),cex=1.5)

?par
par("bg")
## [1] "white"
par(bg="green")
par("bg")
## [1] "green"
# rerun the plot commands
x<-(0:100)/10
plot(x,x^3-13*x^2+39*x,type="l",xlab="time (hours)",ylab="temperature",cex.axis=1.5,cex.lab=1.5)
points(2,34,col="red",pch=16,cex=2)
arrows(4,50,2.2,34.5)
text(4.15,50,"local maximum",adj=0,col="blue",cex=1.5)
lines(x,30-50*sin(x/2),col="blue")
legend(x=0,y=80,legend=c("Sahara","Gobi"),lty=1,col=c("black","blue"),cex=1.5)

plot(1:10)
par(bg="white")
plot(1:10)

# save default graphical parameters to be able to restore them later on
par.defaults <- par(no.readonly=TRUE)
par(bg="green")
par("bg")
## [1] "green"
plot(1:10)
par(par.defaults)
par("bg")
## [1] "white"
plot(1:10)

x<-(0:100)/10
plot(x,x^3-13*x^2+39*x,type="l",xlab= "time (hours)",ylab="temperature",lwd=3,las=1,cex.axis=1.5,cex.lab=1.5)

hist(titanic3$age,breaks=15,freq=FALSE,cex.axis=1.5,cex.lab=1.5)

boxplot(titanic3$fare,ylim=c(0,300),ylab="fare",cex.axis=1.5,cex.lab=1.5)

boxplot(fare ~ pclass,data=titanic3,ylim=c(0,300),ylab="fare",cex.axis=1.5,cex.lab=1.5)

plot(fare ~ pclass,data=titanic3,ylim=c(0,300),ylab="fare",cex.axis=1.5,cex.lab=1.5)

Advanced graphics

# graphics
plot(fare~age,data=titanic3) # very skewed distribution

plot(log10(fare)~age,data=titanic3) # plot log10(y) vs x

plot(fare~age,data=titanic3,log="y") # original data, but log scale
## Warning in xy.coords(x, y, xlabel, ylabel, log): 17 y values <= 0 omitted
## from logarithmic plot
min(titanic3$fare,na.rm=TRUE) # zero values!
## [1] 0
sum(titanic3$fare==0,na.rm=TRUE) # zero values!
## [1] 17
install.packages("ggplot2")
## package 'ggplot2' successfully unpacked and MD5 sums checked
## 
## The downloaded binary packages are in
##  C:\Users\pdmoerland\AppData\Local\Temp\RtmpkxKEGu\downloaded_packages
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 3.5.3

qplot(age,fare,data=titanic3)
## Warning: Removed 264 rows containing missing values (geom_point).