霍普金斯大学Roger Peng教授撰写
Contents
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
History and Overview of R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
What is R? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
What is S? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
The S Philosophy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Back to R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Basic Features of R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Free Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Design of the R System . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Limitations of R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
R Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Getting Started with R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Getting started with the R interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
R Nuts and Bolts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Entering Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
R Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Creating Vectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Mixing Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Explicit Coercion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Factors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Missing Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Data Frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Getting Data In and Out of R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Reading and Writing Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Reading Data Files with read.table() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Reading in Larger Datasets with read.table . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Calculating Memory Requirements for R Objects . . . . . . . . . . . . . . . . . . . . . . . 25
Using Textual and Binary Formats for Storing Data . . . . . . . . . . . . . . . . . . . . . . 27
Using dput() and dump() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Binary Formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Interfaces to the Outside World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
File Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Reading Lines of a Text File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Reading From a URL Connection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Subsetting R Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Subsetting a Vector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
Subsetting a Matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
Subsetting Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Subsetting Nested Elements of a List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Extracting Multiple Elements of a List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Partial Matching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Removing NA Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Vectorized Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Vectorized Matrix Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Dates and Times . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Dates in R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Times in R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Operations on Dates and Times . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Control Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
if-else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
for Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Nested for loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
while Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
repeat Loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
next, break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Functions in R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Your First Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
Argument Matching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Lazy Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
The ... Argument . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Arguments Coming After the ... Argument . . . . . . . . . . . . . . . . . . . . . . . . . 63
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
Scoping Rules of R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
A Diversion on Binding Values to Symbol . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Scoping Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Lexical Scoping: Why Does It Matter? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Lexical vs. Dynamic Scoping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Application: Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Plotting the Likelihood . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
Coding Standards for R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Loop Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Looping on the Command Line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
lapply() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
sapply() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
split() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Splitting a Data Frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
tapply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
apply() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Col/Row Sums and Means . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Other Ways to Apply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
mapply() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Vectorizing a Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Something’s Wrong! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Figuring Out What’s Wrong . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Debugging Tools in R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Using traceback() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Using debug() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Using recover() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
Profiling R Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Using system.time() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Timing Longer Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
The R Profiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Using summaryRprof() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
Simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Generating Random Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Setting the random number seed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Simulating a Linear Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Random Sampling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Data Analysis Case Study: Changes in Fine Particle Air Pollution in the U.S. . . . . . . . 117
Synopsis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Loading and Processing the Raw Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119