100% found this document useful (1 vote)
11 views

PDF Beginning Data Science in R 4: Data Analysis, Visualization, and Modelling for the Data Scientist 2nd Edition Thomas Mailund download

The document provides information about the ebook 'Beginning Data Science in R 4: Data Analysis, Visualization, and Modelling for the Data Scientist' by Thomas Mailund, available for download at ebookmeta.com. It includes various chapters covering R programming, data manipulation, visualization, and supervised learning. Additional recommended digital products related to data science and programming are also listed.

Uploaded by

charladeki
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
11 views

PDF Beginning Data Science in R 4: Data Analysis, Visualization, and Modelling for the Data Scientist 2nd Edition Thomas Mailund download

The document provides information about the ebook 'Beginning Data Science in R 4: Data Analysis, Visualization, and Modelling for the Data Scientist' by Thomas Mailund, available for download at ebookmeta.com. It includes various chapters covering R programming, data manipulation, visualization, and supervised learning. Additional recommended digital products related to data science and programming are also listed.

Uploaded by

charladeki
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 40

Get the full ebook with Bonus Features for a Better Reading Experience on ebookmeta.

com

Beginning Data Science in R 4: Data Analysis,


Visualization, and Modelling for the Data
Scientist 2nd Edition Thomas Mailund

https://ebookmeta.com/product/beginning-data-science-
in-r-4-data-analysis-visualization-and-modelling-for-the-
data-scientist-2nd-edition-thomas-mailund/

OR CLICK HERE

DOWLOAD NOW

Download more ebook instantly today at https://ebookmeta.com


Recommended digital products (PDF, EPUB, MOBI) that
you can download immediately if you are interested.

Functional Programming in R 4: Advanced Statistical


Programming for Data Science, Analysis, and Finance -
Second Edition Thomas Mailund
https://ebookmeta.com/product/functional-programming-in-r-4-advanced-
statistical-programming-for-data-science-analysis-and-finance-second-
edition-thomas-mailund/
ebookmeta.com

Functional Data Structures in R 1st Edition Thomas Mailund

https://ebookmeta.com/product/functional-data-structures-in-r-1st-
edition-thomas-mailund/

ebookmeta.com

Data Architecture A Primer for the Data Scientist A Primer


for the Data Scientist 2nd Edition W.H. Inmon

https://ebookmeta.com/product/data-architecture-a-primer-for-the-data-
scientist-a-primer-for-the-data-scientist-2nd-edition-w-h-inmon/

ebookmeta.com

Construction 4 0 Advanced Technology Tools and Materials


for the Digital Transformation of the Construction
Industry Woodhead Publishing Series in Civil and
Structural Engineering 1st Edition Casini
https://ebookmeta.com/product/construction-4-0-advanced-technology-
tools-and-materials-for-the-digital-transformation-of-the-
construction-industry-woodhead-publishing-series-in-civil-and-
structural-engineering-1st-edition-casini/
ebookmeta.com
Solar Dragons Need Love Too 2 a harem lit slice of life
1st Edition Virgil Knightley

https://ebookmeta.com/product/solar-dragons-need-love-too-2-a-harem-
lit-slice-of-life-1st-edition-virgil-knightley/

ebookmeta.com

Migration Health and Inequalities Critical Activist


Research across Ecuadorean Borders 1st Edition Roberta
Villalón
https://ebookmeta.com/product/migration-health-and-inequalities-
critical-activist-research-across-ecuadorean-borders-1st-edition-
roberta-villalon/
ebookmeta.com

Embedded System Design with ARM Cortex-M Microcontrollers:


Applications with C, C++ and MicroPython Cem Ünsalan

https://ebookmeta.com/product/embedded-system-design-with-arm-cortex-
m-microcontrollers-applications-with-c-c-and-micropython-cem-unsalan/

ebookmeta.com

Data Security: Technical And Organizational Protection


Measures Against Data Loss And Computer Crime 1st Edition
Thomas H. Lenhard
https://ebookmeta.com/product/data-security-technical-and-
organizational-protection-measures-against-data-loss-and-computer-
crime-1st-edition-thomas-h-lenhard/
ebookmeta.com

Peer review In An Era Of Evaluation: Understanding The


Practice Of Gatekeeping In Academia 1st Edition Eva
Forsberg
https://ebookmeta.com/product/peer-review-in-an-era-of-evaluation-
understanding-the-practice-of-gatekeeping-in-academia-1st-edition-eva-
forsberg/
ebookmeta.com
Underdogs Social Deviance and Queer Theory 1st Edition
Heather Love

https://ebookmeta.com/product/underdogs-social-deviance-and-queer-
theory-1st-edition-heather-love/

ebookmeta.com
Beginning Data Science
in R 4
Data Analysis, Visualization,
and Modelling for the Data Scientist
Second Edition

Thomas Mailund
Beginning Data Science in R 4: Data Analysis, Visualization, and Modelling for the
Data Scientist

Thomas Mailund
Aarhus, Denmark

ISBN-13 (pbk): 978-1-4842-8154-3 ISBN-13 (electronic): 978-1-4842-8155-0


https://doi.org/10.1007/978-1-4842-8155-0

Copyright © 2022 by Thomas Mailund


