Tải bản đầy đủ (.pdf) (636 trang)

r in a nutshell

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (6.08 MB, 636 trang )

www.it-ebooks.info
www.it-ebooks.info
R
IN A NUTSHELL
www.it-ebooks.info
www.it-ebooks.info
R
IN A NUTSHELL
Joseph Adler
Beijing

Cambridge

Farnham

Köln

Sebastopol

Taipei

Tokyo
www.it-ebooks.info
R in a Nutshell
by Joseph Adler
Copyright © 2010 Joseph Adler. All rights reserved.
Printed in the United States of America.
Published
by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472.
O’Reilly books may be purchased for educational, business, or sales promotional use. Online
editions are also available for most titles (). For more infor-


mation, contact our corporate/institutional sales department: (800) 998-9938 or

Editor: Mike Loukides
Production Editor: Sumita Mukherji
Production Services: Newgen North
America, Inc.
Cover Designer: Karen Montgomery
Interior Designer: David Futato
Illustrator: Robert Romano
Printing History:
December 2009: First Edition.
Nutshell Handbook, the Nutshell Handbook logo, and the O’Reilly logo are registered trade-
marks
of O’Reilly Media, Inc. R in a Nutshell, the image of a harpy eagle, and related trade
dress are trademarks of O’Reilly Media, Inc.
Many of the designations used by manufacturers and sellers to distinguish their products are
claimed as trademarks. Where those designations appear in this book, and O’Reilly Media,
Inc., was aware of a trademark claim, the designations have been printed in caps or initial caps.
While every precaution has been taken in the preparation of this book, the publisher and
author assume no responsibility for errors or omissions, or for damages resulting from the use
of the information contained herein.
TM
This book uses RepKover™, a durable and flexible lay-flat binding.
ISBN: 978-0-596-80170-0
[M]
1260894633
www.it-ebooks.info
Table of Contents
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv
Part I. R Basics

1. Getting and Installing R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
R Versions 3
Getting and Installing Interactive R Binaries 3
Windows 4
Mac OS X 5
Linux and Unix Systems 5
2. The R User Interface .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
The R Graphical User Interface 7
Windows 8
Mac OS X 8
Linux and Unix 8
The R Console 11
Command-Line Editing 13
Batch Mode 13
Using R Inside Microsoft Excel 14
Other Ways to Run R 15
3. A Short R Tutorial .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Basic Operations in R 17
Functions 19
Variables 20
Introduction to Data Structures 22
v
www.it-ebooks.info
Objects and Classes 25
Models and Formulas 26
Charts and Graphics 28
Getting Help 32
4. R Packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

An Overview of Packages 35
Listing Packages in Local Libraries 36
Loading Packages 38
Loading Packages on Windows and Linux 38
Loading Packages on Mac OS X 38
Exploring Package Repositories 39
Exploring Packages on the Web 40
Finding and Installing Packages Inside R 40
Custom Packages 43
Creating a Package Directory 43
Building the Package 45
Part II. The R Language
5. An Overview of the R Language .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Expressions 49
Objects 50
Symbols 50
Functions 50
Objects Are Copied in Assignment Statements 52
Everything in R Is an Object 52
Special Values 53
NA 53
Inf and -Inf 53
NaN 54
NULL 54
Coercion 54
The R Interpreter 55
Seeing How R Works 57
6. R Syntax .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

Constants 61
Numeric Vectors 61
Character Vectors 62
Symbols 63
Operators 64
Order of Operations 65
Assignments 67
Expressions 67
vi | Table of Contents
www.it-ebooks.info
Separating Expressions 67
Parentheses 68
Curly Braces 68
Control Structures 69
Conditional Statements 69
Loops 70
Accessing Data Structures 72
Data Structure Operators 73
Indexing by Integer Vector 73
Indexing by Logical Vector 76
Indexing by Name 76
R Code Style Standards 77
7. R Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Primitive Object Types 79
Vectors 82
Lists 83
Other Objects 84
Matrices 84
Arrays 84
Factors 85

Data Frames 87
Formulas 88
Time Series 89
Shingles 91
Dates and Times 91
Connections 92
Attributes 92
Class 95
8. Symbols and Environments .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Symbols 97
Working with Environments 98
The Global Environment 99
Environments and Functions 100
Working with the Call Stack 100
Evaluating Functions in Different Environments 101
Adding Objects to an Environment 103
Exceptions 104
Signaling Errors 104
Catching Errors 105
9. Functions .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
The Function Keyword 107
Arguments 107
Return Values 109
Table of Contents | vii
www.it-ebooks.info
Functions As Arguments 109
Anonymous Functions 110
Properties of Functions 111

