# Learning Objectives

## Values and Vectors

• Name and describe R’s atomic data types and create objects of those types.
• Explain what ‘scalar’ values actually are in R.
• Identify correct and incorrect variable names in R.
• Create vectors in R and index them to select single values, ranges of values, and selected values.
• Explain the difference between NA and NULL and correctly use tests for each.

...visit page

## Indexing

• Explain the difference between a list and a vector.
• Explain the difference between indexing with [ and with [[.
• Use [ and [[ correctly to extract elements and sub-structures from data structures in R.
• Create a named list in R.
• Access elements by name using both [ and $ notation. • Correctly identify cases in which back-quoting is necessary when accessing elements via $.
• Create and index matrices in R.

...visit page

## Control Flow

• Create for loops and if/else statements in R.
• Explain why vectors cannot be used directly in conditional expressions and correctly use all and any to combine their values.
• Define functions taking a fixed number of named arguments and/or a variable number of arguments.
• Explain what vectorization is and create vectorized equivalents of unnested loops containing simple conditional tests.

...visit page

## The Tidyverse

• Install and load packages in R.
• Read CSV data with R.
• Explain what a tibble is and how tibbles related to data frames and matrices.
• Describe how read_csv infers data types for columns in tabular datasets.
• Name and use three functions for inspects tibbles.
• Select subsets of tabular data using column names, scalar indices, ranges, and logical expressions.
• Explain the difference between indexing with [ and with [[.
• Name and use four functions for calculating aggregate statistics on tabular data.
• Explain how these functions treat NA by default, and how to change that behavior.
• Name, describe, and use a tidyverse function for choosing rows by value from tabular data.
• Name, describe, and use a tidyverse function for reordering rows of tabular data.
• Name, describe, and use a tidyverse function for selecting columns of tabular data.
• Name, describe, and use a tidyverse function for calculating new columns from existing ones.
• Name, describe, and use a tidyverse function for grouping rows of tabular data.
• Name, describe, and use a tidyverse function for aggregating grouped or ungrouped rows of tabular data.

...visit page

## Cleaning Up Data

• Describe and use the read_csv function.
• Describe and use the str_replace function.
• Describe and use the is.numeric and as.numeric functions.
• Describe and use the map function and its kin.
• Describe and use pre-allocation to capture the results of loops.

...visit page

## Non-Standard Evaluation

• Trace the order of evaluation in function calls.
• Explain what environments and expressions are and how they relate to one another.
• Justify the author’s use of ASCII art in the second decade of the 21st Century.

...visit page

## Handling Errors

• Name and describe the three levels of error handling in R.
• Handle an otherwise-fatal error in a function call in R.

...visit page

## Object-Oriented Programming

• Correctly identify the most commonly used object-oriented programming system in R.
• Explain what attributes R and correctly set and query objects’ attributes, class, and dimensions.
• Explain how to define a new method for a class.
• Describe and implement the three functions that should be written for any user-defined class.

...visit page

## Intellectual Debt

• Explain what the formula operator ~ was created for and what other uses it has.
• Describe and use ., .x, .y, ..1, ..2, and other convenience parameters.
• Define copy-on-modify and explain its use in R.

...visit page

## Projects

• Describe the three things an R package can contain.
• Explain how R code in a package is distributed and one implication of this.
• Explain the purpose of the DESCRIPTION, NAMESPACE and .Rbuildignore files in an R project.
• Explain what should be put in the R, data, man, and tests directories of an R project.
• Describe and use specially-formatted comments with roxygen2 to document a package.
• Use @export and @import` directives correctly in roxygen2 documentation.
• Add a dataset to an R package.
• Use functions from external libraries inside a package in a hygienic way.
• Rewrite references to bare column names to satisfy R’s packaging checks.
• Correctly document the package as a whole and the datasets it contains.

...visit page

## Testing

• Create unit tests in R.
• Create unit tests for an R package.

...visit page

• FIXME

...visit page

• FIXME

...visit page