Book of R Part 1 (Chapter 1-8)

Exercise 1- 2.3

getwd()
## [1] "C:/Users/Valued Customer/Documents/GIT R -Markdown/rmd"
library("MASS")
sqrt(x=-5)
## Warning in sqrt(x = -5): NaNs produced
## [1] NaN
a<- 2.3
(6*a + 42)/ 3^(4.2 -3.62)
## [1] 29.50556
(-4)^2+2
## [1] 18
-4^2+2
## [1] -14
x <- c(25.2, 15, 16.44, 15.3,18.6)
y<-mean(x)
sqrt(y/2)
## [1] 3.008987
b<-log(0.3, base=exp(1))
exp(b)
## [1] 0.3
-0.00000000423546322
## [1] -4.235463e-09
ls()
## [1] "a" "b" "x" "y"
m <- 3^2 * 4^(1/8)
m <- m/2.33
m
## [1] 4.593504
n <-  -8.2 * 10^-13
m * n 
## [1] -3.766673e-12
p <- seq(from= 5, to= 11,by=0.3)
sort(p, decreasing=TRUE)
##  [1] 11.0 10.7 10.4 10.1  9.8  9.5  9.2  8.9  8.6  8.3  8.0  7.7  7.4  7.1  6.8
## [16]  6.5  6.2  5.9  5.6  5.3  5.0
r<-rep(c(-1,3,-5,7,-9), times=2, each=10)
sort(r,decreasing=TRUE)
##   [1]  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  3  3  3  3  3
##  [26]  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
##  [51] -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5
##  [76] -5 -5 -5 -5 -5 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9 -9
d<- c((6:12),rep(5.3, times=3),-3,seq(from=102,to=length(r),length.out=9))
length(d)
## [1] 20

Exercise 2.4

vec <- c(seq(from=3,to=6,length.out=5), rep( c(2,-5.1,-33),times =2), 7/42 +2)
vec2 <- c(vec[1], vec[length(vec)])
vec3 <- vec[-c(1,length(vec))]         
vec3
##  [1]   3.75   4.50   5.25   6.00   2.00  -5.10 -33.00   2.00  -5.10 -33.00
vec_vec <- c(vec2[1], vec3, vec2[2])
vec_vec
##  [1]   3.000000   3.750000   4.500000   5.250000   6.000000   2.000000
##  [7]  -5.100000 -33.000000   2.000000  -5.100000 -33.000000   2.166667
vec<- sort(vec_vec, decreasing = FALSE)
vec[length(vec):1]
##  [1]   6.000000   5.250000   4.500000   3.750000   3.000000   2.166667
##  [7]   2.000000   2.000000  -5.100000  -5.100000 -33.000000 -33.000000
sort(vec, decreasing = TRUE)
##  [1]   6.000000   5.250000   4.500000   3.750000   3.000000   2.166667
##  [7]   2.000000   2.000000  -5.100000  -5.100000 -33.000000 -33.000000
vec_n <- vec3[c(rep(3,times=3),rep(6, times=4), length(vec3))]
vec_e <-vec
vec_e[c(1,5:7, length(vec_e))] <- 99:95
vec_e
##  [1]  99.00 -33.00  -5.10  -5.10  98.00  97.00  96.00   3.00   3.75   4.50
## [11]   5.25  95.00

Exercise 2.5

c(2,0.5,1,2,0.5,1,2,0.5,1)/ c(2, 0.5,1)
## [1] 1 1 1 1 1 1 1 1 1
f <- c(45, 77, 20, 19, 101, 120, 212) 

c  <- 5/9 * (f - 32)
c
## [1]   7.222222  25.000000  -6.666667  -7.222222  38.333333  48.888889 100.000000
vec<- rep(x=c(2,4,6),times=2)*rep(x=c(1,2),each=3)
vec [2:5] <- c(-0.1,-100)
vec
## [1]    2.0   -0.1 -100.0   -0.1 -100.0   12.0

Exercise 3.1