Argument Order and Named Arguments 113
Side Effects 114
Changes to Other Environments 114
Input/Output 115
Graphics 115
10. Object-Oriented Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Overview of Object-Oriented Programming in R 118
Key Ideas 118
Implementation Example 119
Object-Oriented Programming in R: S4 Classes 125
Defining Classes 125
New Objects 126
Accessing Slots 126
Working with Objects 127
Creating Coercion Methods 127
Methods 128
Managing Methods 129
Basic Classes 130
More Help 130
Old-School OOP in R: S3 131
S3 Classes 131
S3 Methods 132
Using S3 Classes in S4 Classes 133
Finding Hidden S3 Methods 133
11. High-Performance R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Use Built-in Math Functions 135
Use Environments for Lookup Tables 136
Use a Database to Query Large Data Sets 136
Preallocate Memory 137
Monitor How Much Memory You Are Using 137

Monitoring Memory Usage 137
Increasing Memory Limits 138
Cleaning Up Objects 138
Functions for Big Data Sets 139
Parallel Computation with R 139
High-Performance R Binaries 140
Revolution R 140
Building Your Own 141
viii | Table of Contents
www.it-ebooks.info
Part III. Working with Data
12. Saving, Loading, and Editing Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Entering Data Within R 147
Entering Data Using R Commands 147
Using the Edit GUI 148
Saving and Loading R Objects 151
Saving Objects with save 151
Importing Data from External Files 152
Text Files 152
Other Software 161
Exporting Data 161
Importing Data from Databases 162
Export Then Import 162
Database Connection Packages 162
RODBC 163
DBI 173
TSDBI 178
13. Preparing Data .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Combining Data Sets 179

Pasting Together Data Structures 180
Merging Data by Common Fields 183
Transformations 185
Reassigning Variables 185
The Transform Function 185
Applying a Function to Each Element of an Object 186
Binning Data 189
Shingles 189
Cut 190
Combining Objects with a Grouping Variable 191
Subsets 191
Bracket Notation 192
subset Function 192
Random Sampling 193
Summarizing Functions 194
tapply, aggregate 194
Aggregating Tables with rowsum 197
Counting Values 198
Reshaping Data 200
Data Cleaning 205
Finding and Removing Duplicates 206
Sorting 206
Table of Contents | ix
www.it-ebooks.info
14. Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
An Overview of R Graphics 211
Scatter Plots 212
Plotting Time Series 218
Bar Charts 219
Pie Charts 223

Plotting Categorical Data 224
Three-Dimensional Data 229
Plotting Distributions 237
Box Plots 240
Graphics Devices 243
Customizing Charts 244
Common Arguments to Chart Functions 244
Graphical Parameters 244
Basic Graphics Functions 254
15. Lattice Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
History 263
An Overview of the Lattice Package 264
How Lattice Works 264
A Simple Example 264
Using Lattice Functions 266
Custom Panel Functions 268
High-Level Lattice Plotting Functions 268
Univariate Trellis Plots 269
Bivariate Trellis Plots 293
Trivariate Plots 301
Other Plots 306
Customizing Lattice Graphics 308
Common Arguments to Lattice Functions 308
trellis.skeleton 309
Controlling How Axes Are Drawn 310
Parameters 311
plot.trellis 315
strip.default 316
simpleKey 317
Low-Level Functions 318

Low-Level Graphics Functions 318
Panel Functions 318
Part IV. Statistics with R
16. Analyzing Data .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Summary Statistics 323
Correlation and Covariance 325
x | Table of Contents
www.it-ebooks.info
Principal Components Analysis 328
Factor Analysis 332
Bootstrap Resampling 333
17. Probability Distributions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
Normal Distribution 335
Common Distribution-Type Arguments 338
Distribution Function Families 338
18. Statistical Tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
Continuous Data 343
Normal Distribution-Based Tests 344
Distribution-Free Tests 357
Discrete Data 360
Proportion Tests 360
Binomial Tests 361
Tabular Data Tests 362
Distribution-Free Tabular Data Tests 368
19. Power Tests .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
Experimental Design Example 369
t-Test Design 370
Proportion Test Design 371

