Rolf Fredheim and Yulia Shenderovich
University of Cambridge
24/02/2015
uni <- "The University of Cambridge"
uni
[1] "The University of Cambridge"
#9400 tax free
(20000-9440)*20/100
[1] 2112
#OR:
wage <- 20000
taxFree <- 9400
rate <- 20
(wage-taxFree)*rate/100
[1] 2120
plusOne <- function(x){
return(x+1)
}
plusOne2 <- function(num){
return(num+1)
}
plusOne(8)
[1] 9
plusOne2(10)
[1] 11
plusOne2(num=5)
[1] 6
#plusOne2(wrongVar=2)
for (number in 1:5){
print (number)
}
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
a <- c(1,2,3,4,5)
for (value in a){
print (
plusOne(value)
)
}
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
listOfNumbers <- c(1,2,3,4,5)
for (number in listOfNumbers){
print (
number+1
)
}
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
a <- c(1,2,3,4,5)
a[1] #The first number in the vector
[1] 1
a[4] #The fourth number in the vector
[1] 4
for (i in 1:length(a)){
print (
plusOne(a[i])
)
}
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
printName <- function(){
print ("My name is Rolf Fredheim")
}
printName()
[1] "My name is Rolf Fredheim"
This is a useless function. But sometimes, if we have many lines of code requiring no particular input, it can be useful to file them away like this.
sillySimulation <- function(){
x1 <- runif(500,80,100)
x2 <- runif(500,0,100)
v1 <- c(x1,x2)
x3 <- runif(1000,0,100)
df <- data.frame(v1,x3)
require(ggplot2)
print(ggplot(df, aes(v1,x3))+geom_point()+ggtitle("simulation of some sort"))
}
Just as this slide hides the code on the previous slide, so the function hides the underlying code.
sillySimulation()
Let's hammer home how to use variables
what variables could we add to the function below?
desperateTimes <- function(){
print(paste0("Rolf is struggling to finish his PhD on time. Time remaining: 6 months"))
}
desperateTimes <- function(name){
print(paste0(name ," is struggling to finish his PhD on time. Time remaining: 6 months"))
}
desperateTimes(name="Tom")
[1] "Tom is struggling to finish his PhD on time. Time remaining: 6 months"
we specify a default value
desperateTimes <- function(name,gender="m"){
if(gender=="m"){
pronoun="his"
}else{
pronoun="her"
}
print(paste0(name ," is struggling to finish ",pronoun," PhD on time. Time remaining: 6 months"))
}
desperateTimes(name="Tanya",gender="f")
[1] "Tanya is struggling to finish her PhD on time. Time remaining: 6 months"
Is this a good function? Why (not)?
desperateTimes <- function(name,gender="m",degree){
if(gender=="m"){
pronoun="his"
}else{
pronoun="her"
}
print(paste0(name ," is struggling to finish ",pronoun," ",degree," on time. Time remaining: 6 months"))
}
desperateTimes(name="Rolf",gender="m","Mphil")
[1] "Rolf is struggling to finish his Mphil on time. Time remaining: 6 months"
require(lubridate)
require(ggplot2)
deadline=as.Date("2015-09-01")
daysLeft <- deadline-Sys.Date()
totDays <- deadline-as.Date("2011-10-01")
print(daysLeft)
Time difference of 190 days
print(paste0("Rolf is struggling to finish his PhD on time. Days remaining: ", as.numeric(daysLeft)))
[1] "Rolf is struggling to finish his PhD on time. Days remaining: 190"
print(paste0("Percentage to go: ",round(as.numeric(daysLeft)/as.numeric(totDays)*100)))
[1] "Percentage to go: 13"
df <- data.frame(days=c(daysLeft,totDays-daysLeft),lab=c("to go","completed"))
ggplot(df,aes(1,days,fill=lab))+geom_bar(stat="identity",position="fill")
We could put all this code in a function, and forget about it
timeToWorry <- function(){
require(lubridate)
deadline=as.Date("2015-09-01")
daysLeft <- deadline-Sys.Date()
totDays <- deadline-as.Date("2011-10-01")
print(daysLeft)
print(paste0("Rolf is struggling to finish his PhD on time. Days remaining: ", as.numeric(daysLeft)))
print(paste0("Percentage to go: ",round(as.numeric(daysLeft)/as.numeric(totDays)*100)))
df <- data.frame(days=c(daysLeft,totDays-daysLeft),lab=c("to go","completed"))
ggplot(df,aes(1,days,fill=lab))+geom_bar(stat="identity",position="fill")
}
timeToWorry()
Time difference of 190 days
[1] "Rolf is struggling to finish his PhD on time. Days remaining: 190"
[1] "Percentage to go: 13"