mat <- matrix(data=c(4.3,3.1,8.2,8.2,3.2,0.9,1.6,6.5),nrow=4,ncol=2,byrow=TRUE)
mat
##      [,1] [,2]
## [1,]  4.3  3.1
## [2,]  8.2  8.2
## [3,]  3.2  0.9
## [4,]  1.6  6.5
dim(mat[-1,])
## [1] 3 2
mat[,2] <- sort(x=mat[,2])
mat
##      [,1] [,2]
## [1,]  4.3  0.9
## [2,]  8.2  3.1
## [3,]  3.2  6.5
## [4,]  1.6  8.2
mat[-4,-1]
## [1] 0.9 3.1 6.5
matrix(data=mat[-4,-1])
##      [,1]
## [1,]  0.9
## [2,]  3.1
## [3,]  6.5
mat2 <- mat[3:4,]
mat2
##      [,1] [,2]
## [1,]  3.2  6.5
## [2,]  1.6  8.2
mat[c(4,1),2:1] <- -0.5*diag(mat2)

Exercise 3.2

2/7*(cbind(c(1,2,7),c(2,4,6))-cbind(c(10,30,50),c(20,40,60)))
##            [,1]       [,2]
## [1,]  -2.571429  -5.142857
## [2,]  -8.000000 -10.285714
## [3,] -12.285714 -15.428571
A <- matrix(data=c(1,2,7))
B <- matrix(data=c(3,4,8))
##(i) Not possible
##(ii)
t(A)%*%B
##      [,1]
## [1,]   67
##(iii)
t(B)%*%(A%*%t(A))
##      [,1] [,2] [,3]
## [1,]   67  134  469
##(iv) Not possible
##(v)
solve(B%*%t(B)+A%*%t(A)-100*diag(3))
##              [,1]         [,2]        [,3]
## [1,] -0.007923676  0.003123274 0.007843334
## [2,]  0.003123274 -0.005350239 0.011483806
## [3,]  0.007843334  0.011483806 0.017584735
A <- rbind(c(2,0,0,0),c(0,3,0,0),c(0,0,5,0),c(0,0,0,-1))
solve(A)%*%A-diag(4)
##      [,1] [,2] [,3] [,4]
## [1,]    0    0    0    0
## [2,]    0    0    0    0
## [3,]    0    0    0    0
## [4,]    0    0    0    0

Exercise 3.3

