# Lecture 4: Objects and Functions in R

## Working in R

• Today we’ll be starting to actually DO stuff in R
• Creating objects
• Looking at objects
• Manipulating objects
• That’s, uh, it. That’s all. That’s what R does.

## Creating a Basic Object

• Let’s create an object. We’re going to do this with the assignment operator `<-` (a.k.a. “gets”)
``a <- 4``
• This creates an object called `a`. What is that object? It’s a number. Specifically, it’s the number 4. We know that because we took that 4 and we shoved it into `a`.
• Why store it as an object rather than just saying 4? Oh, plenty of reasons.
• We can do more complex calculations before storing it, too.
``b <- sqrt(16)+10``

## Looking at Objects

• We can see this object that we’ve created in the Environment pane
• Putting that object on a line by itself in R will show us what it is.
``a``
``##  4``
``b``
``##  14``

## Looking at Objects

• We can even create an object and look at it in the console without storing it.
• Let’s think about what is really happening in these lines
``3``
``##  3``
``a+b``
``##  18``

## Looking at Objects Differently

• We can run objects through functions to look at them in different ways
``````#What does a look like if we take the square root of it?
sqrt(a)``````
``##  2``
``````#What does it look like if we add 1 to it?
a + 1``````
``##  5``
``````#If we look at it, do we see a number?
is.numeric(a)``````
``##  TRUE``

## Manipulating Objects

• We manipulated the object and LOOKED at it, we can also SAVE it, or UPDATE it.
``````#We looked at what a looked like with 1 added, but a itself wasn't changed
a``````
``##  4``
``````#Let's save a+1 as something else
b <- a + 1
#And let's overwrite a with its square root
a <- sqrt(a)
a``````
``##  2``
``b``
``##  5``

## Some Notes

• Even though we changed `a`, `b` was already set using the old value of `a`, and so was still `4+1=5`, not `2+1=3`.
• `a` basically got reassigned with `<-`. That’s how we got it to be `2`
• This is a very simple example, but basically everything in R is just this process but with more complex objects and more complex functions!

## Types of Objects

• We already determined that `a` was a number. But what else could it be? What other kinds of variables are there?
• Some basic object types:
• Numeric: A single number
• Character: A string of letters, like `'hello'`
• Logical: `TRUE` or `FALSE` (or `T` or `F`)
• Factor: A category, like `'left handed', 'right handed', or 'ambidextrous'`
• Vector: A collection of objects of the same type

## Characters

• A character object is a piece of text, held in quotes like `''` or `""`
• For example, maybe you have some data on people’s addresses.
``````address <- '321 Fake St.'
``##  "321 Fake St."``
``is.character(address)``
``##  TRUE``

## Logical

• Logicals are binary - TRUE or FALSE. They’re extremely important because lots of data is binary.
``````c <- TRUE
is.logical(c)``````
``##  TRUE``
``is.character(a)``
``##  FALSE``
``is.logical(is.numeric(a))``
``##  TRUE``

## Logical

• Logicals are used a lot in programming too, because you can evaluate whether conditions hold.
``a > 100``
``##  FALSE``
``a > 100 | b == 5``
``##  TRUE``
• `&` is AND, `|` is OR, and to check equality use `==`, not `=`. `>=` is greater than OR equal to, similarly for `<=`

## Logical

• They are also equivalent to `TRUE=1` and `FALSE=0` which comes in handy.
• We can use `as` functions to change one object type to another (although for `T=1, F=0` it does it automatically)
``as.numeric(FALSE)``
``##  0``
``TRUE + 3``
``##  4``

## Logicals Test

• Let’s stop and try to think about what these lines might do:
``````is.logical(is.numeric(FALSE))
is.numeric(2) + is.character('hello')
is.numeric(2) & is.character(3)
TRUE | FALSE
TRUE & FALSE``````

## Factors

• Factors are categorical variables - mutually exclusive groups
• They look like strings, but they’re more like logicals, but with more than two levels (and labeled differently than T and F)
• Factors have levels showing the possible categories you can be in
``````e <- as.factor('left-handed')
levels(e) <- c('left-handed','right-handed','ambidextrous')
e``````
``````##  left-handed
## Levels: left-handed right-handed ambidextrous``````

## Vectors

• Data is basically a bunch of variables all put together
• So unsurprisingly, a lot of R works with vectors, which are a bunch of objects all put together!
• Use `c()` (concatenate) to put a bunch of objects of the same type together in a vector
• Use square brackets to pick out parts of the vector
``````d <- c(5,6,7,8)
c(is.numeric(d),is.vector(d))``````
``##  TRUE TRUE``
``d``
``##  6``

## Vectors

• Unsurprisingly, lots of statistical functions look at multiple objects (what is statistics but making sense of lots of different measurements of the same thing?)
``mean(d)``
``##  6.5``
``c(sum(d),sd(d),prod(d))``
``##    26.000000    1.290994 1680.000000``

## Vectors

• We can perform the same operation on all parts of the vector at once!
``d + 1``
``##  6 7 8 9``
``d + d``
``##  10 12 14 16``
``d > 6``
``##  FALSE FALSE  TRUE  TRUE``

## Vectors

• Factors make a lot more sense as a vector
``````continents <- as.factor(c('Asia','Asia','Asia',
'N America','Europe','Africa','Africa'))
table(continents)``````
``````## continents
##    Africa      Asia    Europe N America
##         2         3         1         1``````
``continents``
``````##  N America
## Levels: Africa Asia Europe N America``````

## Value Matching

• It’s easy to create logicals seeing if a value matches ANY value in a vector with %in%
``3 %in% c(3,4)``
``##  TRUE``
``c('Nick','James') %in% c('James','Andy','Sarah')``
``##  FALSE  TRUE``

## Basic Vectors

• Generating basic vectors:
``````1:8
rep(4,3)
rep(c('a','b'),4)
numeric(5)
character(6)
sample(1:20,3)
``##  1 2 3 4 5 6 7 8``
``##  4 4 4``
``##  "a" "b" "a" "b" "a" "b" "a" "b"``
``##  0 0 0 0 0``
``##  "" "" "" "" "" ""``
``##   9  7 15``
``##  "Heads" "Tails" "Tails" "Tails" "Tails" "Heads"``

## Vector Test

• If we do `f <- c(2,3,4,5)`, then what will the output of these be?
``````f^2
f + c(1,2,3,4)
c(f,6)
is.numeric(f)
mean(f >= 4)
f*c(1,2,3)
length(f)
length(rep(1:4,3))
f/2 == 2 | f < 3
as.character(f)
f+f
c(f,f,f,f)
f[f]
f[c(1,3)]
f %in% (1:4*2)``````

## And Now You

• Create a factor that randomly samples six `'Male'` or `'Female'` people.
• Add up all the numbers from 18 to 763, then get the mean
• What happens if you make a list with a logical, a numeric, AND a string in it?
• Figure out how to use `paste0()` to turn `c('a','b')` into `'ab'`
• Use `[]` to turn `h <- c(10,9,8,7)` into `c(7,8,10,9)` and call it `j`
• (Several ways) Create a vector with eleven 0’s, then a 5.
• (Tough!) Use `floor()` or `%%` to count how many multiples of 4 there are between 433 and 899