ANOVA Test Design 372
20. Regression Models .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
Example: A Simple Linear Model 373
Fitting a Model 375
Helper Functions for Specifying the Model 376
Getting Information About a Model 376
Refining the Model 382
Details About the lm Function 382
Assumptions of Least Squares Regression 384
Robust and Resistant Regression 386
Subset Selection and Shrinkage Methods 387
Stepwise Variable Selection 388
Ridge Regression 389
Lasso and Least Angle Regression 390
Principal Components Regression and Partial Least Squares
Regression 391
Nonlinear Models 392
Generalized Linear Models 392
Nonlinear Least Squares 395
Survival Models 396
Smoothing 401
Table of Contents | xi
www.it-ebooks.info
Splines 401
Fitting Polynomial Surfaces 403
Kernel Smoothing 404
Machine Learning Algorithms for Regression 405
Regression Tree Models 406
MARS 418

Neural Networks 423
Project Pursuit Regression 427
Generalized Additive Models 430
Support Vector Machines 432
21. Classification Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
Linear Classification Models 435
Logistic Regression 435
Linear Discriminant Analysis 440
Log-Linear Models 444
Machine Learning Algorithms for Classification 445
k Nearest Neighbors 445
Classification Tree Models 446
Neural Networks 450
SVMs 451
Random Forests 451
22. Machine Learning .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
Market Basket Analysis 453
Clustering 458
Distance Measures 458
Clustering Algorithms 459
23. Time Series Analysis .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
Autocorrelation Functions 463
Time Series Models 464
24. Bioconductor .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
An Example 469
Loading Raw Expression Data 470
Loading Data from GEO 474

Matching Phenotype Data 476
Analyzing Expression Data 477
Key Bioconductor Packages 481
Data Structures 485
eSet 485
AssayData 487
AnnotatedDataFrame 487
MIAME 488
xii | Table of Contents
www.it-ebooks.info
Other Classes Used by Bioconductor Packages 489
Where to Go Next 490
Resources Outside Bioconductor 490
Vignettes 490
Courses 491
Books 491
Appendix: R Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
Bibliography . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
Table of Contents | xiii
www.it-ebooks.info
www.it-ebooks.info
Preface
It’s been 10 years since I was first introduced to R. Back then, I was a young product
development manager at DoubleClick, a company that sells advertising software for
managing online ad sales. I was working on inventory prediction: estimating the
number of ad impressions that could be sold for a given search term, web page, or
demographic characteristic. I wanted to play with the data myself, but we couldn’t
afford a piece of expensive software like SAS or MATLAB. I looked around for a
little while, trying to find an open source statistics package, and stumbled on R. Back

then, R was a bit rough around the edges, and was missing a lot of the features it
has today (like fancy graphics and statistics functions). But R was intuitive and easy
to use; I was hooked. Since that time, I’ve used R to do many different things: esti-
mate credit risk, analyze baseball statistics, and look for Internet security threats.
I’ve learned a lot about data, and matured a lot as a data analyst.
R, too, has matured a great deal over the past 10 years. R is used at the world’s largest
technology companies (including Google, Microsoft, and Facebook), the largest
pharmaceutical companies (including Johnson & Johnson, Merck, and Pfizer), and
at hundreds of other companies. It’s used in statistics classes at universities around
the world and by statistics researchers to try new techniques and algorithms.
Why I Wrote This Book
This book is designed to be a concise guide to R. It’s not intended to be a book about
statistics or an exhaustive guide to R. In this book, I tried to show all the things that
R can do and to give examples showing how to do them. This book is designed to
be a good desktop reference.
I wrote this book because I like R. R is fun and intuitive in ways that other solutions
are not. You can do things in a few lines of R that could take hours of struggling in
a spreadsheet. Similarly, you can do things in a few lines of R that could take pages
of Java code (and hours of Java coding). There are some excellent books on R, but
xv
www.it-ebooks.info
I couldn’t find an inexpensive book that gave an overview of everything you could
do in R. I hope this book helps you use R.
When Should You Use R?
I think R is a great piece of software, but it isn’t the right tool for every problem.
Clearly, it would be ridiculous to write a video game in R, but it’s not even the best
tool for all data problems.
R is very good at plotting graphics, analyzing data, and fitting statistical models using
data that fits in the computer’s memory. It’s not as good at storing data in compli-
cated structures, efficiently querying data, or working with data that doesn’t fit in