AR <- array(data=seq(from=4.8,to=0.1,length.out=48),dim=c(4,2,6))
AR
## , , 1
## 
##      [,1] [,2]
## [1,]  4.8  4.4
## [2,]  4.7  4.3
## [3,]  4.6  4.2
## [4,]  4.5  4.1
## 
## , , 2
## 
##      [,1] [,2]
## [1,]  4.0  3.6
## [2,]  3.9  3.5
## [3,]  3.8  3.4
## [4,]  3.7  3.3
## 
## , , 3
## 
##      [,1] [,2]
## [1,]  3.2  2.8
## [2,]  3.1  2.7
## [3,]  3.0  2.6
## [4,]  2.9  2.5
## 
## , , 4
## 
##      [,1] [,2]
## [1,]  2.4  2.0
## [2,]  2.3  1.9
## [3,]  2.2  1.8
## [4,]  2.1  1.7
## 
## , , 5
## 
##      [,1] [,2]
## [1,]  1.6  1.2
## [2,]  1.5  1.1
## [3,]  1.4  1.0
## [4,]  1.3  0.9
## 
## , , 6
## 
##      [,1] [,2]
## [1,]  0.8  0.4
## [2,]  0.7  0.3
## [3,]  0.6  0.2
## [4,]  0.5  0.1
BR <- AR[c(4,1),2,]
BR
##      [,1] [,2] [,3] [,4] [,5] [,6]
## [1,]  4.1  3.3  2.5  1.7  0.9  0.1
## [2,]  4.4  3.6  2.8  2.0  1.2  0.4
CR <- array(data=rep(x=BR[2,],times=4),dim=c(2,2,2,3))
CR
## , , 1, 1
## 
##      [,1] [,2]
## [1,]  4.4  2.8
## [2,]  3.6  2.0
## 
## , , 2, 1
## 
##      [,1] [,2]
## [1,]  1.2  4.4
## [2,]  0.4  3.6
## 
## , , 1, 2
## 
##      [,1] [,2]
## [1,]  2.8  1.2
## [2,]  2.0  0.4
## 
## , , 2, 2
## 
##      [,1] [,2]
## [1,]  4.4  2.8
## [2,]  3.6  2.0
## 
## , , 1, 3
## 
##      [,1] [,2]
## [1,]  1.2  4.4
## [2,]  0.4  3.6
## 
## , , 2, 3
## 
##      [,1] [,2]
## [1,]  2.8  1.2
## [2,]  2.0  0.4
DR <- AR[,,-6]
DR
## , , 1
## 
##      [,1] [,2]
## [1,]  4.8  4.4
## [2,]  4.7  4.3
## [3,]  4.6  4.2
## [4,]  4.5  4.1
## 
## , , 2
## 
##      [,1] [,2]
## [1,]  4.0  3.6
## [2,]  3.9  3.5
## [3,]  3.8  3.4
## [4,]  3.7  3.3
## 
## , , 3
## 
##      [,1] [,2]
## [1,]  3.2  2.8
## [2,]  3.1  2.7
## [3,]  3.0  2.6
## [4,]  2.9  2.5
## 
## , , 4
## 
##      [,1] [,2]
## [1,]  2.4  2.0
## [2,]  2.3  1.9
## [3,]  2.2  1.8
## [4,]  2.1  1.7
## 
## , , 5
## 
##      [,1] [,2]
## [1,]  1.6  1.2
## [2,]  1.5  1.1
## [3,]  1.4  1.0
## [4,]  1.3  0.9
DR[c(2,4),2,c(1,3,5)] <- -99
DR
## , , 1
## 
##      [,1]  [,2]
## [1,]  4.8   4.4
## [2,]  4.7 -99.0
## [3,]  4.6   4.2
## [4,]  4.5 -99.0
## 
## , , 2
## 
##      [,1] [,2]
## [1,]  4.0  3.6
## [2,]  3.9  3.5
## [3,]  3.8  3.4
## [4,]  3.7  3.3
## 
## , , 3
## 
##      [,1]  [,2]
## [1,]  3.2   2.8
## [2,]  3.1 -99.0
## [3,]  3.0   2.6
## [4,]  2.9 -99.0
## 
## , , 4
## 
##      [,1] [,2]
## [1,]  2.4  2.0
## [2,]  2.3  1.9
## [3,]  2.2  1.8
## [4,]  2.1  1.7
## 
## , , 5
## 
##      [,1]  [,2]
## [1,]  1.6   1.2
## [2,]  1.5 -99.0
## [3,]  1.4   1.0
## [4,]  1.3 -99.0

Exercise 4.1

mat <- c(6,9,7,3,6,7,9,6,3,6,6,7,1,9,1)
mat == 6
##  [1]  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE  TRUE  TRUE FALSE
## [13] FALSE FALSE FALSE
mat >= 6
##  [1]  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE
## [13] FALSE  TRUE FALSE
mat < 6+2
##  [1]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
## [13]  TRUE FALSE  TRUE
mat != 6
##  [1] FALSE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE FALSE FALSE  TRUE
## [13]  TRUE  TRUE  TRUE
bar <- mat[-(1:3)]
bar <- array(data=bar,dim=c(2,2,3))
bar
## , , 1
## 
##      [,1] [,2]
## [1,]    3    7
## [2,]    6    9
## 
## , , 2
## 
##      [,1] [,2]
## [1,]    6    6
## [2,]    3    6
## 
## , , 3
## 
##      [,1] [,2]
## [1,]    7    9
## [2,]    1    1
bar<=(6/2+4)
## , , 1
## 
##      [,1]  [,2]
## [1,] TRUE  TRUE
## [2,] TRUE FALSE
## 
## , , 2
## 
##      [,1] [,2]
## [1,] TRUE TRUE
## [2,] TRUE TRUE
## 
## , , 3
## 
##      [,1]  [,2]
## [1,] TRUE FALSE
## [2,] TRUE  TRUE
(bar+2)<=(6/2+4)
## , , 1
## 
##       [,1]  [,2]
## [1,]  TRUE FALSE
## [2,] FALSE FALSE
## 
## , , 2
## 
##       [,1]  [,2]
## [1,] FALSE FALSE
## [2,]  TRUE FALSE
## 
## , , 3
## 
##       [,1]  [,2]
## [1,] FALSE FALSE
## [2,]  TRUE  TRUE
diag(10)==0
##        [,1]  [,2]  [,3]  [,4]  [,5]  [,6]  [,7]  [,8]  [,9] [,10]
##  [1,] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [2,]  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [3,]  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [4,]  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [5,]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
##  [6,]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE
##  [7,]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE
##  [8,]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE
##  [9,]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE
## [10,]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
any(bar<=(6/2+4))
## [1] TRUE
all(bar<=(6/2+4))
## [1] FALSE
any((bar+2)<=(6/2+4))
## [1] TRUE
all((bar+2)<=(6/2+4))
## [1] FALSE
any(diag(diag(10)==0))
## [1] FALSE

