Skip to content

Latest commit

 

History

History
122 lines (96 loc) · 2.19 KB

decomposition-R.md

File metadata and controls

122 lines (96 loc) · 2.19 KB
layout element title language
page
notes
Problem Decomposition
R

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]({{ site.baseurl }}/materials/decomposition-example.R).