the computer’s memory.
Typically, I use a tool like Perl to preprocess large files before using them in R. It’s
technically possible to use R for these problems (by reading files one line at a time
and using R’s regular expression support), but it’s pretty awkward. To hold large
data files, I usually use a database like MySQL, PostgreSQL, SQLite, or Oracle (when
someone else is paying the license fee).
R License Terms
R is an open source software package, licensed under the GNU General Public Li-
cense (GPL).
*
This means that you can install R for free on most desktop and server
machines. (Comparable commercial software packages sell for hundreds or thou-
sands of dollars.) If R were a poor substitute for the commercial software packages,
this might have limited appeal. However, I think R is better than its commercial
counterparts in many respects.
Capability
You can find implementations for hundreds (maybe thousands) of statistical
and data analysis algorithms in R. No commercial package offers anywhere near
the scope of functionality available through the Comprehensive R Archive Net-
work (CRAN).
Community
There are now hundreds of thousands (if not millions) of R users worldwide.
By using R, you can be sure that you’re using the same software that your col-
leagues are using.
* There is some controversy about GPL licensed software, and what it means to you as a corporate
user. Some users are afraid that any code that they write in R will be bound by the GPL. If you are
not writing extensions to R, you do not need to worry about this issue. R is an interpreter, and
the GPL does not apply to a program just because it is executed on a GPL licensed interpreter.
If you are writing extensions to R, they might be bound by the GPL. For more information, see
the GNU foundation’s FAQ on the GPL: However, for a

definite answer, see an attorney. If you are worried about a specific application, see an attorney.
xvi | Preface
www.it-ebooks.info
Performance
R’s performance is comparable, or superior, to most commercial analysis pack-
ages. R requires you to load data sets into memory before processing. If you
have enough memory to hold the data, R can run very quickly. Luckily, memory
is cheap. You can buy 32 GB of server RAM for less than the cost of a single
desktop license of a comparable piece of commercial statistical software.
Examples
I have tried to provide many unique examples in this book, illustrating how to use
different functions in R. I deliberately decided to use new and original examples,
and not to rely on the data sets included with R. When I’m trying to solve a problem,
I try to find examples of similar solutions. There are already good examples for many
functions in the R help files. I tried to provide new examples to help users figure out
how to solve their problems quickly. The examples are available by from O’Reilly
Media at />Additionally, the example data is also available through CRAN as an R package. To
install the nutshell package, type the following command on the R console:
install.packages("nutshell")
How This Book Is Organized
I’ve broken this book into five parts:
• Part I, R Basics, covers the basics of getting and running R. It’s designed to help
get you up and running if you’re a new user, including a short tour of the many
things you can do with R.
• Part II, The R Language, discusses the R language in detail. This section picks
up where the first section leaves off, describing the R language in detail.
• Part III, Working with Data, covers data processing in R: loading data into R,
transforming data, summarizing data, and plotting data. Summary statistics and
charts are an important part of statistical analysis, but many laypeople don’t
think of these things as statistical analysis. So, I cover these topics without using

too much math in order to keep them accessible.
• Part IV, Statistics with R, covers statistical tests and models in R.
• Finally, I included an Appendix describing functions and data sets included
with the base distribution of R.
If you are new to R, install R and start with Chapter 3. Next, take a look at Chap-
ter 5 to learn some of the rules of the R language. If you plan to use R for plotting,
statistical tests, or statistical models, take a look at the appropriate chapter. Make
sure you look at the first few sections of the chapter, because these provide an over-
view of how all the related functions work. (For example, don’t skip straight to
“Random forests for regression” on page 416 without reading “Example: A Simple
Linear Model” on page 373.)
Preface | xvii
www.it-ebooks.info
Conventions Used in This Book
The following typographical conventions are used in this book:
Italic
Indicates new terms, URLs, email addresses, filenames, and file extensions.
Constant width
Used
for program listings, as well as within paragraphs to refer to program
elements such as variable or function names, databases, data types, environ-
ment variables, statements, and keywords.
Constant width bold
Shows commands or other text that should be typed literally by the user.
Constant width italic
Shows text that should be replaced with user-supplied values or by values de-
termined by context.
This icon indicates a warning or caution.
Using Code Examples
This