Exercise 4.2

foo <- c(7,1,7,10,5,9,10,3,10,8)
(foo>5)|(foo==2)
##  [1]  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE
bar <- c(8,8,4,4,5,1,5,6,6,8)
(bar<=6)&(bar!=4)
##  [1] FALSE FALSE FALSE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
((foo>5)|(foo==2))&((bar<=6)&(bar!=4))
##  [1] FALSE FALSE FALSE FALSE FALSE  TRUE  TRUE FALSE  TRUE FALSE
baz <- foo+bar
baz
##  [1] 15  9 11 14 10 10 15  9 16 16
#(i)
(baz>=14)&(baz!=15)
##  [1] FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE  TRUE  TRUE
#(ii)
(baz/foo>4)|(baz/foo<=2)
##  [1] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE

Exercise 4.3

foo <- c(7,5,6,1,2,10,8,3,8,2)
#(i)
bar <- foo[foo>=5]
#(ii)
foo[-which(x=foo>=5)]
## [1] 1 2 3 2
baz <- matrix(data=bar,nrow=2,ncol=3,byrow=T)
#(i)
baz[baz==8] <- baz[1,2]^2
#(ii)
all(baz<=25&baz>4)
## [1] TRUE
qux <- array(data=c(10,5,1,4,7,4,3,3,1,3,4,3,1,7,8,3,7,3),dim=c(3,2,3))
#(i)
which(x=qux==3|qux==4,arr.ind=T)
##       dim1 dim2 dim3
##  [1,]    1    2    1
##  [2,]    3    2    1
##  [3,]    1    1    2
##  [4,]    2    1    2
##  [5,]    1    2    2
##  [6,]    2    2    2
##  [7,]    3    2    2
##  [8,]    1    2    3
##  [9,]    3    2    3
#(ii)
qux[qux<3|qux>=7] <- 100
foo[c(F,T)]
## [1]  5  1 10  3  2
foo[c(0,1)]
## [1] 7

Exercise 4.4

cat("\"The quick brown fox\n\tjumped over\n\t\tthe lazy dogs\"")
## "The quick brown fox
##  jumped over
##      the lazy dogs"
num1 <- 4
num2 <- 0.75
paste("The result of multiplying",num1,"by",num2,"is",num1*num2)
## [1] "The result of multiplying 4 by 0.75 is 3"
sub(pattern="tdavies",replacement="Abdulyekeen",x="/Users/tdavies/Documents/RBook")
## [1] "/Users/Abdulyekeen/Documents/RBook"
bar <- "How much wood could a woodchuck chuck"
##(i)
baz <- paste(bar,"if a woodchuck could chuck wood")
##(ii)
gsub(pattern="wood",replacement="metal",x=baz)
## [1] "How much metal could a metalchuck chuck if a metalchuck could chuck metal"
six_p <- "Two 6-packs for $12.99"
#(i)
substr(x=six_p,start=5,stop=10)=="6-pack"
## [1] TRUE
#(ii)
substr(x=six_p,start=19,stop=19) <- "0"
six_p
## [1] "Two 6-packs for $10.99"

Exercise 4.5