This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the
material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation,
broadcasting, reproduction on microfilms or in any other physical way, and transmission or information
storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now
known or hereafter developed.
Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with
every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an
editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the
trademark.
The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not
identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to
proprietary rights.
While the advice and information in this book are believed to be true and accurate at the date of publication,
neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or
omissions that may be made. The publisher makes no warranty, express or implied, with respect to the
material contained herein.
Managing Director, Apress Media LLC: Welmoed Spahr
Acquisitions Editor: Steve Anglin
Development Editor: James Markham
Coordinating Editor: Mark Powers
Cover designed by eStudioCalamar
Cover image by Pixabay (www.pixabay.com)
Distributed to the book trade worldwide by Apress Media, LLC, 1 New York Plaza, New York, NY 10004,
U.S.A. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail orders-ny@springer-sbm.com, or visit www.
springeronline.com. Apress Media, LLC is a California LLC and the sole member (owner) is Springer Science
+ Business Media Finance Inc (SSBM Finance Inc). SSBM Finance Inc is a Delaware corporation.
For information on translations, please e-mail booktranslations@springernature.com; for reprint,
paperback, or audio rights, please e-mail bookpermissions@springernature.com.
Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook versions and
licenses are also available for most titles. For more information, reference our Print and eBook Bulk Sales
web page at http://www.apress.com/bulk-sales.
Any source code or other supplementary material referenced by the author in this book is available
to readers on GitHub (https://github.com/Apress). For more detailed information, please visit http://www.
apress.com/source-code.
Printed on acid-free paper
Table of Contents
About the Author�����������������������������������������������������������������������������������������������������xv

About the Technical Reviewer�������������������������������������������������������������������������������xvii


Acknowledgments��������������������������������������������������������������������������������������������������xix

Introduction������������������������������������������������������������������������������������������������������������xxi

Chapter 1: Introduction to R Programming�������������������������������������������������������������� 1


Basic Interaction with R���������������������������������������������������������������������������������������������������������������� 1
Using R As a Calculator����������������������������������������������������������������������������������������������������������������� 3
Simple Expressions����������������������������������������������������������������������������������������������������������������� 4
Assignments���������������������������������������������������������������������������������������������������������������������������� 6
Indexing Vectors���������������������������������������������������������������������������������������������������������������������� 9
Vectorized Expressions���������������������������������������������������������������������������������������������������������� 11
Comments����������������������������������������������������������������������������������������������������������������������������������� 13
Functions������������������������������������������������������������������������������������������������������������������������������������ 13
Getting Documentation for Functions������������������������������������������������������������������������������������ 14
Writing Your Own Functions�������������������������������������������������������������������������������������������������� 16
Summarizing and Vector Functions��������������������������������������������������������������������������������������� 17
A Quick Look at Control Flow������������������������������������������������������������������������������������������������ 20
Factors���������������������������������������������������������������������������������������������������������������������������������������� 26
Data Frames�������������������������������������������������������������������������������������������������������������������������������� 32
Using R Packages����������������������������������������������������������������������������������������������������������������������� 36
Dealing with Missing Values������������������������������������������������������������������������������������������������������� 37
Data Pipelines����������������������������������������������������������������������������������������������������������������������������� 38
Writing Pipelines of Function Calls���������������������������������������������������������������������������������������� 39
Writing Functions That Work with Pipelines�������������������������������������������������������������������������� 41
The Magical “.” Argument������������������������������������������������������������������������������������������������������ 42
iii
Table of Contents

Other Pipeline Operations������������������������������������������������������������������������������������������������������ 47


Coding and Naming Conventions������������������������������������������������������������������������������������������� 49
Exercises������������������������������������������������������������������������������������������������������������������������������������� 50
Mean of Positive Values��������������������������������������������������������������������������������������������������������� 50
Root Mean Square Error�������������������������������������������������������������������������������������������������������� 50

Chapter 2: Reproducible Analysis�������������������������������������������������������������������������� 51


Literate Programming and Integration of Workflow and Documentation������������������������������������ 52
Creating an R Markdown/knitr Document in RStudio����������������������������������������������������������������� 53
The YAML Language�������������������������������������������������������������������������������������������������������������������� 57
The Markdown Language����������������������������������������������������������������������������������������������������������� 59
Formatting Text���������������������������������������������������������������������������������������������������������������������� 60
Cross-Referencing����������������������������������������������������������������������������������������������������������������� 64
Bibliographies������������������������������������������������������������������������������������������������������������������������ 65
Controlling the Output (Templates/Stylesheets)�������������������������������������������������������������������� 66
Running R Code in Markdown Documents���������������������������������������������������������������������������������� 66
Using chunks when analyzing data (without compiling documents)������������������������������������ 69
Caching Results��������������������������������������������������������������������������������������������������������������������� 70
Displaying Data��������������������������������������������������������������������������������������������������������������������� 71
Exercises������������������������������������������������������������������������������������������������������������������������������������� 72
Create an R Markdown Document����������������������������������������������������������������������������������������� 72
Different Output��������������������������������������������������������������������������������������������������������������������� 72
Caching���������������������������������������������������������������������������������������������������������������������������������� 72

Chapter 3: Data Manipulation��������������������������������������������������������������������������������� 73


Data Already in R������������������������������������������������������������������������������������������������������������������������� 73
Quickly Reviewing Data�������������������������������������������������������������������������������������������������������������� 75
Reading Data������������������������������������������������������������������������������������������������������������������������������� 77
Examples of Reading and Formatting Data Sets������������������������������������������������������������������������� 79
Breast Cancer Data set���������������������������������������������������������������������������������������������������������� 79
Boston Housing Data Set������������������������������������������������������������������������������������������������������� 87
The readr Package���������������������������������������������������������������������������������������������������������������� 90

iv
Table of Contents

Manipulating Data with dplyr������������������������������������������������������������������������������������������������������ 92


Some Useful dplyr Functions������������������������������������������������������������������������������������������������� 94
Breast Cancer Data Manipulation���������������������������������������������������������������������������������������� 106
Tidying Data with tidyr��������������������������������������������������������������������������������������������������������� 110
Exercises����������������������������������������������������������������������������������������������������������������������������������� 118
Importing Data��������������������������������������������������������������������������������������������������������������������� 118
Using dplyr�������������������������������������������������������������������������������������������������������������������������� 119
Using tidyr��������������������������������������������������������������������������������������������������������������������������� 119

Chapter 4: Visualizing Data���������������������������������������������������������������������������������� 121


Basic Graphics�������������������������������������������������������������������������������������������������������������������������� 121
The Grammar of Graphics and the ggplot2 Package���������������������������������������������������������������� 128
Using qplot()������������������������������������������������������������������������������������������������������������������������ 129
Using Geometries���������������������������������������������������������������������������������������������������������������� 133
Facets��������������������������������������������������������������������������������������������������������������������������������������� 141
Scaling�������������������������������������������������������������������������������������������������������������������������������������� 145
Themes and Other Graphics Transformations��������������������������������������������������������������������� 151
Figures with Multiple Plots������������������������������������������������������������������������������������������������������� 156
Exercises����������������������������������������������������������������������������������������������������������������������������������� 160

Chapter 5: Working with Large Data Sets������������������������������������������������������������� 161


Subsample Your Data Before You Analyze the Full Data Set����������������������������������������������������� 162
Running Out of Memory During an Analysis����������������������������������������������������������������������������� 164
Too Large to Plot����������������������������������������������������������������������������������������������������������������������� 166
Too Slow to Analyze������������������������������������������������������������������������������������������������������������������ 171
Too Large to Load���������������������������������������������������������������������������������������������������������������������� 173
Exercises����������������������������������������������������������������������������������������������������������������������������������� 177
Subsampling������������������������������������������������������������������������������������������������������������������������ 177
Hex and 2D Density Plots���������������������������������������������������������������������������������������������������� 177

Chapter 6: Supervised Learning��������������������������������������������������������������������������� 179


Machine Learning��������������������������������������������������������������������������������������������������������������������� 179
Supervised Learning����������������������������������������������������������������������������������������������������������������� 180

v
Table of Contents

Regression vs. Classification����������������������������������������������������������������������������������������������� 181


Inference vs. Prediction������������������������������������������������������������������������������������������������������� 182
Specifying Models��������������������������������������������������������������������������������������������������������������������� 183
Linear Regression���������������������������������������������������������������������������������������������������������������� 183
Logistic Regression (Classification, Really)������������������������������������������������������������������������� 189
Model Matrices and Formula����������������������������������������������������������������������������������������������� 194
Validating Models���������������������������������������������������������������������������������������������������������������������� 204
Evaluating Regression Models�������������������������������������������������������������������������������������������� 206
Evaluating Classification Models����������������������������������������������������������������������������������������� 209
Confusion Matrix����������������������������������������������������������������������������������������������������������������� 210
Accuracy������������������������������������������������������������������������������������������������������������������������������ 213
Sensitivity and Specificity��������������������������������������������������������������������������������������������������� 215
Other Measures������������������������������������������������������������������������������������������������������������������� 216
More Than Two Classes������������������������������������������������������������������������������������������������������� 218
Sampling Approaches��������������������������������������������������������������������������������������������������������������� 218
Random Permutations of Your Data������������������������������������������������������������������������������������� 219
Cross-Validation������������������������������������������������������������������������������������������������������������������ 223
Selecting Random Training and Testing Data���������������������������������������������������������������������� 227
Examples of Supervised Learning Packages���������������������������������������������������������������������������� 229
Decision Trees��������������������������������������������������������������������������������������������������������������������� 230
Random Forests������������������������������������������������������������������������������������������������������������������ 232
Neural Networks������������������������������������������������������������������������������������������������������������������ 233
Support Vector Machines���������������������������������������������������������������������������������������������������� 235
Naive Bayes������������������������������������������������������������������������������������������������������������������������������ 235
Exercises����������������������������������������������������������������������������������������������������������������������������������� 236
Fitting Polynomials�������������������������������������������������������������������������������������������������������������� 236
Evaluating Different Classification Measures���������������������������������������������������������������������� 236
Breast Cancer Classification������������������������������������������������������������������������������������������������ 237
Leave-One-Out Cross-Validation (Slightly More Difficult)���������������������������������������������������� 237
Decision Trees��������������������������������������������������������������������������������������������������������������������� 237
Random Forests������������������������������������������������������������������������������������������������������������������ 237

vi
Table of Contents

Neural Networks������������������������������������������������������������������������������������������������������������������ 238


Support Vector Machines���������������������������������������������������������������������������������������������������� 238
Compare Classification Algorithms�������������������������������������������������������������������������������������� 238

Chapter 7: Unsupervised Learning����������������������������������������������������������������������� 239


Dimensionality Reduction��������������������������������������������������������������������������������������������������������� 239
Principal Component Analysis��������������������������������������������������������������������������������������������� 240
Multidimensional Scaling���������������������������������������������������������������������������������������������������� 250
Clustering���������������������������������������������������������������������������������������������������������������������������������� 255
k-means Clustering������������������������������������������������������������������������������������������������������������� 255
Hierarchical Clustering�������������������������������������������������������������������������������������������������������� 263
Association Rules���������������������������������������������������������������������������������������������������������������������� 267
Exercises����������������������������������������������������������������������������������������������������������������������������������� 273
Dealing with Missing Data in the HouseVotes84 Data��������������������������������������������������������� 273
k-means������������������������������������������������������������������������������������������������������������������������������ 274

Chapter 8: Project 1: Hitting the Bottle����������������������������������������������������������������� 275


Importing Data�������������������������������������������������������������������������������������������������������������������������� 275
Exploring the Data��������������������������������������������������������������������������������������������������������������������� 276
Distribution of Quality Scores���������������������������������������������������������������������������������������������� 276
Is This Wine Red or White?�������������������������������������������������������������������������������������������������� 277
Fitting Models��������������������������������������������������������������������������������������������������������������������������� 282
Exercises����������������������������������������������������������������������������������������������������������������������������������� 285
Exploring Other Formulas���������������������������������������������������������������������������������������������������� 285
Exploring Different Models�������������������������������������������������������������������������������������������������� 285
Analyzing Your Own Data Set���������������������������������������������������������������������������������������������� 285

Chapter 9: Deeper into R Programming���������������������������������������������������������������� 287


Expressions������������������������������������������������������������������������������������������������������������������������������� 287
Arithmetic Expressions�������������������������������������������������������������������������������������������������������� 287
Boolean Expressions����������������������������������������������������������������������������������������������������������� 289
Basic Data Types����������������������������������������������������������������������������������������������������������������������� 290

vii
Table of Contents

Numeric������������������������������������������������������������������������������������������������������������������������������� 291
Integer��������������������������������������������������������������������������������������������������������������������������������� 291
Complex������������������������������������������������������������������������������������������������������������������������������� 292
Logical��������������������������������������������������������������������������������������������������������������������������������� 292
Character����������������������������������������������������������������������������������������������������������������������������� 293
Data Structures������������������������������������������������������������������������������������������������������������������������� 294
Vectors��������������������������������������������������������������������������������������������������������������������������������� 294
Matrix���������������������������������������������������������������������������������������������������������������������������������� 296
Lists������������������������������������������������������������������������������������������������������������������������������������� 298
Indexing������������������������������������������������������������������������������������������������������������������������������� 300
Named Values���������������������������������������������������������������������������������������������������������������������� 304
Factors��������������������������������������������������������������������������������������������������������������������������������� 305
Formulas����������������������������������������������������������������������������������������������������������������������������� 305
Control Structures��������������������������������������������������������������������������������������������������������������������� 306
Selection Statements���������������������������������������������������������������������������������������������������������� 306
Loops����������������������������������������������������������������������������������������������������������������������������������� 307
Functions���������������������������������������������������������������������������������������������������������������������������������� 311
Named Arguments��������������������������������������������������������������������������������������������������������������� 312
Default Parameters�������������������������������������������������������������������������������������������������������������� 313
Return Values���������������������������������������������������������������������������������������������������������������������� 314
Lazy Evaluation�������������������������������������������������������������������������������������������������������������������� 315
Scoping�������������������������������������������������������������������������������������������������������������������������������� 317
Function Names Are Different from Variable Names����������������������������������������������������������� 322
Recursive Functions������������������������������������������������������������������������������������������������������������������ 322
Exercises����������������������������������������������������������������������������������������������������������������������������������� 325
Fibonacci Numbers�������������������������������������������������������������������������������������������������������������� 325
Outer Product���������������������������������������������������������������������������������������������������������������������� 325
Linear Time Merge��������������������������������������������������������������������������������������������������������������� 325
Binary Search���������������������������������������������������������������������������������������������������������������������� 326
More Sorting������������������������������������������������������������������������������������������������������������������������ 326
Selecting the k Smallest Element���������������������������������������������������������������������������������������� 327

viii
Table of Contents

Chapter 10: Working with Vectors and Lists�������������������������������������������������������� 329


Working with Vectors and Vectorizing Functions���������������������������������������������������������������������� 329
ifelse������������������������������������������������������������������������������������������������������������������������������������ 332
Vectorizing Functions���������������������������������������������������������������������������������������������������������� 332
The apply Family����������������������������������������������������������������������������������������������������������������� 335
apply������������������������������������������������������������������������������������������������������������������������������������ 336
Nothing Good, It Would Seem���������������������������������������������������������������������������������������������� 339
lapply����������������������������������������������������������������������������������������������������������������������������������� 340
sapply and vapply���������������������������������������������������������������������������������������������������������������� 342
Advanced Functions������������������������������������������������������������������������������������������������������������������ 342
Special Names��������������������������������������������������������������������������������������������������������������������� 342
Infix Operators��������������������������������������������������������������������������������������������������������������������� 343
Replacement Functions������������������������������������������������������������������������������������������������������� 344
How Mutable Is Data Anyway?�������������������������������������������������������������������������������������������������� 347
Exercises����������������������������������������������������������������������������������������������������������������������������������� 348
between������������������������������������������������������������������������������������������������������������������������������� 348
rmq�������������������������������������������������������������������������������������������������������������������������������������� 348

Chapter 11: Functional Programming������������������������������������������������������������������ 349


Anonymous Functions��������������������������������������������������������������������������������������������������������������� 349
Higher-Order Functions������������������������������������������������������������������������������������������������������������� 351
Functions Taking Functions As Arguments�������������������������������������������������������������������������� 351
Functions Returning Functions (and Closures)�������������������������������������������������������������������� 352
Filter, Map, and Reduce������������������������������������������������������������������������������������������������������������� 357
Functional Programming with purrr������������������������������������������������������������������������������������������ 360
Functions As Both Input and Output������������������������������������������������������������������������������������������ 363
Ellipsis Parameters…���������������������������������������������������������������������������������������������������������� 368
Exercises����������������������������������������������������������������������������������������������������������������������������������� 370
apply_if�������������������������������������������������������������������������������������������������������������������������������� 370
power���������������������������������������������������������������������������������������������������������������������������������� 370
Row and Column Sums������������������������������������������������������������������������������������������������������� 370
Factorial Again…���������������������������������������������������������������������������������������������������������������� 370

ix
Table of Contents

Function Composition���������������������������������������������������������������������������������������������������������� 371


Implement This Operator����������������������������������������������������������������������������������������������������� 371

Chapter 12: Object-Oriented Programming���������������������������������������������������������� 373


Immutable Objects and Polymorphic Functions������������������������������������������������������������������������ 373
Data Structures������������������������������������������������������������������������������������������������������������������������� 374
Example: Bayesian Linear Model Fitting������������������������������������������������������������������������������ 374
Classes�������������������������������������������������������������������������������������������������������������������������������������� 376
Polymorphic Functions�������������������������������������������������������������������������������������������������������������� 379
Defining Your Own Polymorphic Functions�������������������������������������������������������������������������� 380
Class Hierarchies���������������������������������������������������������������������������������������������������������������������� 382
Specialization As Interface�������������������������������������������������������������������������������������������������� 383
Specialization in Implementations�������������������������������������������������������������������������������������� 384
Exercises����������������������������������������������������������������������������������������������������������������������������������� 388
Shapes��������������������������������������������������������������������������������������������������������������������������������� 388
Polynomials������������������������������������������������������������������������������������������������������������������������� 389

Chapter 13: Building an R Package���������������������������������������������������������������������� 391


Creating an R Package�������������������������������������������������������������������������������������������������������������� 391
Package Names������������������������������������������������������������������������������������������������������������������� 392
The Structure of an R Package�������������������������������������������������������������������������������������������� 392
.Rbuildignore����������������������������������������������������������������������������������������������������������������������� 393
Description�������������������������������������������������������������������������������������������������������������������������������� 393
Title�������������������������������������������������������������������������������������������������������������������������������������� 394
Version��������������������������������������������������������������������������������������������������������������������������������� 394
Description�������������������������������������������������������������������������������������������������������������������������� 395
Author and Maintainer��������������������������������������������������������������������������������������������������������� 395
License�������������������������������������������������������������������������������������������������������������������������������� 396
Type, Date, LazyData������������������������������������������������������������������������������������������������������������ 396
URL and BugReports������������������������������������������������������������������������������������������������������������ 396
Dependencies���������������������������������������������������������������������������������������������������������������������� 396
Using an Imported Package������������������������������������������������������������������������������������������������� 397
Using a Suggested Package������������������������������������������������������������������������������������������������ 398
x
Table of Contents

NAMESPACE������������������������������������������������������������������������������������������������������������������������������ 399
R/ and man/������������������������������������������������������������������������������������������������������������������������� 400
Checking the Package�������������������������������������������������������������������������������������������������������������� 400
Roxygen������������������������������������������������������������������������������������������������������������������������������������ 401
Documenting Functions������������������������������������������������������������������������������������������������������� 401
Import and Export���������������������������������������������������������������������������������������������������������������� 402
Package Scope vs. Global Scope����������������������������������������������������������������������������������������� 404
Internal Functions���������������������������������������������������������������������������������������������������������������� 404
File Load Order�������������������������������������������������������������������������������������������������������������������� 404
Adding Data to Your Package���������������������������������������������������������������������������������������������������� 405
NULL������������������������������������������������������������������������������������������������������������������������������������ 406
Building an R Package�������������������������������������������������������������������������������������������������������������� 407
Exercises����������������������������������������������������������������������������������������������������������������������������������� 407

Chapter 14: Testing and Package Checking��������������������������������������������������������� 409


Unit Testing������������������������������������������������������������������������������������������������������������������������������� 409
Automating Testing�������������������������������������������������������������������������������������������������������������� 411
Using testthat���������������������������������������������������������������������������������������������������������������������������� 412
Writing Good Tests��������������������������������������������������������������������������������������������������������������� 414
Using Random Numbers in Tests����������������������������������������������������������������������������������������� 415
Testing Random Results������������������������������������������������������������������������������������������������������ 416
Checking a Package for Consistency���������������������������������������������������������������������������������������� 417
Exercise������������������������������������������������������������������������������������������������������������������������������������ 417

Chapter 15: Version Control���������������������������������������������������������������������������������� 419


Version Control and Repositories���������������������������������������������������������������������������������������������� 419
Using Git in RStudio������������������������������������������������������������������������������������������������������������������ 420
Installing Git������������������������������������������������������������������������������������������������������������������������� 421
Making Changes to Files, Staging Files, and Committing Changes������������������������������������� 422
Adding Git to an Existing Project����������������������������������������������������������������������������������������� 424
Bare Repositories and Cloning Repositories����������������������������������������������������������������������� 425
Pushing Local Changes and Fetching and Pulling Remote Changes����������������������������������� 426
Handling Conflicts��������������������������������������������������������������������������������������������������������������� 428
xi
Table of Contents

Working with Branches������������������������������������������������������������������������������������������������������� 429


Typical Workflows Involve Lots of Branches������������������������������������������������������������������������ 432
Pushing Branches to the Global Repository������������������������������������������������������������������������ 433
GitHub��������������������������������������������������������������������������������������������������������������������������������������� 434
Moving an Existing Repository to GitHub���������������������������������������������������������������������������� 436
Installing Packages from GitHub����������������������������������������������������������������������������������������� 437
Collaborating on GitHub������������������������������������������������������������������������������������������������������������ 437
Pull Requests����������������������������������������������������������������������������������������������������������������������� 438
Forking Repositories Instead of Cloning������������������������������������������������������������������������������ 438
Exercises����������������������������������������������������������������������������������������������������������������������������������� 440

Chapter 16: Profiling and Optimizing������������������������������������������������������������������� 441


Profiling������������������������������������������������������������������������������������������������������������������������������������� 441
A Graph-Flow Algorithm������������������������������������������������������������������������������������������������������ 442
Speeding Up Your Code������������������������������������������������������������������������������������������������������������� 456
Parallel Execution��������������������������������������������������������������������������������������������������������������������� 461
Switching to C++���������������������������������������������������������������������������������������������������������������������� 466
Exercises����������������������������������������������������������������������������������������������������������������������������������� 469

Chapter 17: Project 2: Bayesian Linear Regression���������������������������������������������� 471


Bayesian Linear Regression������������������������������������������������������������������������������������������������������ 471
Exercises: Priors and Posteriors������������������������������������������������������������������������������������������ 473
Predicting Target Variables for New Predictor Values���������������������������������������������������������� 476
Formulas and Their Model Matrix��������������������������������������������������������������������������������������������� 478
Working with Model Matrices in R�������������������������������������������������������������������������������������� 480
Exercises����������������������������������������������������������������������������������������������������������������������������� 485
Model Matrices Without Response Variables����������������������������������������������������������������������� 485
Exercises����������������������������������������������������������������������������������������������������������������������������� 487
Interface to a blm Class������������������������������������������������������������������������������������������������������������ 487
Constructor�������������������������������������������������������������������������������������������������������������������������� 488
Updating Distributions: An Example Interface��������������������������������������������������������������������� 489
Designing Your blm Class���������������������������������������������������������������������������������������������������� 494
Model Methods�������������������������������������������������������������������������������������������������������������������� 494
xii
Table of Contents

Building an R Package for blm������������������������������������������������������������������������������������������������� 497


Deciding on the Package Interface�������������������������������������������������������������������������������������� 497
Organization of Source Files������������������������������������������������������������������������������������������������ 498
Document Your Package Interface Well������������������������������������������������������������������������������� 498
Adding README and NEWS Files to Your Package�������������������������������������������������������������� 499
Testing�������������������������������������������������������������������������������������������������������������������������������������� 500
GitHub��������������������������������������������������������������������������������������������������������������������������������������� 500

Conclusions���������������������������������������������������������������������������������������������������������� 501
Data Science����������������������������������������������������������������������������������������������������������������������������� 501
Machine Learning��������������������������������������������������������������������������������������������������������������������� 501
Data Analysis���������������������������������������������������������������������������������������������������������������������������� 502
R Programming������������������������������������������������������������������������������������������������������������������������� 502
The End������������������������������������������������������������������������������������������������������������������������������������� 503

Index��������������������������������������������������������������������������������������������������������������������� 505

xiii
About the Author
Thomas Mailund is an associate professor in bioinformatics at Aarhus University,
Denmark. His background is in math and computer science, but for the last decade, his
main focus has been on genetics and evolutionary studies, particularly comparative
genomics, speciation, and gene flow between emerging species.

xv
About the Technical Reviewer
Jon Westfall is an associate professor of psychology at Delta
State University. He has authored Set Up and Manage Your
Virtual Private Server, Practical R 4, Beginning Android
Web Apps Development, Windows Phone 7 Made Simple,
and several works of fiction including One in the Same,
Mandate, and Franklin: The Ghost Who Successfully Evicted
Hipsters from His Home and Other Short Stories. He lives in
Cleveland, Mississippi, with his wife.

xvii
Another Random Document on
Scribd Without Any Related Topics
Kokonansa aika lurjus vain
Hän kannuksista hattuun on ollut ain"!

luki hän kirjoitusarkin puolikkaasta, jonka majuurska auliisti oli tätä


huvia varten luovuttanut.

Joachim ja Susen neiti panivat kumpikin viisautensa liikkeelle ja


keksivät mitä hullunkurisempia selitysehdotuksia — kukaan ei voinut
selittää arvoitusta.

"Mutta, Herranen aika!" huusi kapteenitar, heilutellen notkeasti


paperiarkilla — kuuma punssi ja piparinötit vähä kerrassaan olivat
saaneet lämpömäärän, vastalämmitetyssä vieraskamarissa
nousemaan, "eikö todellakaan kukaan teistä voi saada sitä selville?
Sehän on tietysti minun mieheni, Eke — bäck [Eke = tammi, bäck =
puro]. Sehän on päivän selvää. Luutnanttihan tuntee hänet"?

Hän katsoi hullunkurisen näköisenä sisaren tyttären silmiä


tavattomasti muistuttavilla, pyöreillä, teeskentelemätöntä
hämmästystä osoittavilla sinisilmillään Joachimiin, niin että tämä heti
purskahti nauruun ja alkoi melkein ihmetellä miten hän ei heti noin
sattuvasta kuvauksesta tuntenut tuota kunnon kapteenia.

Mutta kaikki kolme Skytten sisarusta olivat aivan loukkaantuneita,


he katselivat vain polvihinsa ja Beata kuiskasi Fritz nuorukaiselle,
"että hän ei voinut käsittää Netti tätiä".

"Ei hän tarkoita mitään pahaa", lohdutteli häntä nuori Fritz. "Mutta
hänen nuoruutensa päivinä kuului vain asiaan ettei saanut olla
hentomielinen kun puhui omasta puolisostaan".
"Äiti ei sanoisi koskaan niin isästä", vakuutti Beata vielä
harmistuneena.

"Varmaankaan ei…" Fritz pysähtyi vähän aikaa ja näytti siltä kuin


hän sitä ei olisi lukenut majuurskalle miksikään niin suureksi eduksi.
"Mutta täti Skytte hän nyt onkin harvinaisen totinen".

Ilta kului, mutta kukaan ei tahtonut käydä levolle; niin harvoinhan


sai nähdä nuorisoa Munkebodassa. Karin Maria sai Joachimin
hakemaan harppunsa alas päätyhuoneesta, jonka jälkeen hän lauloi
pari Geijerin laulua, jotka olivat aivan uusia, sekä ihailun "Laakson
ruusu" ja "Kukkaset".

Kaikki istuivat juhlallisina, melkeinpä hartaina pitkin seiniä yhtäkkiä


ikäänkuin kaikkeen nauruun ja lörpötykseen väsyneinä. Lotti täti
siirtyi ylemmäksi sohvansa nurkkaan ja katsahti arvokkaasti
ympärilleen, ylpeänä vanhimmasta tyttärestään. "Konttoorin" ovi
avautui äänettömästi, ja pitkien piippujen savupilvistä, joka aaltoillen
levesi vierashuoneeseen, pilkisti esiin kaksi punaista naamaa.

Joachim oli huomaamatta siirtynyt ja istui nyt Agnetan takana.


Ajattelematta mitä teki oli hän laskenut kätensä Agnetan tuolin
selustalle ja yhtäkkiä tunsi Joachim kuinka tytön kaula tietämättään,
taipui sitä vasten. Hän ei liikahtanutkaan, istui hiljaa kuin hiiri, tytön
pehmeän niskan luottavaisesti, hänen mielestään melkein hyväillen
yhä nojatessaan hänen käteensä.

Pyöreät, valkeat olkapäät puolihämärässä, sinistä "huonekalun


päällystää vasten näyttivät vieläkin valkoisemmilta — olisiko siinä
ollut Susen tai kuka muu tyttö tahansa, ei hän olisi epäillyt
hetkeäkään painaessaan huulensa niille; se olisi ollut vain tavallinen
satunnainen kohteliaisuus, aivan kuten oli sopivaa. Mutta kuinka
lienee ollut — kun siinä oli Agneta, niin ei hän hennonnut. Kenties
enin pelosta, että joku voisi sen nähdä ja voisi tehdä tavalla tai
toisella jonkun leikillisen tai epähienon muistutuksen, joka — sen
tunsi hän yhtäkkiä aivan varmasti — tänä hetkenä olisi ollut hänelle
varsin epäedullista. Ainoa hyväily — jos sitä edes siksi voi
nimittääkään — jonka hän serkullensa soi, oli että hän taivuttausi
hänen ylitsensä ja antoi kasvonsa koskettaa hänen pehmeitä
hiuksiaan.

"Pikku Agneta", mutisi hän vielä kerran. Tämä köyhä,


yksinkertainen hyväilysana oli ainoa, joka nyt vieri hänen huulillensa
— hänen, jolla muutoin oli aina valmiina niin monia paljon ilmaisevia,
ihastelevia nimityksiä kauniille sukupuolelle.

Agneta kuuli sen ja yhtäkkiä tuntien hänen läheisyytensä kohotti


hän heti taaksepäin taipuneen päänsä ja istui viimeisen laulun ajan
suorana kuin kynttilä, hieman vain kumartuen tuntiessaan hänen
katseensa.

Karin Maria lopetti parilla pitkällä värähtelevällä soinnulla; Joachim


nousi Agnetan tuolin takaa ja sanoi äänellä, jota Agneta ei oikein
tuntenut — pikaisesti, pontevasti ja hätiköiden sanoissaan.

"Nyt tanssimme me"!

Kukaan ei pannut vastaan. Kapteenin rouva Ekebäck istui heti


pyytämättä, kuin käskystä, klaveerin eteen. Joachim, yleisessä
hälinässä, toisten raivatessa tuolia ja pöytiä pois lattialta, otti
Agnetan erityisesti häntä pyytämättä käsihinsä ja alotti tanssia erästä
saksalaista valssia, joka viime aikoina oli käynyt hyvin yleiseksi
myöskin täällä maaseudulla.
Agneta tanssi tahdottomasti soiton tahdissa, joka ikäänkuin
keinutellen häntä kiidätti. Sädehtivät ruskeat silmänsä katsoivat
hymyillen Joachim serkun lämpimiin sinisiin. Kaiken aikaa kuin he
tanssivat tuntui kuin olisivat he olleet vain kahden kesken — poissa
oli pakko, kainostelu, pelko ja teeskentely heidän väliltään.

Valssi loppui. Joachim veti Agnetan, joka yhtäkkiä horjahti,


likemmä luokseen, koettaen itse pysyä vakavasti jaloillaan. Hänestä
tuntui yhtäkkiä pyörryttävän, kuin olisi hän tyhjentänyt yksin
pullollisen champanjaa.

"Kiitos! Kiitos"! mutisi hän ja pusersi kiihkeästi hänen käsiänsä,


tietämättä oikeastaan mitä sanoi ja teki.

Susen neiti oli loukkaantunut. Hän ei voinut käsittää miksi tuon


ainoan kavaljeerin — tietysti ei hän lukenut nuorta Fritziä miksikään,
— päähän yhtäkkiä oli pistänyt tanssia tuon "tyttö lepukan" kanssa,
siihen sijaan kuin tapa, käytös, yksinkertaisin kohteliaisuus olisi
vaatinut pyytämään ensiksi hänet. Hän istui jäykkänä, käsivarret
kupeille painettuina, pitäen nenäliinaansa hienosti sormiensa välissä,
sillä välin nuoren Fritzin kömpelösti pyytäessä Karin Mariaa ja
Beatan ilomielin pyörähdellessä setä Fagerholmin kanssa, joka pää
kallellaan tanssiessaan tarpeettomasti notkutteli sääriään jos
jonnekin päin. Salin ovella seisoi mamseli Fiken uudessa, mustassa
bombasiini-puvussaan ja tuuditteli ruumistansa sävelten mukaan,
kädet lanteilla, edestakaisin majuurin turhaan pyrkiessä
vastapuoleiselta ovelta lattian poikki, joka nyt, kuinka olikaan, oli
tanssivia täynnä ja alati ystävällisesti nyyköttäessä päätään ja väliin
rohkaisevasti huutaessa: "Nytkös me tanssimme mamseli Fiken —
nyt sitä mekin pyörähtelemme…"
Juuri heidän pysähtyessään oli Agneta tavannut äitinsä kylmästi
ihmettelevän ja suuttuneen silmäyksen — hän ymmärsi heti, mitä se
merkitsi ja pelästyi pahanpäiväisesti. "Susen!…" kuiskasi hän, vielä
vetäen henkeään ja katsoi rukoilevasti Joachimiin. "Susen istuu"!

Joachim oli niin iloinen että hän olisi voinut nauraa ääneen. Hän
puristi Agnetan käsiä, jotka vielä tahdottomasti lepäsivät hänen
käsissään ja meni kohteliaasti neiti Susenin luo.

"Luutnantti Skytte siis ei varmaankaan minun itseni vuoksi jätä niin


yhtäkkiä tanssitoveriaan", pisteli Susen neiti kohteliaan happamesti.

"Mutta neiti"! Joachim katsoi niin nuhtelevaisesti kuin mahdollista


ja vei tuntehikkaasti käden sydämelleen. "Tietysti olen valmistaunut
siihen, että neiti käsittää minut väärin. Olimme pannut vedon,
serkkuni ja minä", lisäsi hän vakavasti, niin kovasti että naiset
sohvassa voivat myös sen kuulla.

Neiti Susen ei ollut vaikea lepytellä: hän ehdotteli kohteliaasti että


luutnantti ja hän opettaisivat tytöille polkkaa: "Se on ainoa mitä me
nyt viitsimme tanssia Kristianstadissa", selitti hän vähän ylpeästi.

Beata oli heti hyvin huvitettu siitä: kiltti kapteenitar soitti edelleen ja
he alkoivat kaikki — mamseli Fiken myös — "opetella askelia", joita
Susen neiti sininen hame edestä sievästi nostettuna niin ylös — että
koruommellut sukkasiteet vilahtelivat, hyväntahtoisesti ja innokkaasti
näytti.

Agneta vain ei ollut mukana. Hän oli kohta valssin jälkeen hiipinyt
etehiseen ja istuutui puolipimeän yläkerran rapulle, pakkasta
huomaamatta.
Joachim oli nähnyt hänen katoavan ja aavistaen syyn, yhtäkkiä
hermostuneena, sietämättömän ikävän valloittamana, saada nähdä
hänet jälleen, läksi hän — kuin muut parhaallaan olivat polkan
touhussa — häntä etsimään.

"Agneta", kuiskasi hän matalasti. Hän ei keksinyt häntä kohta,


etehisen pöydällä olevan yksinäisen, liekkuvan ja savuavan
raanilampun himmeässä valossa.

Agneta ei vastannut, mutta nousi heti ja nojasi kaidepuuta vasten.

Seuraavassa tuokiossa oli Joachim hänen vierellänsä ja samassa


— kumpikaan ei koskaan voinut heistä sanoa, kuinka se oikeastaan
oli käynyt — lepäsi Agneta hänen sylissänsä, lähellä, lämpimästi
hänen rintaansa vasten.

"Agneta, omani, armahaiseni", kuiskasi Joachim onnellisesti,


sydämellisesti hänelle.

Tämä ei vastannut, mutta katsoi puoli pimeässä häneen — hellästi


hieman arasti, ikäänkuin uteliaana. Joachim tunsi nyt, että pikku
Agneta yhdessä ainoassa päivässä kiihkeän, vihdoinkin täydellisesti
käsitetyn rakkautensa lämpösätehissä oli kasvanut hänen
käsissänsä naiseksi. Ja tuo kuuma, melkeinpä raaka kiihko, joka
ensin tanssissa oli soaissut hänen silmänsä kaikelle, mitä hänen
ympärillänsä tapahtui, niin ettei hän tuntenut kenenkään muun
olemassa oloa kuin Agnetan, suli täällä — hiljaisuudessa ja
yksinäisyydessä vienoksi hellyydeksi ja tuokion tuskallisesti
värähteleväksi sydämellisyydeksi.

Sitä kesti vain hetken. Ovi aukeni alhaalla — tanssin hälinää ja


ääniä kuului. — Agneta nyhtäsihe vavisten hänen sylistään ja kiiti
äänettömästi ylös yläkerran rappuja.
VI.

Aikasin seuraavana aamuna, kun vieraat vielä nukkuivat ja kun


juhlallista kahvi ja aamiaispöytää, takkavalkean leimutessa, katettiin
salissa, näki Joachim, astuessansa alas rappusia Agnetan peiteliina
harteilla akkunan ääressä seisovan ja solmivan myssynsä nauhoja.

Hän hätkähti, he eivät olleet vaihtaneet sanaakaan sitte eilisillan,


kun hän rappusten puolipimeässä oli tuokioksi sulkenut hänet
sylihinsä. Kun Agneta vähän ajan perästä oli tullut sisälle —
seurueen juuri alkaessa erota — ei hän hetkeksikään saanut
tilaisuutta katsoa hänen silmiinsä ja tyttö oli vain kaikkien muiden
keralla sanonut hänelle pikaisesti, tuskin kuultavasti hyvää yötä.

Joachim lähestyi häntä epäillen — tyttö seisoi alasluoduin silmin,


eikä ollut huomaavinaankaan häntä…

"Menetkö ulos? … näin aikasin…" oli kaikki mitä hän,


kummallisesti hämmentyneenä hoksi sanoa.

Agneta ei kohottanut silmiään vetäessään kotona neulotuita


lapasia käsiinsä.
"Niin, minun täytyy ennen aamiaista rientää Niilo Maunun Gunillaa
pyytämään lampaan keritsemiseen, niin on äiti käskenyt".

Joachim aukasi etehisen oven ja sanomatta sanaakaan otti hän


hattunsa ja seurasi häntä.

He kävivät vaieten. Auringon valo välkehti vaaleasti vihoittavilla


pelloilla ja metsässä, joka vähän alkoi jo vivahtaa punaruskealle.
Routa ei ollut vielä maasta lähtenyt, ja syviä rattaan jälkiä peitti vielä
aamusin hapras, valkoinen jää, joka heidän astuessansa murtui kuin
ohut lasi.

He kävivät äänetönnä, rinnatusten yhä edelleen. Yhtäkkiä,


ikäänkuin sisällisestä käskystä kumartui Joachim pikaisesti ja katsoi
myssyn sisälle, suoraan Agnetan kasvoihin. Hänen silmänsä olivat
täynnä suuria kyyneleitä, jotka olivat valmiina vierähtämään.

"Mutta Agneta", kuiskasi hän. "Hyvänen aika miksikä?" Hän tarttui


hänen käteensä, joka hervotonna riippui hameella ja kumartui.

"Agneta, miksikä Herran nimessä itket?" kysyi hän vielä kerran,


päättäväisemmin, levottomasti.

"Siksi… siksi…" nyyhki hän "siksi kun Joachim serkku ei sano


sanaakaan minulle".

"Mutta Agneta", alkoi Joachim lämpimästi, "käynhän tässä


vierelläsi, ollen iloinen vain siitä että saan käydä rinnallasi" — hän
puristi hellästi pientä kintaan peittämää kättä — "ja vaieta. Mitäs sitte
voisin sanoa, joka olisi kylliksi hyvää?"

Agneta vaikeni valkean, kovaksi kovoitetun hattunsa varjossa. Ja


koko hänen kasvoistansa ei Joachim nähnyt muuta kuin hiuskutrit
edestä ja nenän, pienen, pyöreän, pehmeän nenänipukan, joka
näytti niin uhkarohkealta.

Ja tuon omituisen vuorovaikutuksen kautta, joka on kahden


rakastavan välillä, arvasi hän mitä Agneta ajatteli.

"Sinä tahdot… tahdot, että sanoisin… sen mitä en saanut


sanotuksi eilen…?"

Agneta kohottiihe vähän, hieman ylpeästi, ikäänkuin


näyttääksensä, että nyt oli se hänelle yhdentekevää. Mutta Joachim
ei antanut tämän tekeydytyn välinpitämättömyyden itseänsä
eksyttää: hymyillen kumartui hän ja veti hänen kätensä luokseen.

"Rakas tyttöseni, onhan jo kaikki sanottu suutelossa", oli hän juuri


sanomaisillaan, mutta muisti yhtäkkiä, ettei hän koskaan oikein ollut
suudellut häntä — ei koskaan muuta kuin hänen poskeansa, ja
jalkapöytäänsä ja kättänsä. Hän hymyili, pysähtyi ja nostaessaan
hänen kätensä ja painaessaan sitä silmäänsä vasten, mutisi hän
kerran toisensa perästä matalasti ja hillitsemättömästi:

"Minä rakastan sinua… Mutta minähän rakastan sinua…"

Agneta nosti kasvonsa häneen päin, punastuen hennosti


värähtelevin huulin. Katse lepäsi hänen katseessaan: lämpimänä,
ihailevan hellänä, teeskentelemättömän sydämellisenä.

Ja Joachim kietoi kätensä lujasti hänen harteillensa, taivuttausi ja


painoi huulensa hänen hienolle — raikkaalle, kylmänä huhtikuun
aamuna hieman kostealle poskellensa — ja hänen pehmeille,
puoleksi avatuille huulillensa, jotka ujosti sulkeutuivat suuteloa yhä
kestäessä. Ei pistänyt heidän kummankaan päähän ensin silmätä
ympärilleen, jos he todellakin olivat yksin. Ei se ollut tarpeellistakaan,
täällä kivisellä, rouhkoisella, jäätyneellä kanervikkokankaiden ja
peltotilkkujen läpi mutkikkaasta luikertelevalla, ylenemistään
ylenevällä tiellä ei löytynyt näin aikasin aamusella ainoatakaan
sielua.

"Ja välitätkö sinä todellakin minusta, kurjasta, syntisestä


paholaisesta?" kysyi Joachim nöyrästi, mutta aivan tarpeettomasti,
kuullaksensa, vain hänen vielä kerran vakuuttavan sitä.

"En välitä koskaan kenestäkään muusta, en koskaan


maailmassa", mutisi Agneta kiihkeästi ja yhtäkkiä, ikäänkuin omaa
kiivauttansa peläten, sulki hän sädehtivät ruskeat silmänsä.

"Entäpä Stjernestä?" Kysyi Joachim riemuiten, vallattomasti


kiusoitellen. Mutta seuraavassa tuokiossa katui hän katkerasti, että
oli sanonut tämän nimen. Agnetan kasvoille solui hetkeksi sellainen
inhon ja pelästyksen kiusallinen ilme, että niitä tuokion aikana tuskin
olisi entisiksi tuntenut.

"Mutta Agneta, Agneta", kuiskasi hän lämpimästi. "Ethän vain


pelänne
Mitäpä hän voisi tehdä sinulle — nyt?"

"Äiti", kuiskasi hän yhtäkkiä epätoivoisena. "Et tiedä miten


järkähtymätön äiti on, kun hän kerran on luvannut jotain".

"Ja sinä aijot todellakin taipua hänen tuumiinsa?" huusi hän


kiivaasti.

Agneta katsoi ylös. "En", sanoi hän hiljaa, mutta niin selvästi, että
se kuului melkein ankaralta. "En — en koskaan".
"Etkö luule että olisi parasta", alkoi Joachim, epäillen vähäisen
väliajan perästä, "että ratsastan puhumaan itse Stjernen kanssa,
ennenkuin Lotti täti… Eihän meidän tarvitse sanoa heti sitä Lotti
tädille", lisäsi hän hiljaisemmin meikein houkutellen.

"No niin", lausui Agneta keveämmin, "puhu ensin Stjernen kanssa.


Kun sanot hänelle, että minä en tahdo, että en mitenkään voi… en
voi edes kuvitellakaan sitä… niin täytyy hänen luonnollisesti minusta
luopua." Hän katsoi tuskallisesti Joachimiin. "Etkö luule niin?"

"Sanos minulle Agneta," Joachim pysähtyi keskelle mäkeä ja


katsoi häntä vakavasti silmiin.

"Oletko varma siitä, että hän välittää sinusta — sinusta itsestäsi,


rakkaudestasi, tarkoitan? Onko hän joskus suoraan sanonut,
puhunut tunteistaan kanssasi?"

Agneta vaikeni hetken ja sanoi sitte hiljaa.

"On."

"Sanot sen niin kummallisesti Agneta," lausui hän yhtäkkiä


levottomasti, valmiina tarkkaamaan hänen mielensä joka
vivahduksen.

"Niin siksi… siksi… Minusta on niin vastenmielistä ajatella häntä"


lausui hän tulisesti.

"Sano minulle nyt kaikki", kehoitti Joachim yhtä innokkaasti,


melkeinpä tuskallisesti. "Kerro kaikki".

"Oi, ei siinä ole paljon kertomista". Melkein vaistomaisesti koki hän


hillitä ääntään ja ikäänkuin haihduttaa omien sanojensa vaikutusta.
"Niin oltiin joulukesteissä Råsnäsissä, he olivat juoneet paljon ja sitte
aivan viimeiseen tanssiin tuli hän minua pyytämään. En uskaltanut,
tietysti kieltää".

"Oliko hän juopunut"? kysyi Joachim suoraan. "Enpä sitä juuri


luulisi, hänhän sietää vaikka kuinka paljon, se mies".

"En tiedä tarkoin oliko hän juovuksissa", sanoi Agneta


ajattelevaisesti, "mutta selväkään hän ei ollut, vaikka hän vei minua
paljon varmemmin kuin moni muu, jonka kanssa olin tanssinut".

Joachim pusersi Agnetan kalvosta kovemmin. Hän tajusi yhtäkkiä,


ensikerran miten tuo — että nuoren tytön, kuten yleisenä tapana oli
täytyi tanssia kenen hyvänsä, puolijuopuneen kavaljeerin kanssa,
joka vain suvaitsi häntä pyytää, ja kukapa sitte ei ollut ainakin osaksi
eli kokonaankin juovuksissa joulukekkereissä? — että se todellakin
oli mitä mieltä kuohuttavin epäkohta.

"Ja koko ajan kun me tanssimme", jatkoi Agneta matalammalla


äänellä, hieman vaikeasti, ikäänkuin muisteleminen olisi vaivannut ja
hävettänyt häntä, "katsoi hän minuun. Ja yhtäkkiä, ennenkuin
aavistin eli voin sitä estää, kumartui hän ja kuiskasi… jotain… ja",
hän kävi punaiseksi kuin veri, "ja hän tarttui korvaani kuin tahtoisi
hän purra minua…"

"Sellainen raaka…" Joachim noitasi. "Mitä sanoi hän"?

"Oh, en sitä niin tarkoin muista. Agneta katsoi häveten maahan,


pelästyneenä ja kumminkin mielissään siitä että Joachim voi omistaa
asian niin. Ja minä olin aivan kuin pois laidoilta, niin nolostuin ja
kauhistuin. Jotain että olin niin soma, että hän juuri siinä paikassa
olisi tahtonut syödä minut suuhunsa… Kenties se ei ollut niin
vaarallista, hän tietysti oli humalassa… Mutta hän pelästytti minut —
voi, miten häntä pelkäsin! Jo vain hänen silmänsä… Muutoinhan hän
aina on niin siivo ja kohtelias…

"Hän on raaka intohimoinen lurjus, sellainen hän on!" huusi


Joachim kalpeana, raivostuneena, kun hänen pienen Agnetansa oli
avutonna täytynyt kuulla niin hävyttömän karkeaa rakkauden
tunnustusta, jollaista kohtelias herrasmies tuskin voisi tarjota
katuneitosellekaan. Sillä tytön katkonaisesta, kainostelevasta
kertomuksesta ymmärsi hän kokemuksiensa nojalla enemmän, kuin
hän viattomuudessaan oli käsittänyt eli aavistanut. "Miehen kunnian
vuoksi täytyy minun otaksua hänen olleen humalassa, muutoin
tuollainen menettely kunniallista säätyläistyttöä kohtaan on
enemmän kuin anteeksiantamatonta. Mutta luota minuun, olen
pakoittava sen kolhon pyytämään anteeksi sekä sinulta että minulta".

"Ei", huusi Agneta yhtäkkiä aivan pelästyneenä, että hän oli tullut
jonkun roskajutun tahi riidan aloittajaksi. "Et saa virkkaa noista
tyhmyyksistä hänelle mitään. Kiellän sinua siitä, juoksen järveen
häpeästä, jos hän saa tietää että minä muistan vielä ja olen
kumminkin, kun tapaan hänet, aivan yhtäläinen häntä kohtaan kuin
ennenkin. Mutta mitä olisin voinut tehdä"? hän kääntyi Joachimiin.
"Enhän voinut sanoa äidille mitään, sitä en olisi kehdannut. Ja
hänhän kosi minua kohta sen jälkeen", lopetti hän vähän
katkonaisesti.

"Luuletko että se kenties tapahtui siitä syystä"? kysyi Joachim


kopeasti. "Parantaakseen nenäkkäisyyttään…"

"Ei", sanoi Agneta rehellisesti. "Luulen todellakin että hän on…


että hän on… rakastunut minuun", lopetti hän hyvin päättäväisesti.
Ja kun Joachim ei vastannut, lisäsi hän ujosti, vähän lapsellisesti
ylvästellen.

"Senhän aina huomaa. Tarkoitan, tuntee sanomattakin kun


mies…"

Hän lopetti yhtäkkiä Joachimin hymyilevästä katseesta


loukkaantuneena ja heilahutti niskaansa taaksepäin.

"Luuletko kenties ettei kukaan koskaan ole välittänyt minusta",


sanoi hän suuttuneesti ja tavallaan hyvin arvokkaasti.

"Jumala tietää, että luulen juuri päinvastaista. Minähän", hän otti


sovitellen hänet syliinsä ja kuiskasi: "minähän itse olen aivan hulluna
sinuun".

Agneta oli aivan unohtanut lampaankeritsemisasiansa Niilo


Maunun
Gunillalle. Hän huomasi äkkiä kauhuksensa että he jo kauan aikaa
sitte
olivat sivuuttaneet polun, joka kanervikkokankaan poikki johti tuvalle.
Hän vetäysi pian, melkeinpä nyhtäsi itsensä irti Joachimin sylistä.

"Jumalan tähden, Joachim serkku", huudahti hän huolestuneena


ja hänelle tuli yhtäkkiä hyvin kiire. "Kaikella muotoa, riennä kotiin,
niin että olet kotona ennen minua. Mitä ihmettä äiti ja
Fagerhjelmiläiset sanovat. Ja Susen…" ei hän voinut olla
singahuttamatta sitä hänelle kääntyessään takaisin.

"Sinä sitten oletkin surkein pelkuri raukka", mumisi toinen,


vastenmielisesti hänet jo luotaan päästäen.
"Pelkuriko"? Agneta heilahutti päätään taaksepäin ja loi ylpeästi
komeat ruskeat silmänsä häneen. "Saatpa vielä nähdä olenko
pelkuri, kun kerran sitä kysytään"!
VII.

Samana iltapäivänä kun sotaneuvos vihdoinkin oli sanonut hyvästit


ja kun he jo onnellisesti ja hyvin vaelsivat Kristianstaadia kohti,
ratsasti Joachim Marieholmaan. Aamullinen katkeruus oli pysynyt
koko päivän yhtä kiihkeänä, niin ettei hänellä ollut lepoa eikä rauhaa
ennenkuin oli saanut puhua Stjernen kanssa.

Kun hän ratsasti kivitettyyn umpipihaan, jonka suuren portin


päällystää koristi hiekkakivestä hakattu vapaaherravaakuna, veti
hänen huomionsa heti puoleensa olento, jota merkillisempää hän
mielestään koskaan ei ollut nähnyt. Ylhäällä portin vastapäätä
olevilla päärappusilla seisoi pieni naishenkilö, kömpelöä
hiekkakivistä kaidepuuta vasten nojautuneena. Hänen harteillaan oli
vanha topattu silkkiviitta, josta pumpulitukut siellä täällä pilkistelivät
esille ja pitkulaisessa päässään, terävine koukkunenineen ja
tuikeasti paistaville silmineen oli korkea, ympyriäinen hattu, jonka
suuri, kovin kulunut höyhentöyhtö oli ainakin viisitoista vuotta vanha.
Toisessa kädessään oli hänellä pitkä kävelykeppi, jollaiset olivat
käytännössä "rococo"-aikakautena ja toisella kädellään oli hän
kerännyt helmansa ylös, niin että jalat pitkävartisissa puukengissä
näkyivät. Joachim tietysti oli kuullut kylliksi hänestä, niin ettei hänen
edes tarvinnut tuokiotakaan epäillä sitä että edessänsä seisoi kautta
koko Höingen kihlakunnan kuuluksi käynyt vapaaherratar Malviina
Stjerne.

Hän puhutteli ankarasti, kuten tuntui, erästä kurjaa


torpparipaholaista, joka hattu kädessä seisoi rappusten edessä. Kun
Joachim ratsasti pihaan otti hän vanhanaikuisen, saksien muotoisen
jalokivillä koristetun "lorgnetin" ja piti sitä silmiensä edessä.

"Kuka hän on"? kysäsi hän mahtipontisesti.

Joachim nosti kohteliaasti hattuansa ja kumarsi satulassa.


"Luutnantti Skytte Munkebodasta". vastasi hän tottuneesti,
"armollisen vapaaherrattaren nöyrin palvelija".

"Vai nuori Skytte…" hän tarkasteli häntä edelleen yhtä


häikäilemättömästi. "Ei ole hullumpi, ei ole hullumpi kautta kunniani!
Hän siis kai tuntee minut"?

Joachim ei voinut olla hymyilemättä vastatessansa kohteliaasti:

"Ei löydy ainoatakaan koko Skånessa ken ei tuntisi


vapaaherratarta".

Hymyily solahti samassa vapaaherrattaren ruskeaihoisten


linnunkasvojen yli, ympyriäisen hatun alla.

"Se ilahduttaa minua", sanoi hän nyykähyttäen. "Siltä sen pitää


kuulua"!

Joachim käyden vähän hämilleen näki heti, että vapaaherratar


varsin hyvin oli käsittänyt hänen pilkallisen vastauksensa, mutta että
hän ei siitä vähintäkään närkästynyt.
Käden liikkeellä käski vapaaherratar torpparin huolehtimaan
hevosesta ja Joachim asteli hitaasti rappuja ylös.

"Luutnantti kai tahtoo tietystikin tavata poikaani"? kysyi hän


käyttäen kohteliaampaa ääntä kuin äsken.

"Niin". Joachim kumarsi kohteliaasti ja suuteli hänen kättänsä, joka


oli kylmä ja luiseva kuin linnun kynsi.

"Hän tulee heti, näin hänet juuri tallissa, kulkiessani siitä ohi".
Vapaaherratar puhellessansa työnsi itse raskaan tammioven auki ja
pyysi vieraansa astumaan sisälle.

Etehisessä oli heitä vastassa eräs palvelija, jonka vapaaherratar


kumminkin heti paikalla lähetti herra paroonia etsimään. Sitte potkasi
hän pitkällistä harjoitusta osoittavalla näppäryydellä raskaat
puukengät jaloistaan, ja laski hameensa alas ja alkoi — kuten
Joachim kohtausta kuvatessaan jälestäpäin sanoi — "näyttää
ihmismäisemmälle".

Salissa, joka oli pitkulainen kuin taidekokoelma, vanhoine,


valkeine kullattuine rococohuonekaluineen pyysi emäntä vierastansa
istumaan, istuutuen heti itsekin ja alkaen purkaa kultalankaa; tämä
oli ollut hänen ensi nuoruutensa aikana yleistä, ja oli, kuten
pahansuovat ihmiset sanoivat, ainoa käsityö jota hän osasi tehdä.
Sanottiin myös, ja uskottiinkin yleisesti, että vapaaherratar Malviina
Stjerne, syntyisin Leijonklo, ei ollut koskaan oppinut lukemaan eikä
kirjoittamaan. Tämän taitamattomuuden syynä, jota peittääkseen
hän kumminkin vastoin "suoraa" luonnettansa teki kaikkensa,
pidettiin osaksi hänen vanhempainsa eriskummallisuutta ja
Rousseaulaisten kasvatusohjeiden sekavaa käsitystä, osaksi hänen
omaa sairaloisuuttaan kasvuaikana, joka olikin tämän kasvatustavan
tehnyt mahdolliseksi ja jonka nojalla sitä oli voitu puolustaa. Tosiasia
kumminkin oli, ettei kukaan, huolimatta hänen laajalle levinneistä,
monimutkaisista asioistaan, voinut ylvästellä nähneensä hänen
kädellään kirjoitettua ainoatakaan sanaa, eli hänen koskaan lukevan
kirjaa.

Mutta hän oli matkalla aamusta aikasesta iltaan myöhään,


ratsastaen, venäläisellä juoksijallaan talosta taloon, torpasta
torppaan koko tuolla suurella tiluksellaan, jonka hän
kakskymmenneljävuotisena, miehensä kuoltua oli ottanut hoitoonsa
velkaisena ja puti puhtaaksi pantuna ja joka nyt oltuaan kohta
neljäkymmentä vuotta hänen hallittavanaan, sodasta,
vallankumouksesta ja hallitsijasuvun vaihtumisesta, taloudellisesta
pulasta ja lisäveroituksesta huolimatta kannatti paremmin kuin
mikään muu talo koko länsi Göingen kihlakunnassa. Poikaansa
kohteli hän aina kuin alaikäistä, ja kun Joachim nyt näki äidin, voi
hän varsin hyvin käsittää, kuinka Niilo Olavista todellakin, hyvästä
ymmärryksestään ja verrattain hyvistä tiedoistaan huolimatta oli
voinut tulla sellainen kun hän oli: tylsä, raskasmielinen ja
epäitsenäinen. Äiti oli aina siitä päivin kun poika oli vuoden vanha
kukistanut hänen tahtonsa, sitonut hänen kätensä.

"No, miten siellä Skyttelässä voidaan"? Vapaaherratar ei


seurustellut enää kenenkään kanssa, eikä liikkunut koskaan
missään, mutta hän oli utelias kuin joskus nainenkin voi olla ja tiesi
kaikki, mitä monen pitäjän piirissä tapahtui, "No kuinkas pieni miniäni
siellä kasvaa ja varttuu"?

Joachim katsoi tarkasti häneen. "Tarkoittaako vapaaherratar


serkkuani, neiti Agneta Skytteä"?

You might also like