book is here to help you get your job done. In general, you may use the code
in this book in your programs and documentation. You do not need to contact us
for permission unless you’re reproducing a significant portion of the code. For ex-
ample, writing a program that uses several chunks of code from this book does not
require permission. Selling or distributing a CD-ROM of examples from O’Reilly
books does require permission. Answering a question by citing this book and quot-
ing example code does not require permission. Incorporating a significant amount
of example code from this book into your product’s documentation does require
permission.
We appreciate, but do not require, attribution. An attribution usually includes the
title, author, publisher, and ISBN. For example: “R in a Nutshell by Joseph Adler.
Copyright 2010 O’Reilly Media, Inc., 978-0-596-80170-0.”
If you feel your use of code examples falls outside fair use or the permission given
above, feel free to contact us at
How to Contact Us
Please address comments and questions concerning this book to the publisher:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
800-998-9938 (in the United States or Canada)
xviii | Preface
www.it-ebooks.info
707-829-0515 (international or local)
707 829-0104 (fax)
We have a web page for this book, where we list errata, examples, and any additional
information. You can access this page at:
/>To comment or ask technical questions about this book, send email to:

For more information about our books, conferences, Resource Centers, and the
O’Reilly Network, see our website at:


Safari® Books Online
Safari® Books Online is an on-demand digital library that lets you
easily search over 7,500 technology and creative reference books and
videos to find the answers you need quickly.
With a subscription, you can read any page and watch any video from our library
online. Read books on your cell phone and mobile devices. Access new titles before
they are available for print, and get exclusive access to manuscripts in development
and post feedback for the authors. Copy and paste code samples, organize your
favorites, download chapters, bookmark key sections, create notes, print out pages,
and benefit from tons of other time-saving features.
O’Reilly Media has uploaded this book to the Safari® Books Online service. To have
full digital access to this book and others on similar topics from O’Reilly and other
publishers, sign up for free at .
Acknowledgments
Many people helped support the writing of this book. First, I’d like to thank all of
my technical reviewers. These folks check to make sure the examples work, look for
technical and mathematical errors, and make many suggestions on writing quality.
It’s not possible to write a quality technical book without quality technical reviewers:
Peter Goldstein, Aaron Mandel, and David Hoaglin are the reason that this book
reads as well as it does.
I’d like to thank Randall Munroe, author of the xkcd comic. He kindly allowed us
to reprint two of his (excellent) comics in this book. You can find his comics (and
assorted merchandise) at .
Additionally, I’d like to thank everyone who provided or suggested example data.
Aaron Schatz of Football Outsiders () provided me
with play-by-play data from the 2005 NFL season (the field goal data is from its
database). Sandor Szalma of Johnson & Johnson suggested GSE2034 as an example
of gene expression data.
Preface | xix

www.it-ebooks.info
Finally, I’d like to thank my wife, Sarah, and my daughter, Zoe. Writing a book takes
a lot of time, and they were very understanding when I needed to work. They were
also very understanding when I dragged them to the San Diego Zoo to look at the
harpy eagles.
xx | Preface
www.it-ebooks.info
I
R Basics
This part of the book covers the basics of R: how to get R, how to install it, and how
to use packages in R. It also includes a quick tutorial on R and an overview of the
features of R.
www.it-ebooks.info
www.it-ebooks.info
1
Getting and Installing R
This chapter explains how to get R and how to install it on your computer.
R Versions
Today, R is maintained by a team of developers around the world. Usually, there is
an official release of R twice a year, in April and in October. I used version 2.9.2 in
this book. (Actually, it was 2.8.1 when I started writing the book and was updated
three times while I was writing. I installed the updates, but they didn’t change very
much content.)
R hasn’t changed that much in the past few years: usually there are some bug fixes,
some optimizations, and a few new functions in each release. There have been some
changes to the language, but most of these are related to somewhat obscure features
that won’t affect most users. (For example, the type of NA values in incompletely
initialized arrays was changed in R 2.5.) Don’t worry about using the exact version
of R that I used in this book; any results you get should be very similar to the results
shown in this book. If there are any changes to R that affect the examples in this

book, I’ll try to add them to the official errata online.
Additionally, I’ve given some example filenames below for the current release. The
filenames usually have the release number in them. So, don’t worry if you’re reading
this book and don’t see a link for R-2.9.1-win32.exe, but see a link for R-3.0.1-
win32.exe instead; just use the latest version, and you’ll be fine.
Getting and Installing Interactive R Binaries
R has been ported to every major desktop computing platform. Because R is open
source, developers have ported R to many different platforms. Additionally, R is
available with no license fee.
If you’re using a Mac or Windows machine, you’ll probably want to download the
files yourself and then run the installers. (If you’re using Linux, I recommend using
3
www.it-ebooks.info

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×