party <- rep("National",20)
party[c(1,4,12,15,16,19)] <- "Labour"
party[c(6,9,11)] <- "Greens"
party[c(10,20)] <- "Other"
party
##  [1] "Labour"   "National" "National" "Labour"   "National" "Greens"  
##  [7] "National" "National" "Greens"   "Other"    "Greens"   "Labour"  
## [13] "National" "National" "Labour"   "Labour"   "National" "National"
## [19] "Labour"   "Other"
sex <- rep("M",20)
sex[c(1,5:7,12,14:16)] <- "F"
sex
##  [1] "F" "M" "M" "M" "F" "F" "F" "M" "M" "M" "M" "F" "M" "F" "F" "F" "M" "M" "M"
## [20] "M"
sex.fac <- factor(x=sex)
sex.fac
##  [1] F M M M F F F M M M M F M F F F M M M M
## Levels: F M
party.fac <- factor(x=party,levels=c("National","Labour","Greens","Maori","Other"))
party.fac
##  [1] Labour   National National Labour   National Greens   National National
##  [9] Greens   Other    Greens   Labour   National National Labour   Labour  
## [17] National National Labour   Other   
## Levels: National Labour Greens Maori Other
#(i)
party.fac[sex.fac=="M"]
##  [1] National National Labour   National Greens   Other    Greens   National
##  [9] National National Labour   Other   
## Levels: National Labour Greens Maori Other
#(ii)
sex.fac[party.fac=="National"]
## [1] M M F F M M F M M
## Levels: F M
sex.newvals <- factor(x=c("M","M","F","F","F","M"))
sex.fac <- factor(x=levels(sex.fac)[c(sex.fac,sex.newvals)])
sex.fac
##  [1] F M M M F F F M M M M F M F F F M M M M M M F F F M
## Levels: F M
party.newvals <- factor(x=c("National","Maori","Maori","Labour","Greens","Labour"),levels=levels(party.fac))
party.fac <- factor(x=levels(party.fac)[c(party.fac,party.newvals)])
party.fac
##  [1] Labour   National National Labour   National Greens   National National
##  [9] Greens   Other    Greens   Labour   National National Labour   Labour  
## [17] National National Labour   Other    National Maori    Maori    Labour  
## [25] Greens   Labour  
## Levels: Greens Labour Maori National Other
conf <- c(93,55,29,100,52,84,56,0,33,52,35,53,55,46,40,40,56,45,64,31,10,29,40,95,18,61)
conf.fac <- cut(x=conf,breaks=c(0,30,70,100),include.lowest=TRUE,labels=c("Low","Moderate","High"))
conf.fac[party.fac=="Labour"]
## [1] High     High     Moderate Moderate Moderate Moderate High     Moderate
## Levels: Low Moderate High
conf.fac[party.fac=="National"] # Theres an indication that those who identify as "Labour" have greater confidence than those who identify as "National" when it comes to guessing how well Labour will do in the next election.
##  [1] Moderate Low      Moderate Moderate Low      Moderate Moderate Moderate
##  [9] Moderate Low     
## Levels: Low Moderate High

Exercise 5.1

lis <- list(seq(from=-4,to=4,length=20),matrix(c(F,T,T,T,F,T,T,F,F),nrow=3,ncol=3),c("don","quixote"),factor(x=c("LOW","MED","LOW","MED","MED","HIGH")))
#(i)
lis[[2]][2:1,2:3]
##       [,1]  [,2]
## [1,] FALSE FALSE
## [2,]  TRUE  TRUE
#(ii)
lis[[3]][1] <- sub(pattern="d",replacement="D",x=lis[[3]][1])
lis[[3]][2] <- sub(pattern="q",replacement="Q",x=lis[[3]][2])
cat("\"Windmills! ATTACK!\"\n\t-\\",lis[[3]][1]," ",lis[[3]][2],"/-",sep="")
## "Windmills! ATTACK!"
##  -\Don Quixote/-
#(iii)
lis[[1]][lis[[1]]>1]
## [1] 1.052632 1.473684 1.894737 2.315789 2.736842 3.157895 3.578947 4.000000
#(iv)
which(x=lis[[4]]=="MED")
## [1] 2 4 5
bar <- list(facs=lis[[4]],nums=c(3,2.1,3.3,4,1.5,4.9),oldlist=lis[1:3])
#(i)
bar$facs[bar$nums>=3]
## [1] LOW  LOW  MED  HIGH
## Levels: HIGH LOW MED
#(ii)
bar$flags <- rep(x=bar$oldlist[[2]][,3],times=2)
#(iii)
bar$nums[!bar$flags]
## [1] 2.1 3.3 1.5 4.9
#(iv)
bar$oldlist[[3]] <- "Don Quixote"

