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.
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)
library()
help(read.dta)
## No documentation for 'read.dta' in specified packages and libraries:
## you could try '??read.dta'
??read.dta
library(foreign)
help(read.dta)
help(package = stats)
help.start()
## If nothing happens, you should open
## 'http://127.0.0.1:25903/doc/html/index.html' yourself
help(mean)
# ? is a shorthand for help()
?mean
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 V5
## Min. :1.00 Min. :3.00 Min. : 5.00 Min. :7.00 Min. : 9.00
## 1st Qu.:1.25 1st Qu.:3.25 1st Qu.: 6.75 1st Qu.:7.25 1st Qu.: 9.25
## Median :1.50 Median :3.50 Median : 8.50 Median :7.50 Median : 9.50
## Mean :1.50 Mean :3.50 Mean : 8.50 Mean :7.50 Mean : 9.50
## 3rd Qu.:1.75 3rd Qu.:3.75 3rd Qu.:10.25 3rd Qu.:7.75 3rd Qu.: 9.75
## Max. :2.00 Max. :4.00 Max. :12.00 Max. :8.00 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==3] # == : test for equality
## [1] 3
x[x!=3] # != : test for inequality
## [1] 10 9 8 12 6 5 4 2 1
x %in% c(3,8) # %in%: test which values are part of a set of specified values
## [1] FALSE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
x[x %in% c(3,8)]
## [1] 8 3
x[x=3] # = : assignment operator
## [1] 8
sum(x>3)
## [1] 7
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("gene1","gene2","gene3","gene4")
m
## gene1 gene2 gene3 gene4
## 1 2 3 4
rownames(A)
## NULL
rownames(A) <- c("gene1", "gene2")
colnames(A) <- c("sample1", "sample2", "sample3","sample4", "sample5")
A
## sample1 sample2 sample3 sample4 sample5
## gene1 1 3 5 7 9
## gene2 2 4 12 8 10
m["gene3"]
## gene3
## 3
A["gene1", ]
## sample1 sample2 sample3 sample4 sample5
## 1 3 5 7 9
c("gene1", 5)
## [1] "gene1" "5"
list(gene = "gene1", number = 5)
## $gene
## [1] "gene1"
##
## $number
## [1] 5
x <- list(gene = "gene1", number = 5)
x[1]
## $gene
## [1] "gene1"
x[[1]]
## [1] "gene1"
x$gene
## [1] "gene1"
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
# You can also add a new variable to a data frame
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)
# First download file from course website and then import
#titanic3 <- read.dta("titanic3.dta", convert.underscore=TRUE) # convert.underscore: Convert "_" in Stata variable names to "." in R names?
titanic3 <- read.dta("Exercises/titanic3.dta", convert.underscore=TRUE)
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 ...
#In R, we can also import directly from a web site:
#{r "Basic data import/export from other formats (I)"} #load(url("https://biostat.app.vumc.org/wiki/pub/Main/DataSets/titanic3.sav")) #ls() #
An example using the readxl package for MS Excel files. The data set can be obtained from here and from the course website. 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\RtmpOo6hhH\downloaded_packages
library(readxl)
titanic3 <- read_excel("Exercises/titanic3.xls")
## 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
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)
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
paste
## function (..., sep = " ", collapse = NULL, recycle0 = FALSE)
## .Internal(paste(list(...), sep, collapse, recycle0))
## <bytecode: 0x000000000b4175c0>
## <environment: namespace:base>
help(paste)
paste("Academic","Medical","Center")
## [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 (2022). 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 = {2022},
## 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 <- deparse1(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: 0x000000000d43c150>
## <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
install.packages("ISwR")
## package 'ISwR' successfully unpacked and MD5 sums checked
##
## The downloaded binary packages are in
## C:\Users\pdmoerland\AppData\Local\Temp\RtmpOo6hhH\downloaded_packages
library(ISwR)
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
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 53.0000
## [10] 71.0000 47.0000 18.0000 24.0000 26.0000 80.0000 NA 24.0000 50.0000
## [19] 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
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
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\RtmpOo6hhH\downloaded_packages
library(lubridate)
wday(as.Date("1912April15", "%Y%b%d"),label=TRUE)
## [1] Mon
## Levels: Sun < Mon < Tue < Wed < Thu < Fri < Sat
#install.packages("swirl")
#library(swirl)
#install_from_swirl("R Programming")
#swirl()
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" "#DF536B" "#61D04F" "#2297E6" "#28E2E5" "#CD0BBC" "#F5C710"
## [8] "gray62"
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)
# 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
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\RtmpOo6hhH\downloaded_packages
library(ggplot2)
qplot(age,fare,data=titanic3)
qplot(age,fare,data=titanic3) + scale_y_log10() # log scale for y values