霍普金斯大学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
                                        
                                    
附件列表