### 1 Vectors ###

### 1.1 Let's start simple
e1 = c(2,5,0,8)
e2 = 1:200
e3 = seq(-210,-200,2)
e4 = 2^1:7
v = rep(c(1,-1),times=25)
e5 = c(e2,e3)
?seq
e6 = seq(0,1,length=70)
e7 = rep(e1,times=10)
e2-e3


### 1.2 Character vectors
# All vowels
vowels = c('a','e','i','o','u','y')
# All letters
letters = letters
# True or false if vowels are in letters
letters %in% vowels
# Index of each vowels
vowelsInLetters = which(letters %in% vowels)
# Index of each non-vowels
notVowelsInLetters = which(!(letters %in% vowels))
# Letters after vowels
lettersAfterVowels = letters[vowelsInLetters+1]
# myname with my name
myname = "Titouan"
# strsplit to extract letters
mynameSplited = strsplit(myname, NULL)
# Access its first element
mynameSplited[[1]][1]
mynameSplited[[1]]
mynameSplited[1]
# Index in alphabet of letters in my name
indexMyname = which(letters %in% mynameSplited[[1]])
# Index in alphabet of letters in my neighbour name
neighborname = "Marianne"
neighbornameSplited = strsplit(neighborname, NULL)
neighbornameSplited[[1]][1]
indexNeighborname = which(letters %in% neighbornameSplited[[1]])
# Min of average of index
mynameAverage = mean(indexMyname)
neighborAverage = mean(indexNeighborname)
minIndexOfName = min(c(mynameAverage,neighborAverage))

### 2 DataFrames ###

### 2.1 Cute Animals
# All vowels
vowels = c('a','e','i','o','u','y')
# All letters
letters = letters
# Database of 3 columns : alphabet letters, number of each letter, binary variable vowel
database = data.frame(letter=letters, index=1:26, isVowels=letters %in% vowels)
# Extracting lines corresponding to my name
indexMyname = letters %in% strsplit("Titouan", NULL)[[1]]
database[indexMyname,"index"]
# Examining msleep dataset
library(tidyverse)
head(msleep)
str(msleep)
names(msleep)
summary
# Sanity check animals either awake or asleep
which(msleep$sleep_total + msleep$awake == 24 )
# Animal that sleep the most
msleep[which.max(msleep$sleep_total),]
# Animals of less than 100g and that sleeps more than half a day
nrow(msleep[which(msleep$sleep_total > 12 & msleep$bodywt < 0.1),])
# Average brainwt/bodywt ratio (ajoute une colonne ratio)
msleep$ratio = msleep$brainwt/msleep$bodywt
mean(msleep$ratio, na.rm = TRUE)
# Animal with the highest ratio
msleep[which.max(msleep$ratio),]

### 2.2 Endangered animals

# Create a copy and reorder its factors
msleep_copy = msleep
msleep_copy$conservation = factor(x = msleep_copy$conservation, c("lc","domesticated","cd","nt","vu","en"), ordered = TRUE)
# Compare average weight of endangered animals to non-endangered
averageWtThreatened = mean(msleep_copy[which(msleep_copy$conservation > "nt"),]$bodywt)
averageWtRemaining = mean(msleep_copy[which(msleep_copy$conservation <= "nt"),]$bodywt)

# Ajoute une colonne threatened, valeur booléenne
msleep$threatened = msleep$conservation > "nt"


### 2.3 Functions

# Create a function taking a name as input and returning corresponding list of letters
lettersFromName <- function(name) {
  return(strsplit(name, NULL)[[1]])
}
lettersFromName("Titouan")
# Fix with empty "" name
lettersFromName("")
lettersFromNameFixed <- function(name) {
  if (name == "") {
    l = NULL
  }
  else {
    l = strsplit(name, NULL)[[1]]
  }
  return(l)
}
lettersFromNameFixed("")
# With non-standards characters
lettersFromNameFixed("X Æ A-12")
# Function returning corresponding genus from animal name
genusFromName <- function(name) {
  genusname <- msleep[tolower(msleep$name) == tolower(name),]$genus
  if (length(genusname) == 0) {
    s <- c("I don't know")
  }
  else {
    s <- c("The ",name," is a ", genusname)
  }
  #browser()
  return(paste(s, collapse = ''))
}
genusFromName("little brown bat")
