Template [R]

This repo is mounted by: R

1. Data types, data structures and indexing

1.1 Basics

Object, assignment, functions, how to comment and get help

Shift+Enter to run
R
0.1s
R
Shift+Enter to run
R
# we can use R as a calculator!
Shift+Enter to run
R
# Functions help us execute things; we usually have to provide arguments
Shift+Enter to run
R
# Don't know how a function works? Ask for help!
Shift+Enter to run
R

1.2 Data types

Numeric (integers or doubles)

# Naming objects tips
Shift+Enter to run
R

Character

Shift+Enter to run
R

Boolean

Shift+Enter to run
R

1.3 Data classes

Vectors

Ordered collection of elements.

Shift+Enter to run
R

What happens when we add 1 to a logical vector?

Shift+Enter to run
R

Matrix

Shift+Enter to run
R
Shift+Enter to run
R
Shift+Enter to run
R

Lists

Shift+Enter to run
R
Shift+Enter to run
R

Data frames

data.frame(vector1, vector2)	# bind vectors with the same length
Shift+Enter to run
R

1.4 Dimensions

dim(matrix)
length(object)

Can you guess the value of the length of my_df?

Shift+Enter to run
R

1.5 Indexing

vector[index]
matrix[row, column]
list[[element]]
Shift+Enter to run
R
Shift+Enter to run
R
Shift+Enter to run
R
Shift+Enter to run
R

1.6 Slicing

my_matrix <- matrix(c(34, 9, 6, 5, 3, 50, 43, 27, 98, 100), nrow=5)
Shift+Enter to run
R
Shift+Enter to run
R

2. Files

Absolute paths

C:/Users/RonBumblefootThal/Documents/RFolder/MyFirstProject/Draft/IDon'tKnowWhatI'mDoing/etc.R

Relative Paths

~/I_love_my_project/CoolCode.R

2.1 Working directories

Shift+Enter to run
R
Shift+Enter to run
R
Shift+Enter to run
R
Shift+Enter to run
R

2.2 Save/write files

Data frame example

soa_tour <- data.frame(country = c("USA", "UK", "FRA", "GER", "BRA"), 
                       frequency = c(34, 9, 6, 5, 3), 
                       continents = c("north_america", "europe", "europe", 
                                      "europe", "south_america"))
0.3s
R
Shift+Enter to run
R
Shift+Enter to run
R

2.3 Load/read files

From your PC

Shift+Enter to run
R
Shift+Enter to run
R

From url

object <- read.csv(url("http://remote.repo/data/file.csv"))

Metabolic rates data: http://sciencecomputing.io/data/metabolicrates.csv

Shift+Enter to run
R

From url to your PC, then read

Shift+Enter to run
R
download.file(url = "http://sciencecomputing.io/data/metabolicrates.csv",
              destfile = "data/raw/metabolicrates.csv")
Shift+Enter to run
R
metabolic_rates <- read.csv("data/raw/metabolicrates.csv")
0.2s
R

3. Control Flow

You already apply control flow when you decide how to go to work during winter.

For example:

  • You take the metro if it's snowy

  • You take the metro if it's cold

  • You walk every other time

Now, let's put that into code!

3.1 Conditional evaluation

Simple if statement

Structure:

if (condition is true) {
	do expression
}

Example:

Shift+Enter to run
R
Shift+Enter to run
R
Shift+Enter to run
R
Shift+Enter to run
R

If/else statement

Structure:

if (condition) {
	expression 1
 } else { 
 	expression 2
}

Example:

Shift+Enter to run
R

Nested if /else statement

if (condition 1) {
	expression 1
  if (condition 2) {
    expression 2
  }
}

Example:

Shift+Enter to run
R
Shift+Enter to run
R

Best practice:

Shift+Enter to run
R

Adding a condition:

Shift+Enter to run
R

3.2 For loops

Simple for loops

Using for loops, you can then plan your schedule for a few days.

What we had:

weather <- "snowy"
temperature <- -15
0.2s
R

But what about this?

weather_vec <- c("snowy", "cloudy", "snowy", "clear", "rainy")
temperature_vec <- c(-15, -23, -2, -40, 5)
0.2s
R

Does the same code work?

if (weather_vec == "snowy" | temperature_vec < -20) {
  print("Take the metro!")
} else {
  print("Let's walk")
}
0.4s
R

Iterations

for (i in iterations) {
	content of the for loop
}
Shift+Enter to run
R

More generally:

Shift+Enter to run
R
Shift+Enter to run
R

If statement inside for loops

Structure:

for (i in iterations) {
	if (condition) {
 	 	expression1
  } else {
  	expression2
  }
}

Example:

# Previous statement
if(weather_vec == "snowy" | temperature_vec < -20){
  	print("Take the metro!")
} else {
 	 	print("Just walk")
}
Shift+Enter to run
R
# Will this work?
Shift+Enter to run
R

3.3 Extras

Some logical operators

Comparisons:

  • less than (<)

  • more than (>)

  • less than or equal to (<=)

  • more than or equal to (>=)

  • equal to (==)

  • not equal to (!=)

Logic:

  • not x (! x)

  • x or y (x | y)

  • x and y (x & y)

4. Functions

4.1 Syntax and arguments

Basic syntax

functionname <- function(argument1, argument2) { # Name and arguments 
	result = expression		# What the function does
  return(result) # What the function returns
}	
Shift+Enter to run
R
# Apply on values
Shift+Enter to run
R
# Apply on variables
Shift+Enter to run
R

Calling (personal) functions within functions

Shift+Enter to run
R
Shift+Enter to run
R

4.2 Scope

Variables can exist either in global or local scope.

Remember, the element to return in our function was called `abs_result`.

# What will this return, outside the function?
Shift+Enter to run
R

Here is a second example for ecologists who like to count living things:

# global variables
Shift+Enter to run
R
Shift+Enter to run
R
Shift+Enter to run
R
Shift+Enter to run
R

4.3 Integration

Combining functions and control flow

Let's come back to our previous example about transportation according to the weather.

Here is the forecast for the week and the weekend:

# Week forecast
weather_week <- c("snowy", "cloudy", "snowy", "clear", "rainy")
temperature_week <- c(-15.0, -23.0, -2.0, -40.0, 5.0)
# Weekend forecast
weather_weekend <- c("snowy", "rainy")
temperature_weekend <- c(-3.0, 2.0)
0.1s
R

Now, let's build a function that will work with either the week or weekend forecasts.

It will look like:

transportation <- function {
	for (all days of the week/weekend) {
		if (snowy or cold) {
 				 take metro
    } else {
    		 walk
    }
 }
Shift+Enter to run
R
Shift+Enter to run
R
# Plan for the week
Shift+Enter to run
R
# Plan for the weekend
Shift+Enter to run
R

4.4 Exercise - Planning the week

Exercise to integrate the following:

  • Functions

  • Control flow

  • Files

  1. Write a function to read a file if it exists, downloading it first if it does not exist.

  2. Apply the choose_transportation function to the data in the file

# Pseudocode
function (file, url)
	if (file exists)
  	read file
  else
  	download file
    read file
library("R.utils", quietly = TRUE)
0.2s
R
# Useful functions
?file.exists     # library "R.Utils"
?read.csv
?download.file
Forecast data url: http://bit.ly/dt-forecast
Shift+Enter to run
R
Shift+Enter to run
R
Shift+Enter to run
R

Extras

Default values

# Define function
Shift+Enter to run
R
Shift+Enter to run
R

Runtimes (1)