Exercise 5.2

dframe <- data.frame(person=c("Stan","Francine","Steve","Roger","Hayley","Klaus"),sex=factor(x=c("M","F","M","M","F","M")),funny=factor(x=c("High","Med","Low","High","Med","Med"),levels=c("Low","Med","High")),stringsAsFactors=F)
dframe
##     person sex funny
## 1     Stan   M  High
## 2 Francine   F   Med
## 3    Steve   M   Low
## 4    Roger   M  High
## 5   Hayley   F   Med
## 6    Klaus   M   Med
dframe$age <- c(41,41,15,1600,21,60)
dframe
##     person sex funny  age
## 1     Stan   M  High   41
## 2 Francine   F   Med   41
## 3    Steve   M   Low   15
## 4    Roger   M  High 1600
## 5   Hayley   F   Med   21
## 6    Klaus   M   Med   60
dframe <- dframe[,c(1,4,2,3)]
dframe
##     person  age sex funny
## 1     Stan   41   M  High
## 2 Francine   41   F   Med
## 3    Steve   15   M   Low
## 4    Roger 1600   M  High
## 5   Hayley   21   F   Med
## 6    Klaus   60   M   Med

Exercise 6.1

foo <- c(13563,-14156,-14319,16981,12921,11979,9568,8833,-12968,8133)
#(i)
foo[is.finite(foo^75)]
## [1] 11979  9568  8833  8133
#(ii)
foo[-which(foo^75==-Inf)]
## [1] 13563 16981 12921 11979  9568  8833  8133
bar <- matrix(c(77875.4,-35466.25,-39803.81,27551.45,-73333.85,55976.34,23764.3,36599.69,76694.82,-36478.88,-70585.69,47032),nrow=3,ncol=4)
#(i)
which(is.nan(bar^65/Inf),arr.ind=T)
##      row col
## [1,]   1   1
## [2,]   2   2
## [3,]   3   2
## [4,]   3   3
## [5,]   2   4
#(ii)
bar[!is.nan(bar^67+Inf)]
##  [1]  77875.40 -35466.25 -39803.81  27551.45  55976.34  23764.30  36599.69
##  [8]  76694.82 -36478.88  47032.00
bar[bar^67!=-Inf]
##  [1]  77875.40 -35466.25 -39803.81  27551.45  55976.34  23764.30  36599.69
##  [8]  76694.82 -36478.88  47032.00
#(iii)
bar[bar^67==-Inf|is.finite(bar^67)]
## [1] -35466.25 -39803.81  27551.45 -73333.85  23764.30  36599.69 -36478.88
## [8] -70585.69

Exercise 6.2

foo <- c(4.3,2.2,NULL,2.4,NaN,3.3,3.1,NULL,3.4,NA)
#(i)
length(x=foo)
## [1] 8
#(ii)
which(x=is.na(x=foo))
## [1] 4 8
#(iii)
is.null(x=foo)
## [1] FALSE
#(iv)
is.na(x=foo[8])+4/NULL
## numeric(0)
bar <- list(c(7,7,NA,3,NA,1,1,5,NA))
#(i)
names(bar) <- "alpha"
#(ii)
is.null(x=bar$beta)
## [1] TRUE
#(iii)
bar$beta <- which(x=is.na(x=bar$alpha))
bar
## $alpha
## [1]  7  7 NA  3 NA  1  1  5 NA
## 
## $beta
## [1] 3 5 9

Exercise 6.3

