This report is automatically generated with the R package knitr (version 1.5) .

# Chapter 4 - Getting Started with Arithmetic Working with Numbers, Infinity, and Missing
# Values Doing basic arithmetic Using arithmetic operators
baskets.of.Granny <- c(12, 4, 4, 6, 9, 3)
baskets.of.Geraldine <- c(5, 3, 2, 2, 12, 9)
Granny.money <- baskets.of.Granny * 120
Geraldine.money <- baskets.of.Geraldine * 145
Granny.money + Geraldine.money
## [1] 2165  915  770 1010 2820 1665
baskets.of.Granny * 120 + baskets.of.Geraldine * 145
## [1] 2165  915  770 1010 2820 1665
### Controlling the order of the operations
4 + 2 * 3
## [1] 10
(4 + 2) * 3
## [1] 18
## Using mathematical functions Calculating logarithms and exponentials
log(1:3)
## [1] 0.0000 0.6931 1.0986
log(1:3, base = 6)
## [1] 0.0000 0.3869 0.6131
x <- log(1:3)
exp(x)
## [1] 1 2 3
### Putting the science in scientific notation
13300
## [1] 13300
0.0412
## [1] 0.0412
1200000/2000
## [1] 600
### Rounding numbers
round(123.456, digits = 2)
## [1] 123.5
round(-123.456, digits = -2)
## [1] -100
signif(-123.456, digits = 4)
## [1] -123.5
### Using trigonometric functions
cos(120)
## [1] 0.8142
cos(120 * pi/180)
## [1] -0.5
## Calculating whole vectors
2 + 3
## [1] 5
## To infinity and beyond Using infinity
2/0
## [1] Inf
4 - Inf
## [1] -Inf
is.finite(10^(305:310))
## [1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE
### Dealing with undefined outcomes
Inf/Inf
## [1] NaN
NaN + 4
## [1] NaN
### Dealing with missing values
x <- NA
x + 4
## [1] NA
log(x)
## [1] NA
is.na(x)
## [1] TRUE
### Calculating infinite, undefined, and missing values Organizing Data in Vectors
### Discovering the properties of vectors Looking at the structure of a vector
str(baskets.of.Granny)
##  num [1:6] 12 4 4 6 9 3
length(baskets.of.Granny)
## [1] 6
authors <- c("Andrie", "Joris")
str(authors)
##  chr [1:2] "Andrie" "Joris"
### Testing vector types
is.numeric(baskets.of.Granny)
## [1] TRUE
is.integer(baskets.of.Granny)
## [1] FALSE
x <- c(4L, 6L)
is.integer(x)
## [1] TRUE
## Creating vectors seq(from = 4.5, to = 2.5, by = -0.5) seq(from = -2.7, to = 1.3,
## length.out = 9)
baskets.of.Granny <- c(12, 4, 4, 6, 9, 3)
baskets.of.Geraldine <- c(5, 3, 2, 2, 12, 9)
## Combining vectors
all.baskets <- c(baskets.of.Granny, baskets.of.Geraldine)
all.baskets
##  [1] 12  4  4  6  9  3  5  3  2  2 12  9
## Repeating vectors
rep(c(0, 0, 7), times = 3)
## [1] 0 0 7 0 0 7 0 0 7
rep(c(2, 4, 2), each = 3)
## [1] 2 2 2 4 4 4 2 2 2
rep(c(0, 7), times = c(4, 2))
## [1] 0 0 0 0 7 7
rep(1:3, length.out = 7)
## [1] 1 2 3 1 2 3 1
# Getting Values in and out of Vectors Understanding indexing in R
numbers <- 30:1
numbers
##  [1] 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3
## [29]  2  1
## Extracting values from a vector
numbers[5]
## [1] 26
numbers[c(5, 11, 3)]
## [1] 26 20 28
indices <- c(5, 11, 3)
numbers[indices]
## [1] 26 20 28
numbers[-3]
##  [1] 30 29 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2
## [29]  1
numbers[-(1:20)]
##  [1] 10  9  8  7  6  5  4  3  2  1
# numbers[-1:20] # NOT RUN, gives error Changing values in a vector
baskets.of.Granny[3] <- 5
baskets.of.Granny
## [1] 12  4  5  6  9  3
baskets.of.Geraldine[c(2, 4)] <- 4
baskets.of.Geraldine
## [1]  5  4  2  4 12  9
Granny.copy <- baskets.of.Granny
baskets.of.Granny[4] <- 11
baskets.of.Granny
## [1] 12  4  5 11  9  3
baskets.of.Granny <- Granny.copy
baskets.of.Granny
## [1] 12  4  5  6  9  3
# Working with Logical Vectors Comparing values
baskets.of.Granny > 5
## [1]  TRUE FALSE FALSE  TRUE  TRUE FALSE
which(baskets.of.Granny > 5)
## [1] 1 4 5
the.best <- baskets.of.Geraldine < baskets.of.Granny
which(the.best)
## [1] 1 3 4
## Using logical vectors as indices
baskets.of.Granny[the.best]
## [1] 12  5  6
x <- c(3, 6, 1, NA, 2)
x[x > 2]
## [1]  3  6 NA
x > 2
## [1]  TRUE  TRUE FALSE    NA FALSE
## Combining logical statements
min.baskets <- baskets.of.Granny == min(baskets.of.Granny)
max.baskets <- baskets.of.Granny == max(baskets.of.Granny)
min.baskets | max.baskets
## [1]  TRUE FALSE FALSE FALSE FALSE  TRUE
x[!is.na(x)]
## [1] 3 6 1 2
## Summarizing logical vectors
sum(the.best)
## [1] 3
any(the.best)
## [1] TRUE
all(the.best)
## [1] FALSE
# Powering Up Your Math with Vector Functions Using arithmetic vector operations
# Summarizing a vector
min(baskets.of.Granny)
## [1] 3
max(baskets.of.Granny)
## [1] 12
sum(baskets.of.Granny, baskets.of.Geraldine)
## [1] 75
x <- c(3, 6, 2, NA, 1)
sum(x)
## [1] NA
sum(x, na.rm = TRUE)
## [1] 12
### Cumulating operations
cumsum(baskets.of.Granny)
## [1] 12 16 21 27 36 39
cummax(baskets.of.Geraldine)
## [1]  5  5  5  5 12 12
cummin(x)
## [1]  3  3  2 NA NA
### Calculating differences
diff(baskets.of.Granny)
## [1] -8  1  1  3 -6
diff(x)
## [1]  3 -4 NA NA
## Recycling arguments
Granny.pointers <- c(10, 2, 4, 0, 4, 1, 4, 2, 7, 2, 1, 2)
points <- Granny.pointers * c(2, 3)
points
##  [1] 20  6  8  0  8  3  8  6 14  6  2  6
sum(points)
## [1] 87
sum(Granny.pointers * c(2, 3))
## [1] 87
round(diff(baskets.of.Granny)/baskets.of.Granny * 100)
## Warning: longer object length is not a multiple of shorter object length
## [1]  -67   25   20   50  -67 -267
round(diff(baskets.of.Granny)/baskets.of.Granny[1:5] * 100)
## [1] -67  25  20  50 -67

