### Approaches to solving problems

• Real computational tasks are complicated.
• To accomplish them effectively you need to think before you code.

• Decompose a coding problem:
1. Understand the problem.
• Identify inputs and outputs.
• Input = Portal surveys csv
• Output = plot of yearly abundance for large and small rodents
`````` # Overall goal: visualize how many large (>50g) and
# small (<50g) mammals are collected each year
``````
2. Break the problem down into a few pieces.
• Bullet list on paper or comments in script.
`````` # Subtasks
# Import data
# Get column of small and large categories
# Count number of each per year
# Plot this
``````
3. Break those pieces into codeable chunks.

`````` # TODO: function that returns size class from weight
``````
4. Code one chunk at a time.

### Coding one chunk

• Write function to return size classes
``````get_size_class()
``````
• Start with if statement
• Pseudocode
• Write code in English
• “If weight value is bigger than 50, return large; otherwise return small”
``````if(weight > 50){
size_class <- "large"
} else {
size_class <- "small"
}
``````
• Test code using values with known output
``````weight <- 10
``````
• Turn into function
``````get_size_class <- function(weight){
if(weight > 50){
size_class <- "large"
} else {
size_class <- "small"
}
}
get_size_class(100)
``````
• Why doesn’t this work?
``````get_size_class <- function(weight){
if(weight > 50){
size_class <- "large"
} else {
size_class <- "small"
}
return(size_class)
}
``````
• Generalize function
• Easier to change values later
• Always test after changing
``````get_size_class <- function(weight, threshold){
if(weight > threshold){
size_class <- "large"
} else {
size_class <- "small"
}
return(size_class)
}
get_size_class(100, 50)
get_size_class(100, 150)
``````
• Make one change at a time

• Decompose a code chunk:

1. Think about it.
2. Write it.
3. Test it ( on it’s own ).
4. Fix any problems.

Rest of code in decomposition-example.R.