View source: R/chapters-auto.R
ch09 | R Documentation |
To print a listing of all examples of a chapter, use ch9()
.
To run all the examples of ch9()
, use example(ch9)
.
ch09() ch9()
toc
Other Chapters:
ch01()
,
ch02()
,
ch03()
,
ch04()
,
ch05()
,
ch06()
,
ch07()
,
ch08()
,
ch10()
,
ch11()
,
ch12()
,
ch13()
,
ch14()
,
ch15()
,
ch16()
,
ch17()
,
ch18()
,
ch19()
,
ch20()
if (interactive()) { # Chapter 9 # Controlling the Logical Flow #Making Choices with if Statements priceCalculator <- function(hours, pph=40){ net.price <- hours * pph round(net.price) } priceCalculator <- function(hours, pph=40){ net.price <- hours * pph if (hours > 100) { net.price <- net.price * 0.9 } round(net.price) } priceCalculator(hours = 55) priceCalculator(hours = 110) priceCalculator <- function(hours, pph=40){ net.price <- hours * pph if(hours > 100) net.price <- net.price * 0.9 round(net.price) } ?'if' ?"if" ?`if` ## Doing Something Else with an if...else Statement priceCalculator <- function(hours, pph=40, public=TRUE){ net.price <- hours * pph if(hours > 100) net.price <- net.price * 0.9 if(public) { tot.price <- net.price * 1.06 } else { tot.price <- net.price * 1.12 } round(tot.price) } priceCalculator(25,public=TRUE) priceCalculator(25,public=FALSE) priceCalculator <- function(hours, pph=40, public=TRUE){ net.price <- hours * pph if(hours > 100) net.price <- net.price * 0.9 if(public) tot.price <- net.price * 1.06 else tot.price <- net.price * 1.12 round(tot.price) } priceCalculator <- function(hours, pph=40, public=TRUE){ net.price <- hours * pph if(hours > 100) net.price <- net.price * 0.9 tot.price <- net.price * if(public) 1.06 else 1.12 round(tot.price) } # Vectorizing Choices ## Looking at the problem #priceCalculator(c(25,110)) priceCalculator(110) c(25, 110) > 100 ## Choosing based on a logical vector ### Understanding how it works ifelse(c(1,3) < 2.5 , 1:2 , 3:4) ### Trying it out my.hours <- c(25,110) my.hours * 40 * ifelse(my.hours > 100, 0.9, 1) ### Adapting the function priceCalculator <- function(hours,pph=40,public){ net.price <- hours * pph net.price <- net.price * ifelse(hours > 100 , 0.9, 1) tot.price <- net.price * ifelse(public, 1.06, 1.12) round(tot.price) } clients <- data.frame( hours = c(25, 110, 125, 40), public = c(TRUE,TRUE,FALSE,FALSE) ) with(clients, priceCalculator(hours, public = public)) # Making Multiple Choices ## Chaining if...else statements # Code example # NOT run #if(client=='private'){ # tot.price <- net.price * 1.12 # 12% VAT #} else { # if(client=='public'){ # tot.price <- net.price * 1.06 # 6% VAT # } else { # tot.price <- net.price * 1 # 0% VAT # } #} # Code example # NOT run #if(client=='private'){ # tot.price <- net.price * 1.12 #} else if(client=='public'){ # tot.price <- net.price * 1.06 #} else { # tot.price <- net.price #} # Code example # NOT run #VAT <- ifelse(client=='private', 1.12, # ifelse(client == 'public', 1.06, 1) # ) #tot.price <- net.price * VAT # ## Switching between possibilities ### Making choices with switch # Code example # NOT run # VAT <- switch(client, private=1.12, public=1.06, abroad=1) ### Using default values in switch # Code example # NOT run # VAT <- switch(client, private=1.12, public=1.06, 1) client <- 'other' switch(client, private=1.12, public=1.06, 1) # Looping Through Values ## Constructing a for loop ## Calculating values in a for loop ### Using the values of the vector priceCalculator <- function(hours, pph=40, client){ net.price <- hours * pph * ifelse(hours > 100, 0.9, 1) VAT <- numeric(0) for(i in client){ VAT <- c(VAT,switch(i, private=1.12, public=1.06, 1)) } tot.price <- net.price * VAT round(tot.price) } clients$type <- c('public','abroad','private','abroad') priceCalculator(clients$hours, client=clients$type) ### Using loops and indices nclient <- length(client) VAT <- numeric(nclient) for(i in seq_along(client)){ VAT[i] <- switch(client[i], private=1.12, public=1.06, 1) } VAT # Looping without Loops: Meeting the Apply Family songline <- 'Get out of my dreams...' for(songline in 1:5) print('...Get into my car!') songline ## Looking at the family features ## Meeting three of the members ## Applying functions on rows and columns ### Counting birds counts <- matrix(c(3,2,4,6,5,1,8,6,1), ncol=3) colnames(counts) <- c('sparrow','dove','crow') counts apply(counts, 2, max) ### Adding extra arguments counts[2, 2] <- NA apply(counts,2,max) apply(counts, 2, max, na.rm=TRUE) ## Applying functions to listlike objects ### Applying a function to a vector #### Using switch on vectors sapply(c('a','b'), switch, a='Hello', b='Goodbye') #### Replacing a complete for loop with a single statement priceCalculator <- function(hours, pph=40, client){ net.price <- hours * pph * ifelse(hours > 100, 0.9, 1) VAT <- sapply(client, switch, private=1.12, public=1.06, 1) tot.price <- net.price * VAT round(tot.price) } ### Applying a function to a data frame sapply(clients,class) ### Simplifying results (or not) with sapply sapply(clients, unique) ### Getting lists using lapply sapply(clients[c(1,3), ], unique) lapply(clients[c(1,3), ], unique) }
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.