The R session information (including the OS info, R version and all packages used):

sessionInfo()
## R version 3.0.2 (2013-09-25)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## 
## locale:
## [1] LC_COLLATE=English_United Kingdom.1252  LC_CTYPE=English_United Kingdom.1252   
## [3] LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C                           
## [5] LC_TIME=English_United Kingdom.1252    
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
##  [1] BiocInstaller_1.12.1 ggplot2_0.9.3.1      reshape2_1.2.2       sos_1.3-8           
##  [5] brew_1.0-6           stringr_0.6.2        knitr_1.5            plyr_1.8            
##  [9] Revobase_7.1.0       RevoMods_7.1.0       RevoScaleR_7.1.0     lattice_0.20-27     
## [13] rpart_4.1-2         
## 
## loaded via a namespace (and not attached):
##  [1] codetools_0.2-8    colorspace_1.2-4   dichromat_2.0-0    digest_0.6.4      
##  [5] evaluate_0.5.1     foreach_1.4.1      formatR_0.10       fortunes_1.5-2    
##  [9] grid_3.0.2         gtable_0.1.2       highr_0.3          iterators_1.0.6   
## [13] labeling_0.2       MASS_7.3-29        munsell_0.4.2      proto_0.3-10      
## [17] RColorBrewer_1.0-5 scales_0.2.3       tools_3.0.2
Sys.time()
## [1] "2014-05-13 15:05:29 BST"