#(i)
foo <- array(data=1:36,dim=c(3,3,4))
foo
## , , 1
## 
##      [,1] [,2] [,3]
## [1,]    1    4    7
## [2,]    2    5    8
## [3,]    3    6    9
## 
## , , 2
## 
##      [,1] [,2] [,3]
## [1,]   10   13   16
## [2,]   11   14   17
## [3,]   12   15   18
## 
## , , 3
## 
##      [,1] [,2] [,3]
## [1,]   19   22   25
## [2,]   20   23   26
## [3,]   21   24   27
## 
## , , 4
## 
##      [,1] [,2] [,3]
## [1,]   28   31   34
## [2,]   29   32   35
## [3,]   30   33   36
class(foo)
## [1] "array"
attributes(foo) #implicit
## $dim
## [1] 3 3 4
#(ii)
bar <- as.vector(foo)
bar
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## [26] 26 27 28 29 30 31 32 33 34 35 36
class(bar)
## [1] "integer"
attributes(bar) #implicit
## NULL
#(iii)
baz <- as.character(bar)
baz
##  [1] "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10" "11" "12" "13" "14" "15"
## [16] "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "30"
## [31] "31" "32" "33" "34" "35" "36"
class(baz)
## [1] "character"
attributes(baz) #implicit
## NULL
#(iv)
qux <- as.factor(baz)
qux
##  [1] 1  2  3  4  5  6  7  8  9  10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## [26] 26 27 28 29 30 31 32 33 34 35 36
## 36 Levels: 1 10 11 12 13 14 15 16 17 18 19 2 20 21 22 23 24 25 26 27 28 ... 9
class(qux)
## [1] "factor"
attributes(qux) #explicit
## $levels
##  [1] "1"  "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "2"  "20" "21" "22"
## [16] "23" "24" "25" "26" "27" "28" "29" "3"  "30" "31" "32" "33" "34" "35" "36"
## [31] "4"  "5"  "6"  "7"  "8"  "9" 
## 
## $class
## [1] "factor"
#(v)
quux <- bar+c(-0.1,0.1)
quux
##  [1]  0.9  2.1  2.9  4.1  4.9  6.1  6.9  8.1  8.9 10.1 10.9 12.1 12.9 14.1 14.9
## [16] 16.1 16.9 18.1 18.9 20.1 20.9 22.1 22.9 24.1 24.9 26.1 26.9 28.1 28.9 30.1
## [31] 30.9 32.1 32.9 34.1 34.9 36.1
class(quux)
## [1] "numeric"
attributes(quux) #implicit
## NULL
foo.sum <- is.numeric(foo)+is.integer(foo)
bar.sum <- is.numeric(bar)+is.integer(bar)
baz.sum <- is.numeric(baz)+is.integer(baz)
qux.sum <- is.numeric(qux)+is.integer(qux)
quux.sum <- is.numeric(quux)+is.integer(quux)
myfac <- factor(x=c(foo.sum,bar.sum,baz.sum,qux.sum,quux.sum),levels=c(0,1,2))
myfac
## [1] 2 2 0 0 1
## Levels: 0 1 2
as.numeric(myfac)
## [1] 3 3 1 1 2
foo <- matrix(data=2:13,nrow=3,ncol=4)
foo
##      [,1] [,2] [,3] [,4]
## [1,]    2    5    8   11
## [2,]    3    6    9   12
## [3,]    4    7   10   13
as.character(as.vector(t(foo)))
##  [1] "2"  "5"  "8"  "11" "3"  "6"  "9"  "12" "4"  "7"  "10" "13"
foo <- cbind(c(34,23,33,42,41),c(0,1,1,0,0),c(1,2,1,1,2))
foo
##      [,1] [,2] [,3]
## [1,]   34    0    1
## [2,]   23    1    2
## [3,]   33    1    1
## [4,]   42    0    1
## [5,]   41    0    2
#(i)
foo <- as.data.frame(foo)
foo
##   V1 V2 V3
## 1 34  0  1
## 2 23  1  2
## 3 33  1  1
## 4 42  0  1
## 5 41  0  2
#(ii)
foo[,2] <- as.logical(foo[,2])
foo
##   V1    V2 V3
## 1 34 FALSE  1
## 2 23  TRUE  2
## 3 33  TRUE  1
## 4 42 FALSE  1
## 5 41 FALSE  2
#(iii)
foo[,3] <- as.factor(foo[,3])
foo
##   V1    V2 V3
## 1 34 FALSE  1
## 2 23  TRUE  2
## 3 33  TRUE  1
## 4 42 FALSE  1
## 5 41 FALSE  2
foo$V3
## [1] 1 2 1 1 2
## Levels: 1 2

Exercise 7.1

