2nd Edition

Advanced R, Second Edition

By Hadley Wickham Copyright 2019
    604 Pages
    by Chapman & Hall

    604 Pages
    by Chapman & Hall

    Advanced R helps you understand how R works at a fundamental level. It is designed for R programmers who want to deepen their understanding of the language, and programmers experienced in other languages who want to understand what makes R different and special.

    This book will teach you the foundations of R; three fundamental programming paradigms (functional, object-oriented, and metaprogramming); and powerful techniques for debugging and optimising
    your code.

    By reading this book, you will learn:

    • The difference between an object and its name, and why the distinction is important
    • The important vector data structures, how they fit together, and how you can pull them apart using subsetting
    • The fine details of functions and environments
    • The condition system, which powers messages, warnings, and errors
    • The powerful functional programming paradigm, which can replace many for loops
    • The three most important OO systems: S3, S4, and R6
    • The tidy eval toolkit for metaprogramming, which allows you to manipulate code and control evaluation
    • Effective debugging techniques that you can deploy, regardless of how your code is run
    • How to find and remove performance bottlenecks

    The second edition is a comprehensive update:

    • New foundational chapters: "Names and values," "Control flow," and "Conditions"
    • comprehensive coverage of object oriented programming with chapters on S3, S4, R6, and how to choose between them
    • Much deeper coverage of metaprogramming, including the new tidy evaluation framework
    • use of new package like rlang (http://rlang.r-lib.org), which provides a clean interface to low-level operations, and purr (http://purrr.tidyverse.org/) for functional programming
    • Use of color in code chunks and figures

      Hadley Wickham is Chief Scientist at RStudio, an Adjunct Professor at Stanford University and the University of Auckland, and a member of the R Foundation. He is the lead developer of the tidyverse, a collection of R packages, including ggplot2 and dplyr, designed to support data science. He is also the author of R for Data Science (with Garrett Grolemund), R Packages, and ggplot2: Elegant Graphics for Data Analysis.

    Introduction

    Why R?

    Who should read this book

    What you will get out of this book

    What you will not learn

    Meta-techniques

    Recommended reading

    Getting help

    Acknowledgments

    Conventions

    Colophon

    I Foundations

    Introduction

    Names and values

    Introduction

    Binding basics

    Copy-on-modify

    Object size

    Modify-in-place

    Unbinding and the garbage collector

    Answers

    Vectors

    Introduction

    Atomic vectors

    Attributes

    S atomic vectors

    Lists

    Data frames and tibbles

    NULL

    Answers

    Subsetting

    Introduction

    Selecting multiple elements

    Selecting a single element

    Subsetting and assignment

    Applications

    Answers

    Control flow

    Introduction

    Choices

    Loops

    Answers

    Functions

    Introduction

    Function fundamentals

    Function composition

    Lexical scoping

    Lazy evaluation

    (dot-dot-dot)

    Exiting a function

    Function forms

    Quiz answers

    Environments

    Introduction

    Environment basics

    Recursing over environments

    Special environments

    The call stack

    As data structures

    Quiz answers

    Conditions

    Introduction

    Signalling conditions

    Ignoring conditions

    Handling conditions

    Custom conditions

    Applications

    Quiz answers

    II Functional programming

    Introduction

    Functionals

    Introduction

    My first functional: map()

    Purrr style

    Map variants

    Reduce

    Predicate functionals

    Base functionals

    Function factories

    Introduction

    Factory fundamentals

    Graphical factories

    Statistical factories

    Function factories + functionals

    Function operators

    Introduction

    Existing function operators

    Case study: creating your own function operators

    III Object oriented programming

    Introduction

    Base types

    Introduction

    Base vs OO objects

    Base types

    S3

    Introduction

    Basics

    Classes

    Generics and methods

    Object styles

    Inheritance

    Dispatch details

    R6

    Introduction

    Classes and methods

    Controlling access

    Reference semantics

    Why R?

    S4

    Introduction

    Basics

    Classes

    Generics and methods

    Method dispatch

    S and S

    Trade-offs

    Introduction

    S vs S

    R vs S

    IV Metaprogramming

    Introduction

    Big picture

    Introduction

    Code is data

    Code is a tree

    Code can generate code

    Evaluation runs code

    Customising evaluation with functions

    Customising evaluation with data

    Quosures

    Expressions

    Introduction

    Abstract syntax trees

    Expressions

    Parsing and grammar

    Walking the AST with recursive functions

    Specialised data structures

    Quasiquotation

    Introduction

    Motivation

    Quoting

    Unquoting

    Non-quoting

    Dot-dot-dot ()

    Case studies

    History

    Evaluation

    Introduction

    Evaluation basics

    Quosures

    Data masks

    Using tidy evaluation

    Base evaluation

    Translating R code

    Introduction

    HTML

    LaTeX

    V Techniques

    Introduction

    Debugging

    Introduction

    Overall approach

    Locate the error

    The interactive debugger

    Non-interactive debugging

    Non-error failures

    Measuring performance

    Introduction

    Profiling

    Microbenchmarking

    Improving performance

    Introduction

    Code organisation

    Check for existing solutions

    Do as little as possible

    Vectorise

    Avoid copies

    Case study: t-test

    Other techniques

    Rewriting R code in C++

    Introduction

    Getting started with C++

    Other classes

    Missing values

    The STL

    Case studies

    Using Rcpp in a package

    Learning more

    Acknowledgments

    Biography

    Hadley Wickham is Chief Scientist at RStudio, an Adjunct Professor at Stanford University and the University of Auckland, and a member of the R Foundation. He is the lead developer of the tidyverse, a collection of R packages, including ggplot2 and dplyr, designed to support data science. He is also the author of R for Data Science (with Garrett Grolemund), R Packages, and ggplot2: elegant graphics for data analysis.

    "The development of progressive data analysis tools that are technically excellent creates a superior opportunity for us as data science users. The concepts of this book can enhance the overall user experience and increase the likelihood that the developed tools become preferred tools accomplishing the desired purpose. Learning from Wickham's vast experience in R coding improves tools that provide targeted users the ability to be more efficient, clearer R analysis code writers, better debuggers of their own syntax errors, and positioned to enjoy faster performance time. These are many of the advantages I have enjoyed using tidyverse developed by Wickham with the "Advanced R" philosophy." ~Technometrics

    "The book is packed with a ton of information, insights, and knowledge drawn from the author's own experience. The approach will be appreciated by the right audience – the audience that is looking for a deeper understanding of the R language. At times, the writing style reveals a personal reflection of how the author's knowledge of the language has evolved. This is beautiful."
    ~ISCB News