plot(-3:3,7:13,type="n",xlab="",ylab="")
text(x=0,y=10,labels="SOMETHING\nPROFOUND")
abline(v=c(-3,3),lty=2,lwd=4,col=8)
abline(h=c(7,13),lty=2,lwd=4,col=8)
arrows(x0=c(-2.5,-2.5,-2.5,2.5,2.5,2.5),y0=c(7.5,10,12.5,7.5,10,12.5),x1=c(-1,-1,-1,1,1,1),y1=c(9.5,10,10.5,9.5,10,10.5))

weight <- c(55,85,75,42,93,63,58,75,89,67)
height <- c(161,185,174,154,188,178,170,167,181,178)
sex <- c("female","male","male","female","male","male","female","male","male","female")
plot(weight,height,type="n",xlab="Weight (kg)",ylab="Height (cm)",main="Height against weight for 10 people")
points(weight[sex=="male"],height[sex=="male"],pch=19)
points(weight[sex=="female"],height[sex=="female"],pch=3,col=2)
legend("topleft",legend=c("male","female"),pch=c(19,3),col=c(1,2))

Exercise 7.2

weight <- c(55,85,75,42,93,63,58,75,89,67)
height <- c(161,185,174,154,188,178,170,167,181,178)
sex <- factor(c("female","male","male","female","male","male","female","male","male","female"))
library(ggplot2)
qplot(weight,height,color=sex,shape=sex,xlab="Weight (kg)",ylab="Height (cm)",main="Height against weight for 10 people") + geom_point(size=4)
## Warning: `qplot()` was deprecated in ggplot2 3.4.0.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Exercise 8.1

#(i)
#write.table(x=quakes[quakes$mag>=5,],file="/Users/tdavies/q5.txt",sep="!",row.names=F)
##(ii)
#q5.dframe <- read.table(file="/Users/tdavies/q5.txt",sep="!",header=T)
library("car")
## Loading required package: carData
data(Duncan)
#(i)
plot(Duncan$education[Duncan$prestige<=80],Duncan$income[Duncan$prestige<=80],xlim=c(0,100),ylim=c(0,100),xlab="Education",ylab="Income")
points(Duncan$education[Duncan$prestige>80],Duncan$income[Duncan$prestige>80],pch=19,col="blue")

#(ii)
#png("/Users/tdavies/dunc.png",width=500,height=500)
plot(Duncan$education[Duncan$prestige<=80],Duncan$income[Duncan$prestige<=80],xlim=c(0,100),ylim=c(0,100),xlab="Education",ylab="Income")
points(Duncan$education[Duncan$prestige>80],Duncan$income[Duncan$prestige>80],pch=19,col="blue")
legend("topleft",legend=c("prestige > 80","prestige <= 80"),pch=c(19,1),col=c("blue","black"))

dev.off()
## null device 
##           1
#exer <- list(quakes,q5.dframe,Duncan)
#(i)
#dput(x=exer,file="/Users/tdavies/Exercise8-1Data.txt")
#(ii)
#list.of.dataframes <- dget("/Users/tdavies/Exercise8-1Data.txt")
#list.of.dataframes
x <- 1:20
y <- c(-1.49,3.37,2.59,-2.78,-3.94,-0.92,6.43,8.51,3.41,-8.23,-12.01,-6.58,2.87,14.12,9.63,-4.58,-14.78,-11.67,1.17,15.62)
ptype <- rep(NA,length(x=x))
ptype[y>=5] <- "too_big"
ptype[y<=-5] <- "too_small"
ptype[(x>=5&x<=15)&(y>-5&y<5)] <- "sweet"
ptype[(x<5|x>15)&(y>-5&y<5)] <- "standard"
ptype <- factor(x=ptype)
qplot(x,y,color=ptype,shape=ptype) + geom_point(size=4) + geom_line(mapping=aes(group=1),color="black",lty=2) + geom_hline(mapping=aes(yintercept=c(-5,5)),color="red") + geom_segment(mapping=aes(x=5,y=-5,xend=5,yend=5),color="red",lty=3) + geom_segment(mapping=aes(x=15,y=-5,xend=15,yend=5),color="red",lty=3)

#ggsave(filename="/Users/tdavies/elaborateqplot.tiff")