Functional Programming in R 4: Advanced Statistical Programming For Data Science, Analysis, and Finance - Second Edition Thomas Mailund

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 54

Functional Programming in R 4:

Advanced Statistical Programming for


Data Science, Analysis, and Finance -
Second Edition Thomas Mailund
Visit to download the full and correct content document:
https://ebookmeta.com/product/functional-programming-in-r-4-advanced-statistical-pr
ogramming-for-data-science-analysis-and-finance-second-edition-thomas-mailund/
More products digital (pdf, epub, mobi) instant
download maybe you interests ...

Functional Programming in R 4 - Second Edition Thomas


Mailund

https://ebookmeta.com/product/functional-programming-
in-r-4-second-edition-thomas-mailund/

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/

Functional Data Structures in R 1st Edition Thomas


Mailund

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

R Programming for Data Science Roger D. Peng

https://ebookmeta.com/product/r-programming-for-data-science-
roger-d-peng/
Functional Programming in C Second Edition Enrico
Buonanno

https://ebookmeta.com/product/functional-programming-in-c-second-
edition-enrico-buonanno/

Advanced R 4 Data Programming and the Cloud: Using


PostgreSQL, AWS, and Shiny 2nd Edition Matt Wiley

https://ebookmeta.com/product/advanced-r-4-data-programming-and-
the-cloud-using-postgresql-aws-and-shiny-2nd-edition-matt-wiley/

Pointers in C Programming A Modern Approach to Memory


Management Recursive Data Structures Strings and Arrays
1st Edition Thomas Mailund

https://ebookmeta.com/product/pointers-in-c-programming-a-modern-
approach-to-memory-management-recursive-data-structures-strings-
and-arrays-1st-edition-thomas-mailund/

Functional Programming in Scala, Second Edition (MEAP


V08) Michael Pilquist

https://ebookmeta.com/product/functional-programming-in-scala-
second-edition-meap-v08-michael-pilquist/

First Course in Statistical Programming With R 2nd


Edition Braun

https://ebookmeta.com/product/first-course-in-statistical-
programming-with-r-2nd-edition-braun/
Functional
Programming in R 4
Advanced Statistical Programming for
Data Science, Analysis, and Finance

Second Edition

Thomas Mailund
Functional
Programming in R 4
Advanced Statistical
Programming for Data Science,
Analysis, and Finance
Second Edition

Thomas Mailund
Functional Programming in R 4: Advanced Statistical Programming for
Data Science, Analysis, and Finance

Thomas Mailund
Aarhus N, Denmark

ISBN-13 (pbk): 978-1-4842-9486-4 ISBN-13 (electronic): 978-1-4842-9487-1


https://doi.org/10.1007/978-1-4842-9487-1
Copyright © 2023 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: Melissa Duffy
Development Editor: James Markham
Editorial Project Manager: Mark Powers
Cover designed by eStudioCalamar
Cover image by Max van den Oetelaar on Unsplash (www.unsplash.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��������������������������������������������������������������������������������vii

About the Technical Reviewer�������������������������������������������������������������ix

Acknowledgments�������������������������������������������������������������������������������xi

Chapter 1: Introduction������������������������������������������������������������������������1

Chapter 2: Functions in R���������������������������������������������������������������������3


Writing Functions in R�������������������������������������������������������������������������������������������3
Named Parameters and Default Parameters��������������������������������������������������������9
The “Gobble Up Everything Else” Parameter: “...”�����������������������������������������������10
Lazy Evaluation���������������������������������������������������������������������������������������������������13
Functions Don’t Have Names������������������������������������������������������������������������������20
Vectorized Functions�������������������������������������������������������������������������������������������21
Infix Operators����������������������������������������������������������������������������������������������������27
Replacement Functions��������������������������������������������������������������������������������������31

Chapter 3: Pure Functional Programming������������������������������������������41


Writing Pure Functions����������������������������������������������������������������������������������������42
Recursion As Loops���������������������������������������������������������������������������������������������44
The Structure of a Recursive Function����������������������������������������������������������������49
Tail-Recursion�����������������������������������������������������������������������������������������������������58
Runtime Considerations��������������������������������������������������������������������������������������60

iii
Table of Contents

Chapter 4: Scope and Closures�����������������������������������������������������������65


Environments and Functions������������������������������������������������������������������������������68
Environment Chains, Scope, and Function Calls�������������������������������������������������71
Scopes, Lazy Evaluation, and Default Parameters����������������������������������������������74
Nested Functions and Scopes�����������������������������������������������������������������������������78
Closures��������������������������������������������������������������������������������������������������������������84
Reaching Outside Your Innermost Scope������������������������������������������������������������86
Lexical and Dynamic Scope��������������������������������������������������������������������������������90

Chapter 5: Higher-Order Functions�����������������������������������������������������93


Currying��������������������������������������������������������������������������������������������������������������96
A Parameter Binding Function��������������������������������������������������������������������������103
Continuation-Passing Style�������������������������������������������������������������������������������105
Thunks and Trampolines�����������������������������������������������������������������������������������111

Chapter 6: Filter, Map, and Reduce���������������������������������������������������119


The General Sequence Object in R Is a List������������������������������������������������������120
Filtering Sequences������������������������������������������������������������������������������������������122
Mapping over Sequences����������������������������������������������������������������������������������124
Reducing Sequences����������������������������������������������������������������������������������������127
Bringing the Functions Together�����������������������������������������������������������������������130
The Apply Family of Functions��������������������������������������������������������������������������134
sapply, vapply, and lapply����������������������������������������������������������������������������������134
The apply Function��������������������������������������������������������������������������������������������136
The tapply Function������������������������������������������������������������������������������������������137
Functional Programming in purrr����������������������������������������������������������������������138
Filter-like Functions������������������������������������������������������������������������������������������139

iv
Table of Contents

Map-like Functions�������������������������������������������������������������������������������������������141
Reduce-like Functions��������������������������������������������������������������������������������������144

Chapter 7: Point-Free Programming�������������������������������������������������145


Function Composition���������������������������������������������������������������������������������������146
Pipelines�����������������������������������������������������������������������������������������������������������148

Chapter 8: Conclusions���������������������������������������������������������������������153

Index�������������������������������������������������������������������������������������������������155

v
About the Author
Thomas Mailund is Senior Software Architect
at Kvantify, a quantum computing company
from Denmark. He has a background in
math and computer science. He now works
on developing algorithms for computational
problems applicable for quantum computing.
He previously worked at the Bioinformatics
Research Centre, Aarhus University, on
genetics and evolutionary studies, particularly
comparative genomics, speciation, and
gene flow between emerging species. He has
published Beginning Data Science in R with
Apress, as well as other books out there.

vii
About the Technical Reviewer
Megan J. Hirni is currently pursuing her
PhD at the University of Missouri-Columbia
with a focus on applied statistics research. In
addition to her love for R coding, Megan loves
meeting new people and learning new topics
in multifaceted fields.

ix
Acknowledgments
I would like to thank Duncan Murdoch and the people on the R-help
mailing list for helping me work out a kink in lazy evaluation in the
trampoline example.

xi
CHAPTER 1

Introduction
Welcome to Functional Programming in R 4. I wrote this book to have
teaching material beyond the typical introductory level most textbooks
on R have, where functions are simple constructions for wrapping up
some reusable instructions that you can then call when you need those
instructions run. In languages such as R, functions are more than this.
They are objects in their own right that you can also treat as data, create
and manipulate and pass around like other objects, and learning how to
do this will make you a far more effective R programmer.
The R language is a multiparadigm language with elements from
procedural programming, object-oriented programming, and functional
programming. Procedural programming focuses on the instructions you
want the computer to execute—add these numbers, put the result in
this variable, loop through this list, etc. Object-oriented programming,
on the other hand, focuses on what kind of data you manipulate, which
operations you can perform on them, and how they change when you
manipulate them. If you are interested in these aspects of the R language, I
have written another book, Advanced Object-Oriented Programming in R,
also by Apress, that you might be interested in.
Functional programming is the third style of programming, where
the focus is on transformations. Functions transform data from input to
output, and by composing transformations, you construct programs from
simpler functions to more involved pipelines for your data. In functional
programming, functions themselves are considered data, and just as with
other data, you can write transformations that take functions as input and

© Thomas Mailund 2023 1


T. Mailund, Functional Programming in R 4, https://doi.org/10.1007/978-1-4842-9487-1_1
Chapter 1 Introduction

produce (other) functions as output. You can thus write simple functions,
then adapt them (using other functions to modify them), and combine
them in various ways to construct complete programs.
The R programming language supports procedural programming,
object-oriented programming, and functional programming, but it is mainly
a functional language. It is not a “pure” functional language. Pure functional
languages will not allow you to modify the state of the program by changing
values parameters hold and will not allow functions to have side effects (and
need various tricks to deal with program input and output because of it).
R is somewhat close to “pure” functional languages. In general, data
is immutable, so changes to data inside a function do ordinarily not
alter the state of data outside that function. But R does allow side effects,
such as printing data or making plots, and, of course, allows variables to
change values.
Pure functions have no side effects, so a function called with the same
input will always return the same output. Pure functions are easier to
debug and to reason about because of this. They can be reasoned about in
isolation and will not depend on the context in which they are called. The
R language does not guarantee that the functions you write are pure, but
you can write most of your programs using only pure functions. By keeping
your code mostly purely functional, you will write more robust code and
code that is easier to modify when the need arises.
You will want to move the impure functions to a small subset of your
program. These functions are typically those that need to sample random data
or that produce output (either text or plots). If you know where your impure
functions are, you know when to be extra careful with modifying code.
The next chapter contains a short introduction to functions in R. Some
parts you might already know, and so feel free to skip ahead, but I give a
detailed description of how functions are defined and used to ensure that
we are all on the same page. The following chapters then move on to more
complex issues.

2
CHAPTER 2

Functions in R
In this chapter, we cover how to write functions in R. If you already know
much of what is covered, feel free to skip ahead. We will discuss the
way parameters are passed to functions as “promises,” a way of passing
parameters known as lazy evaluation. If you are not familiar with that but
know how to write functions, you can jump forward to that section. We will
also cover how to write infix operators and replacement functions, so if you
do not know what those are, and how to write them, you can skip ahead to
those sections. If you are new to R functions, continue reading from here.

Writing Functions in R
You create an R function using the function keyword or, since R 4.1, the
\() syntax. For example, we can write a function that squares numbers
like this:

square <- function(x) x**2

or like this:

square <- \(x) x**2

and then use it like this:

square(1:5)

## [1]  1  4  9  16  25

© Thomas Mailund 2023 3


T. Mailund, Functional Programming in R 4, https://doi.org/10.1007/978-1-4842-9487-1_2
Chapter 2 Functions in R

The shorter syntax, \(x) x**2, is intended for so-called “lambda


expressions,” and the backslash notation is supposed to look like the Greek
letter lambda, λ. Lambda expressions are useful when we need to provide
short functions as arguments to other functions, which is something we
return to in later chapters. Usually, we use the function() syntax when
defining reusable functions, and I will stick to this notation in every case
where we define and name a function the way we did for square earlier.
The function we have written takes one argument, x, and returns the
result x**2. The return value of a function is always the last expression
evaluated in it. If you write a function with a single expression, you can
write it as earlier, but for more complex functions, you will typically need
several statements in it. If you do, you can put the function’s body in curly
brackets like this:

square <- function(x) {


    x**2
}

The following function needs the curly brackets since it needs three
separate statements to compute its return value, one for computing the
mean of its input, one for getting the standard deviation, and a final
expression that returns the input scaled to be centered on the mean and
having one standard deviation.

rescale <- function(x) {


    m <- mean(x)
    s <- sd(x)
     (x - m) / s
}

The first two statements are just there to define some variables we can
use in the final expression. This is typical for writing short functions.

4
Chapter 2 Functions in R

Variables you assign to inside a function will only be visible from inside
the function. When the function completes its execution, the variables
cease to exist. From inside a function, you can see the so-called local
variables—the function arguments and the variables you assign to in the
function body—and you can see the so-called global variables—those
assigned to outside of the function. Outside of the function, however, you
can only see the global variables. At least that is a good way to think about
which variables you can see at any point in a program until we get to the
gritty details in Chapter 4. For now, think in terms of global variables and
local variables, where anything you write outside a function is in the first
category and can be seen by anyone, and where function parameters
and variables assigned to inside functions are in the second category;
see Figure 2-1. If you have the same name for both a global and a local
variable, as in the figure where we have a global variable x and a function
parameter x, then the name always refers to the local variable.

Figure 2-1. Local and global variables

Assignments are really also expressions. They return an object, the


value that is being assigned; they just do so quietly. R considers some
expressions “invisible,” and while they do evaluate to some value or
other—all expressions do—R does not print the result. Assignments are
invisible in this way; they do return to the value on the right-hand side of the

5
Chapter 2 Functions in R

assignment, but R makes the result invisible. You can remove this invisibility
by putting an assignment in parentheses. The parentheses make R remove
the invisibility of the expression result, so you see the actual value:

(x <- 1:5)

## [1]  1  2  3  4  5

You can also go the other way and make a value invisible. When you
evaluate an expression, R will print it:

x**2

## [1]  1  4  9  16  25

but if you put the expression in a call to invisible, R will not print
the result:

invisible(x**2)

We usually use assignments for their side effect, assigning a name to


a value, so you might not think of them as expressions, but everything
you do in R is actually an expression. That includes control structures
like if-statements and for-loops. They return values. They are actually
functions themselves, and they return values. If you evaluate an
if-statement, you get the value of the last expression in the branch it takes:

if (2 + 2 == 4) "Brave New World" else "1984"

## [1] "Brave New World"

If you evaluate a loop, you get the value NULL (and not the last
expression in its body):

x <- for (i in 1:10) i


x

## NULL

6
Chapter 2 Functions in R

Even parentheses and subscripting are functions. Parentheses


evaluate to the value you put inside them (but stripped of invisibility), and
subscripting, [...] or [[...]], evaluates to some appropriate value on the
data structure you are accessing (and you can define how this will work for
your own data structures if you want to).
If you want to return a value from a function before its last expression,
you can use the return function. It might look like a keyword, but it is a
function, and you need to include the parentheses when you use it. Many
languages will let you return a value by writing

return expression

Not R. In R, you need to write

return(expression)

If you are trying to return a value, this will not cause you much trouble.
R will tell you that you have a syntax error if you use the former and
not the latter syntax. Where it can be a problem is if you want to return
from a function without providing a value (in which case the function
automatically returns NULL).
If you write something like this:

f <- function(x) {
  if (x < 0) return;
  # Something else happens here...
}

you will not return if x is negative. The if-expression evaluates to the


function return, which is not what you want. Instead, you must write

f <- function(x) {
  if (x < 0) return();
  # Something else happens here...
}

7
Chapter 2 Functions in R

If x is negative, we call return(), which will return NULL. (To return a


value, val, use return(val)).
Return is usually used to exit a function early and isn’t used that
much in most R code. It is easier to return a value by just making it the last
expression in a function than it is to explicitly use return. But you can use
it to return early like this:

rescale <- function(x, only_translate) {


    m <- mean(x)
    translated <- x - m
    if (only_translate) return(translated)
    s <- sd(x)
    translated / s
}
rescale(1:4, TRUE)

## [1] -1.5 -0.5  0.5  1.5

rescale(1:4, FALSE)

## [1] -1.1618950 -0.3872983  0.3872983  1.1618950

This function has two arguments, x and only_translate. Your


functions can have any number of parameters. When a function takes
many arguments, however, it becomes harder to remember in which order
you have to put them. To get around that problem, R allows you to provide
the arguments to a function using their names. So the two function calls
earlier can also be written as

rescale(x = 1:4, only_translate = TRUE)


rescale(x = 1:4, only_translate = FALSE)

8
Chapter 2 Functions in R

Named Parameters and Default Parameters


If you use named arguments, the order doesn’t matter, so this is also
equivalent to these function calls:

rescale(only_translate = TRUE, x = 1:4)


rescale(only_translate = FALSE, x = 1:4)

You can mix positional and named arguments. The positional


arguments have to come in the same order as used in the function
definition, and the named arguments can come in any order. All the
following four function calls are equivalent:

rescale(1:4, only_translate = TRUE)


rescale(only_translate = TRUE, 1:4)
rescale(x = 1:4, TRUE)
rescale(TRUE, x = 1:4)

When you provide a named argument to a function, you don’t need to


use the full parameter name. Any unique prefix will do. So we could also
have used the following two function calls:

rescale(1:4, o = TRUE)
rescale(o = TRUE, 1:4)

This is convenient for interactive work with R because it saves some


typing, but I do not recommend it when you are writing programs. It can
easily get confusing, and if the author of the function adds a new argument
to the function with the same prefix as the one you use, it will break your
code. If the function author provides a default value for that parameter,
your code will not break if you use the full argument name. Not breaking,
in a situation like this, is a whole lot worse than breaking, because the code
will not do the right thing and you will not be immediately aware of that.

9
Chapter 2 Functions in R

Now, default parameters are provided when the function is defined.


We could have given rescale a default parameter for only_translate
like this:

rescale <- function(x, only_translate = FALSE) {


    m <- mean(x)
    translated <- x - m
    if (only_translate) return(translated)
    s <- sd(x)
    translated / s
}

Then, if we call the function, we only need to provide x if we are happy


with the default value for only_translate.

rescale(1:4)

## [1] -1.1618950 -0.3872983  0.3872983  1.1618950

R makes heavy use of default parameters. Many commonly used


functions, such as plotting functions and model fitting functions, have lots
of arguments. These arguments let you control in great detail what the
functions do, making them very flexible, and because they have default
values, you usually only have to worry about a few of them.

T he “Gobble Up Everything Else”


Parameter: “...”
There is a special parameter all functions can take called .... This
parameter is typically used to pass parameters on to functions called
within a function. To give an example, we can use it to deal with missing
values, NA, in the rescale function.

10
Chapter 2 Functions in R

We can write (where I’m building from the shorter version)

rescale <- function(x, ...) {


    m <- mean(x, ...)
    s <- sd(x, ...)
    (x - m) / s
}

If we give this function a vector x that contains missing values, it will


return NA:

x <- c(NA, 1:3)


rescale(x)

## [1] NA NA NA NA

It would also have done that before because that is how the functions
mean and sd work. But both of these functions take an additional
parameter, na.rm, that will make them remove all NA values before they do
their computations. Our rescale function can do the same now:

rescale(x, na.rm = TRUE)

## [1]  NA -1  0  1

The first value in the output is still NA. Rescaling an NA value can’t be
anything else. But the rest are rescaled values where that NA was ignored
when computing the mean and standard deviation.
The “...” parameter allows a function to take any named parameter
at all. If you write a function without it, it will only take the predetermined
parameters, but if you add this parameter, it will accept any named
parameter at all:

f <- function(x) x
g <- function(x, ...) x
f(1:4, foo = "bar")

11
Chapter 2 Functions in R

## Error in f(1:4, foo = "bar"): unused argument (foo = "bar")

g(1:4, foo = "bar")

## [1] 1 2 3 4

If you then call another function with “...” as a parameter, then all the
parameters the first function doesn’t know about will be passed on to the
second function:

f <- function(...) list(...)


g <- function(x, y, ...) f(...)
g(x = 1, y = 2, z = 3, w = 4)

## $z
## [1] 3
##
## $w
## [1] 4

In the preceding example, function f creates a list of named elements


from “...”, and as you can see, it gets the parameters that g doesn’t
explicitly take.
Using “...” is not particularly safe. It is often very hard to figure out
what it actually does in a particular piece of code. What is passed on to
other functions depends on what the first function explicitly takes as
arguments, and when you call a second function using it, you pass along
all the parameters in it. If the function you call doesn’t know how to deal
with them, you get an error:

f <- function(w) w
g <- function(x, y, ...) f(...)
g(x = 1, y = 2, z = 3, w = 4)

## Error in f(...): unused argument (z = 3)

12
Chapter 2 Functions in R

In the rescale function, it would have been much better to add the rm.
na parameter explicitly.
That being said, “...” is frequently used in R. Particularly because
many functions take very many parameters with default values,
and adding these parameters to all functions calling them would be
tedious and error-prone. It is also the best way to add parameters when
specializing generic functions, which is a topic for another book, Advanced
Object-Oriented Programming in R, by yours truly.

Lazy Evaluation
Expressions used in a function call are not evaluated before they are
passed to the function. Most common languages have so-called pass-by-­
value semantics, which means that all expressions given to parameters of
a function are evaluated before the function is called. In R, the semantic is
“call-by-promise,” also known as “lazy evaluation.”
When you call a function and give it expressions as its arguments,
these are not evaluated at that point. What the function gets is not the
result of evaluating them but the actual expressions, called “promises”
(they are promises of an evaluation to a value you can get when you need it),
thus the term “call-by-promise.” These expressions are only evaluated
when they are actually needed, thus the term “lazy evaluation.”
This has several consequences for how functions work. First of all, an
expression that isn’t used in a function isn’t evaluated:

f <- function(a, b) a
f(2, stop("error if evaluated"))

## [1] 2

f(stop("error if evaluated"), 2)

## Error in f(stop("error if evaluated"), 2): error if


evaluated

13
Chapter 2 Functions in R

If you have a parameter that can only be meaningfully evaluated in


certain contexts, it is safe enough to have it as a parameter as long as you
only refer to it when those necessary conditions are met.
It is also very useful for default values of parameters. These are
evaluated inside the scope of the function, so you can write default values
that depend on other parameters:

f <- function(a, b = a) a + b
f(a = 2)

## [1] 4

This does not mean that all the expressions are evaluated inside the
scope of the function, though. We discuss scopes in Chapter 4, but for now,
you can think of two scopes: the global scope where global variables live
and the function scope that has parameters and local variables as well.
If you call a function like this:

f(a = 2, b = a)

you will get an error if you expect b to be the same as a inside the function.
If you are lucky and there isn’t any global variable called a, you will get a
runtime error. If you are unlucky and there is a global variable called a, that
is what b will be assigned, and if you expect it to be set to 2 here, your code
will just give you an incorrect answer.
However, it is safe for a default parameter to be an expression that
uses some of the other function arguments. The default parameters are
evaluated after the function is called, where they have access to the other
arguments. An expression you use when calling a function, however,
doesn’t see the local variables inside the function, but the variables you
have in the calling scope.

14
Chapter 2 Functions in R

Figure 2-2. Where arguments and default arguments are evaluated

Consider Figure 2-2. We have a function, f, that takes two arguments,


a and b, where b has a default of 2*a. If we call it as f(2*a, b = 2*a), then
both arguments will be expressions that R knows have to be evaluated in
the global scope where a is the list 1 2 3 4 5 and where we don’t have a
b. Neither parameter will be evaluated until we look at the arguments, but
when we do, both will be evaluated and to the same value since both are
2*a and a refers to the global a. If, however, we call f as f(2*a) so b gets the
default value, we are in a different situation. Inside the function call, a still
refers to the expression 2*a to be evaluated in the global scope, but b, also
still referring to the expression 2*a, will be evaluated in the local scope. So,
if we evaluate b, we will first evaluate the parameter a to get 2*a (evaluated
using the global a) 2 4 6 8 10, and then we evaluate 2*a with this local a
to get 4 8 12 16 20.
So, while arguments aren’t evaluated yet when you call a function, they
will be when you access them. If they are default arguments, you evaluate
them inside the function, and if they were provided in the function call,
you evaluated them outside the call, where the function was called.

15
Chapter 2 Functions in R

This also means that you cannot change what an expression evaluates
to just by changing a local variable:

a <- 4
f <- function(x) {
    a <- 2
    x
}
f(1 + a)

## [1] 5

In this example, the expression 1 + a is evaluated inside f, but the a in


the expression is the a outside of f and not the a local variable inside f.
This is of course what you want. If expressions really were evaluated
inside the scope of the function, then you would have no idea what they
evaluated to if you called a function with an expression. It would depend
on any local variables the function might use.
Because expressions are evaluated in the calling scope and not the
scope of the function, you mostly won’t notice the difference between call-­
by-­value and call-by-promise. There are certain cases where the difference
can bite you, though, if you are not careful.
As an example, we can consider this function:

f <- function(a) function(b) a + b

This might look a bit odd if you are not used to it, but it is a function
that returns another function. We will see many examples of this kind of
functions in later chapters.
When we call f with a parameter a, we get a function back that will add
a to its argument:

f(2)(2)

## [1] 4

16
Chapter 2 Functions in R

We can create a list of functions from this f:

ff <- vector("list", 4)
for (i in 1:4) {
  ff[[i]] <- f(i)
}
ff

## [[1]]
## function(b) a + b
## <bytecode: 0x7fe446ad68a8>
## <environment: 0x7fe446a07ca0>
##
## [[2]]
## function(b) a + b
## <bytecode: 0x7fe446ad68a8>
## <environment: 0x7fe446ad71e8>
##
## [[3]]
## function(b) a + b
## <bytecode: 0x7fe446ad68a8>
## <environment: 0x7fe446ad7098>
##
## [[4]]
## function(b) a + b
## <bytecode: 0x7fe446ad68a8>
## <environment: 0x7fe446ad6f48>

Here, ff contains four functions, and the idea is that the first of these
adds 1 to its argument, the second adds 2, and so on.

17
Chapter 2 Functions in R

If we call the functions in ff, however, weird stuff happens:

ff[[1]](1)

## [1] 5

When we get the element ff[[1]], we get the first function we created
in the loop. If we substitute into f the value we gave in the call, this is

function(b) i + b

The parameter a from f has been set to the parameter we gave it, i, but
i has not been evaluated at this point!
When we call the function, the expression is evaluated, in the global
scope, but there i now has the value 4 because that is the last value it was
assigned in the loop. The value of i was 1 when we called it to create the
function, but it is 5 when the expression is actually evaluated.
This also means that we can change the value of i before we evaluate
one of the functions, and this changes it from the value we intended when
we created the function:

i <- 1
ff[[2]](1)

## [1] 2

This laziness is only in effect the first time we call the function. If we
change i again and call the function, we get the same value as the first time
the function was evaluated:

i <- 2
ff[[2]](1)

## [1] 2

18
Chapter 2 Functions in R

We can see this in effect by looping over the functions and


evaluating them:

results <- vector("numeric", 4)


for (i in 1:4) {
  results[i] <- ff[[i]](1)
}
results

## [1] 5 2 4 5

We have already evaluated the first two functions, so they are stuck at
the values they got at the time of the first evaluation. The other two get the
intended functionality but only because we are setting the variable i in
the loop where we evaluate the functions. If we had used a different loop
variable, we wouldn’t have been so lucky.
This problem is caused by having a function with an unevaluated
expression that depends on variables in the outer scope. Functions
that return functions are not uncommon, though, if you want to exploit
the benefits of having a functional language. It is also a consequence
of allowing variables to change values, something most functional
programming languages do not allow for such reasons. You cannot entirely
avoid it, though, by avoiding for-loops. If you call functions that loop for
you, you do not necessarily have control over how they do that, and you
can end up in the same situation.
The way to avoid the problem is to force an evaluation of the
parameter. If you evaluate it once, it will remember the value, and the
problem is gone.
You can do that by just writing the parameter as a single statement.
That will evaluate it. It is better to use the function force though, to
make it explicit that this is what you are doing. It really just gives you the
expression back, so it works exactly as if you just wrote the parameter, but
the code makes clear why you are doing it.

19
Chapter 2 Functions in R

If you do this, the problem is gone:

f <- function(a) {
  force(a)
  function(b) a + b
}

ff <- vector("list", 4)
for (i in 1:4) {
  ff[[i]] <- f(i)
}

ff[[1]](1)

## [1] 2

i <- 1
ff[[2]](1)

## [1] 3

Functions Don’t Have Names


The last thing I want to stress when we talk about defining functions is that
functions do not have names. Variables have names, and variables can
refer to functions, but these are two separate things.
In many languages, such as Java, Python, or C++, you define a function,
and at the same time, you give it an argument. When possible at all, you
need a special syntax to define a function without a name.
Not so in R. In R, functions do not have names, and when you define them,
you are not giving them a name. We have given names to all the functions
we have used earlier by assigning them to variables right where we defined
them. We didn’t have to. It is the “function(...) ...” syntax that defines a
function. We are defining a function whether we assign it to a variable or not.

20
Another random document with
no related content on Scribd:
kultaesineitä, mutta jätti kymmenen kertaa kallisarvoisemmat
pikkuesineet ottamatta. Hän otti myös yhtä ja toista itselleen
muistoksi, mutta siitä enemmän edempänä. Tehtyään tämän
kauhean teon hän poistui samaa tietä kuin oli tullutkin. Ei
seuraavana päivänä, jolloin asiasta nousi hälinä, eikä koskaan
myöhemmin koko hänen elämänsä aikana kenenkään päähänkään
pälkähtänyt kohdistaa epäluuloja todelliseen tihutyön tekijään! Eikä
kukaan tietänyt hänen rakkaudestaankaan vainajaan, sillä hän oli
aina ollut luonteeltaan harvapuheinen ja juro, eikä hänellä ollut
ketään ystävää, jolle olisi avannut sydämensä. Häntä pidettiin
yksinkertaisesti murhatun tuttuna eikä aivan läheisenäkään, sillä
viimeisten kahden viikon aikana hän ei ollut käynyt tämän luona.
Ruvettiin heti epäilemään vainajan palvelijana olevaa maaorjaa
Pjotria, ja kaikki asianhaarat vahvistivat tätä epäluuloa, sillä tämä
palvelija tiesi, eikä vainajakaan ollut sitä salannut, että emäntä aikoi
antaa hänet sotamieheksi, koska hänen oli talonpojistaan annettava
rekryyttejä ja koska Pjotr oli yksinäinen mies ja sitäpaitsi
huonokäytöksinen. Oli kuultu Pjotrin äkäpäissään juopuneena
kapakassa uhanneen tappaa emäntänsä. Kaksi päivää ennen
emäntänsä kuolemaa oli Pjotr karannut talosta ja elänyt kaupungilla
tietymättömissä. Murhan jälkeisenä päivänä hänet löydettiin
maantieltä aivan kaupungin luota sikahumalassa, taskussaan veitsi
ja oikea kämmen jostakin syystä veren tahrimana. Hän väitti veren
tulleen nenästään, mutta häntä ei uskottu. Sisäköt myönsivät
tehneensä itsensä syypäiksi siihen, että olivat olleet keinuissa ja että
ulko-ovi kuistissa oli ollut lukitsematta siihen asti, kunnes he
palasivat kotiin. Ilmeni vielä monta muutakin tämänkaltaista seikkaa,
ja niiden nojalla otettiin viaton palvelija kiinni. Hänet vangittiin, ja
oikeudenkäynti alkoi, mutta viikon kuluttua vanki sairastui
kuumeeseen ja kuoli sairaalassa tajuihinsa tulematta. Siihen asia
päättyi, kaikki jäi Jumalan huostaan, ja kaikki, niin tuomarit ja
esivalta kuin yhteiskuntakin, jäivät vakuutetuiksi siitä, että rikosta ei
ollut tehnyt kukaan muu kuin kuollut palvelija. Mutta tämän jälkeen
alkoi rangaistus.

Salaperäinen vieras, joka nyt oli ystäväni, kertoi minulle, että


alussa hänellä ei juuri ollenkaan ollut omantunnon vaivoja. Hänen oli
pitkän aikaa paha olla, mutta ainoastaan sen tähden, että oli
tappanut rakkaan naisen, että tätä ei enää ollut olemassa, että
tappaessaan hänet oli tappanut lempensäkin, intohimon jäädessä
edelleen palamaan hänen veressään. Mutta että hän oli vuodattanut
viatonta verta ja että hän oli tappanut ihmisen, sitä hän ei silloin juuri
ollenkaan ajatellut. Ajatus, että hänen uhristaan olisi tullut toisen
puoliso, tuntui hänestä mahdottomalta, ja sentähden hän oli pitkät
ajat tunnossaan vakuutettu siitä, ettei ollut voinut menetellä toisin.
Häntä vaivasi alussa jonkin verran palvelijan vangitseminen, mutta
vangin pikainen sairastuminen ja kuolema rauhoittivat häntä, sillä
aivan ilmeisesti tämä (niin hän ajatteli silloin) ei ollut kuollut
vangitsemisen johdosta eikä pelästyksestä, vaan vilustuksesta
johtuneeseen tautiin, jonka hän oli saanut karkumatkoillaan
maatessaan koko yön sikahumalassa kostealla maalla. Varastetut
esineet ja rahat eivät häntä paljoa vaivanneet, sillä (niin hän ajatteli
edelleen) varkaus ei ollut tapahtunut voitonhimosta, vaan sen
tarkoituksena oli ollut johtaa epäluulot toisaalle. Varastettu
rahamäärä oli taas vähäinen, ja tämän määrän sekä vielä paljon
enemmän hän lahjoitti kaupunkiimme perustettavaa vaivaistaloa
varten. Hän teki sen vartavasten rauhoittaakseen omaatuntoaan
varkauden johdosta, ja omituista kyllä, hän sai todellakin mielelleen
rauhan joksikin, vieläpä melkoisen pitkäksi aikaa, — hän kertoi itse
minulle siitä. Sitten hän antautui uutterasti virkatoimiin, pyrki itse
huolia tuottavaan ja vaikeaan tehtävään, joka vei häneltä parin
vuoden ajan, ja lujaluontoinen kun oli, melkein unohti mitä oli
tapahtunut; kun se muistui hänen mieleensä, niin hän koetti olla sitä
kokonaan ajattelematta. Hän alkoi harjoittaa hyväntekeväisyyttä, teki
paljon aloitteita ja uhrasi paljon varoja meidän kaupungissamme, tuli
tunnetuksi pääkaupungeissakin, valittiin Moskovassa ja Pietarissa
sikäläisten hyväntekeväisyysyhdistysten jäseneksi. Mutta yhä
enemmän alkoi hänen ajatuksiaan askarruttaa tuska, joka oli hänelle
ylivoimainen. Hän mieltyi erääseen kauniiseen ja järkevään tyttöön ja
meni pian naimisiin tämän kanssa toivoen saavansa naimisellaan
karkoitetuksi yksinäisyytensä surumielisyyden sekä astumalla
uudelle tielle ja täyttämällä hartaasti velvollisuutensa vaimoaan ja
lapsiaan kohtaan irtautuvansa kokonaan vanhoista muistoista. Mutta
kävikin aivan päinvastoin kuin hän oli odottanut. Jo avioliiton
ensimmäisenä kuukautena alkoi häntä lakkaamatta kiusata ajatus:
»Vaimoni rakastaa minua, mutta entä jos hän saisi tietää?» Kun
vaimo tuli ensimmäisen kerran raskaaksi ja ilmoitti hänelle tämän,
niin hän äkkiä huolestui: »Annan hengen, mutta olen itse riistänyt
toiselta hengen.» Tuli lapsia: »Kuinka minä uskallan rakastaa,
opettaa ja kasvattaa heitä, kuinka voin puhua heille hyveestä: minä
olen vuodattanut verta.» Lapset kasvavat suloisina, tekee mieli
hyväillä heitä: »Minä en voi katsoa heidän viattomia, kirkkaita
kasvojaan; en ole sen arvoinen.» Viimein alkoi hänen eteensä
uhkaavana ja katkerana astua hänen murhaamansa uhrin veri, sen
nuori, tuhottu elämä, veri, joka huusi kostoa. Hän alkoi nähdä
kamalia unia. Mutta hänellä oli luja sydän, ja hän kesti tuskan kauan:
»Sovitan kaikki tällä salaisella kärsimykselläni.» Mutta turha oli
tämäkin toivo: mitä pitemmälle aika kului, sitä kovemmaksi tuli
kärsimys. Yhteiskunnassa alettiin häntä kunnioittaa hänen
hyväntekeväisyytensä tähden, vaikka kaikki pelkäsivätkin hänen
ankaraa ja synkkää luonnettaan, mutta kuta enemmän häntä
kunnioitettiin, sitä sietämättömämmäksi kävi hänen olonsa. Hän
tunnusti minulle aikoneensa tappaa itsensä. Mutta sen asemesta
alkoi hänen mieleensä kangastella toinen unelma, — unelma, jota
hän alussa piti mahdottomana ja järjettömänä, mutta joka lopulta niin
imeytyi hänen sydämeensä, että hän ei voinut sitä reväistä irti. Hän
unelmoi tämmöistä: hän nousee, astuu kansan eteen ja ilmoittaa
kaikille tappaneensa ihmisen. Kolmisen vuotta hän oli hautonut tätä
haavetta, se väikkyi hänen mielessään alati eri muodoissa. Viimein
hän alkoi koko sydämestään uskoa, että ilmoittamalla rikoksensa
hän ehdottomasti lääkitsee sielunsa ja saa rauhan lopullisesti. Mutta
tultuaan tästä vakuutetuksi hän tunsi sydämensä kauhistuvan, sillä
miten hän panisi sen toimeen? Silloin sattui tuo tapaus minun
kaksintaistelussani. »Teitä katsellessani olen nyt tehnyt päätökseni.»
Katson häneen.

»Saattoiko todellakin», huudahdin hänelle käsiäni yhteen lyöden,


»niin pieni tapahtuma synnyttää teissä tuommoisen
päättäväisyyden?»

»Päätökseni on ollut syntymässä kolme vuotta», vastaa hän


minulle, »ja teidän tapauksenne antoi sille vain sysäyksen. Teitä
katsellessani minä soimasin itseäni ja aloin kadehtia teitä.» Hän
lausui tämän minulle melkein tylysti.

»Mutta eihän teitä uskota», huomautin. »Siitä on kulunut


neljätoista vuotta.»

»Minulla on todistuksia, sangen hyviä. Esitän ne.»

Minä aloin silloin itkeä ja suutelin häntä.


»Ratkaiskaa minulle yksi asia, yksi asia», sanoi hän minulle (aivan
kuin kaikki nyt olisi riippunut minusta), »vaimo, lapset! Vaimoni
kenties kuolee surusta, ja lapset, vaikka eivät menetäkään
aatelisarvoa eivätkä omaisuuttaan, — ovat kuitenkin pakkotyövangin
lapsia kaiken ikänsä. Ja millaisen muiston, millaisen muiston
jätänkään heidän sydämiinsä itsestäni!»

Olen vaiti.

»Erota heistä, jättää iäksi? Sehän on iäksi, iäksi.»

Istun ääneti ja luen itsekseni rukousta. Nousin viimein, minua oli


alkanut peloittaa.

»No mitä?» hän katsoo minuun.

»Menkää», — sanon, — »ilmoittakaa ihmisille. Kaikki menee


ohitse, totuus yksin jää. Lapset ymmärtävät suuriksi kasvettuaan,
kuinka paljon jaloutta oli suuressa päättäväisyydessänne.»

Hän lähti silloin luotani niinkuin todellakin olisi tehnyt päätöksensä.


Mutta kuitenkin hän kävi sen jälkeen luonani yli kahden viikon aikana
aivan joka ilta, valmistautui yhä eikä päässyt päätökseen. Hän kidutti
sydämeni pahanpäiväiseksi. Saapuu joskus lujana ja sanoo
liikutettuna:

»Tiedän, että paratiisi alkaa minulle, alkaa heti, kun teen


ilmoitukseni. Neljätoista vuotta olen ollut helvetissä. Tahdon kärsiä.
Otan kärsimyksen ja alan elää. Vääryydellä voi mennä maailman
läpi, mutta ei palata takaisin… Nyt en uskalla rakastaa lähimmäistäni
enkä edes lapsianikaan. Herra Jumala, ymmärtäväthän lapseni
kenties, mitä kärsimykseni ovat minulle maksaneet, eivätkä tuomitse
minua! Jumala ei ole voimassa, vaan totuudessa.»

»Kaikki ymmärtävät teidän sankaritekonne», sanon hänelle, »jos


eivät ymmärrä nyt, niin ymmärtävät myöhemmin, sillä te olette
palvellut korkeinta totuutta, maallisen yläpuolella olevaa…»

Ja hän lähtee luotani ikäänkuin lohdutettuna, mutta seuraavana


päivänä hän tulee taas äkkiä ilkeänä, kalpeana, puhuu pilkallisesti:

»Joka kerta kun tulen teille, te katsotte niin uteliaana: Vieläkäänkö,


muka, ei ole ilmoittanut? Odottakaa, älkää kovin halveksiko. Ei sitä
ole niin helppoa tehdä kuin teistä näyttää. Kenties en ollenkaan
teekään sitä. Ettehän te silloin mene ilmiantamaan minua, vai mitä?»

Mutta minä en suinkaan uskaltanut katsoa häntä


ymmärtämättömän uteliaasti, vaan pelkäsinpä katsahtaakin häneen.
Olin niin kiusaantunut, että olin sairas, ja sieluni oli kyynelien
vallassa. En saanut enää unta öisin.

»Tulen», jatkaa hän, »vaimoni luota. Ymmärrättekö, mitä vaimo


on? Kun läksin, huusivat lapset minulle: 'Hyvästi, isä, tulkaa pian
takaisin lukemaan kanssamme Lukemisia Lapsille.' Ei, te ette
ymmärrä tätä! Toisen hätä ei lisää älyä.»

Hänen silmänsä alkoivat säkenöidä, huulet vavahtelivat. Äkkiä hän


löi nyrkkinsä pöytään, niin että sillä olevat esineet hypähtelivät, —
hän oli niin lempeä mies, ensikertaa hänelle sattui tämmöistä.

»Ja onko tarpeellista?» hän huudahti. »Onko se tarpeellista?


Eihän ketään tuomittu, ei ketään lähetetty minun sijastani
pakkotyöhön, palvelija kuoli tautiin. Vuodattamastani verestä ovat
rangaistuksena minulle olleet kärsimykseni. Eikä minua uskotakaan,
ei mitään todistuskappaleitani uskota. Onko tarpeellista ilmoittaa,
onko tarpeellista? Vuodattamani veren tähden olen valmis
kärsimään tuskia vielä koko elämäni ajan, kunhan vain en vie
vaimoni ja lasteni onnea. Onko oikein tuhota heidät itseni mukana?
Emmeköhän me erehdy? Missä tässä on totuus? Ja ymmärtävätkö
ihmiset tämän totuuden, antavatko he sille arvoa, kunnioittavatko he
sitä?»

»Hyvä Jumala!» ajattelen itsekseni, »hän ajattelee ihmisten


kunnioitusta tämmöisenä hetkenä!» Ja niin sääli tuli minun silloin
häntä, että olisin ollut valmis jakamaan hänen kohtalonsa vain
tehdäkseni hänen olonsa helpommaksi. Huomaan hänen olevan
aivan kuin poissa suunniltaan. Minä kauhistuin, sillä minä ymmärsin
en vain järjelläni, vaan elävällä sielullani, mitä tuommoinen
päättäväisyys maksaa.

»Ratkaiskaa toki kohtaloni!» huudahti hän taas.

»Menkää ja ilmoittakaa», kuiskasin minä hänelle. En jaksanut


lausua sitä ääneen, mutta kuiskaukseni oli luja. Otin pöydältä
evankeliumin venäläisen käännöksen ja näytin hänelle Johanneksen
evankeliumin 12:nnen luvun 24:ttä värssyä:

»Totisesti, totisesti sanon minä teille: ellei maahan pudonnut nisun


jyvä kuole, niin se jää yksinänsä; mutta jos se kuolee, niin se tuo
paljon hedelmätä.» Olin juuri ennen hänen tuloaan lukenut tämän
paikan.

Hän luki. »Totta on», sanoo, mutta hymyilee katkerasti. »Niin,


näissä kirjoissa», sanoo vähän vaiti oltuaan, »on ihmeellisiä asioita.
On helppo työntää ne nenän alle. Ja kuka onkaan ne kirjoittanut,
ihmisetkö tosiaankin?»

»Pyhä Henki on kirjoittanut», sanon.

»Teidän on helppo laverrella», hymähti hän vielä, mutta nyt jo


miltei vihamielisesti. Otin taas kirjan, avasin siitä toisen paikan ja
näytin hänelle Hebrealaisepistolan 10:nnen luvun 31:ttä värssyä.
Hän luki: »Hirmuista on langeta elävän Jumalan käsiin.»

Hän luki sen ja viskasi samassa kirjan pois. Koko hänen ruumiinsa
alkoi vavista.

»Hirmuisen värssyn», sanoo, »valitsittekin, muuta ei voi sanoa.»


Hän nousi tuoliltaan. »No», sanoo, »hyvästi, kenties en tule enää…
paratiisissa tapaamme. Siitä on siis neljätoista vuotta, kun 'lankesin
elävän Jumalan käsiin', — niin siis näitä neljäätoista vuotta
nimitetään. Huomenna pyydän noita käsiä päästämään minut irti…»

Tahdoin syleillä ja suudella häntä, mutta en uskaltanut, — hänen


kasvonsa olivat niin vääristyneet, että oli vaikeata niitä katsoakin.
Hän lähti ulos. Herra Jumala, ajattelin minä, mihin on ihminen
lähtenyt! Laskeuduin polvilleni jumalankuvan eteen ja vuodatin
hänen puolestaan kyyneliä Pyhälle Neitsyelle, ainaiselle puoltajalle
ja auttajalle. Oli kulunut noin puoli tuntia siitä, kun olin kyynelsilmin
rukoillut, ja oli jo myöhäinen yön hetki, noin kello kahdentoista
tienoissa. Äkkiä näen oven avautuvan, ja hän astuu taas sisälle.
Minä hämmästyn.

»Missä olette ollut?» kysyn häneltä.


»Minä», hän sanoo, »minä luullakseni unohdin jotakin… kaiketi
nenäliinan… No, vaikka en olekaan mitään unohtanut, niin
antakaahan istahtaa.»

Hän istuutui tuolille. Seison hänen edessään. »Istuutukaa», hän


sanoo, »tekin». Minä istuuduin. Istuimme noin kaksi minuuttia, hän
katsoi minuun kiinteästi ja hymähti äkkiä, muistan sen, sitten nousi,
syleili minua voimakkaasti ja suuteli…

»Muista», hän sanoo, »miten tulin sinun luoksesi toistamiseen.


Kuuletko, muista se!»

Ensimmäisen kerran hän sinutteli minua. Sitten hän poistui.


»Huomenna», ajattelin.

Niin tapahtuikin. En tietänyt sinä iltana, että seuraava päivä sattui


olemaan hänen syntymäpäivänsä. Minä en ollut voinut sitä
keneltäkään kuulla. Sinä päivänä hänellä joka vuosi oli paljon
vieraita, sinne saapui koko kaupunki. Saapuivat nytkin. Ja silloin
päivällisen jälkeen hän astuu huoneen keskelle kädessä paperi —
asianmukainen ilmoitus viranomaisille. Ja koska hänen esimiehensä
olivat siellä saapuvilla, niin hän luki ääneen paperin kaikille
kokoontuneille, ja siinä oli koko rikos kuvattu yksityiskohtaisesti.
»Julmurina erotan itseni ihmisten yhteydestä, Jumala on lähestynyt
minua», hän lopetti kirjoituksensa, »tahdon kärsiä!» Samassa hän toi
esille ja pani pöydälle kaikki, millä aikoi todistaa rikoksensa ja mitä
oli säilyttänyt neljätoista vuotta: murhatun kultaesineet, jotka hän oli
anastanut johtaakseen epäluulot pois itsestään, nimittäin murhatun
kaulasta otetun medaljongin ja ristin, — medaljongissa vainajan
sulhasen kuva, murhatun muistikirjan ja lopuksi kaksi kirjettä:
sulhasen kirjeen murhatulle, jossa hän ilmoittaa pian palaavansa, ja
vainajan vastauksen tähän kirjeeseen, jonka hän oli aloittanut ja
jättänyt keskeneräisenä pöydälle lähettääkseen sen seuraavana
päivänä. Molemmat kirjeet oli murhaaja ottanut mukaansa, — miksi?
Miksi hän oli säilyttänyt niitä neljätoista vuotta, sen sijaan että olisi
hävittänyt ne langettavina todistuskappaleina? Ja kävi näin: kaikki
hämmästyivät ja kauhistuivat, eikä kukaan tahtonut uskoa, vaikka
kaikki olivat kuunnelleet tavattomalla mielenkiinnolla, mutta pitäen
kaikkea sairaan puheena; ja muutaman päivän kuluttua oli yleisenä
mielipiteenä kaikissa taloissa, että miesparka oli menettänyt
järkensä. Viranomaisten ja tuomarien oli pakko ryhtyä asiaan, mutta
se pysähtyi heidänkin käsissään alkuunsa: vaikka todisteiksi tuodut
esineet ja kirjeet panivatkin ajattelemaan, niin tultiin tässäkin siihen
johtopäätökseen, että jos nämä todistuskappaleet osoittautuisivatkin
oikeiksi, niin yksistään niiden perusteella ei kuitenkaan voisi nostaa
lopullista syytettä. Olihan mahdollista, että hän oli saanut kaikki
nämä esineet vainajalta itseltään tämän tuttuna ja hyvässä
luottamuksessa. Sain muuten kuulla, että monet surmatun tutut ja
sukulaiset myöhemmin totesivat esineet oikeiksi ja että tässä
suhteessa ei ollut mitään epäilemistä. Mutta tämän jutun ei oltu
sallittu nytkään päästä oikealle tolalle. Viiden päivän kuluttua tuli
kaikkien tietoon, että tuo niin paljon kärsinyt mies oli sairastunut ja
että hänen henkensä oli vaarassa. Mihin tautiin hän oli sairastunut,
sitä en voi selittää: puhuttiin sydämen toiminnan häiriintymisestä,
mutta saatiin tietää, että paikalle kutsutut lääkärit potilaan vaimon
pyynnöstä olivat tarkastaneet myös hänen sielullisen tilansa ja tulleet
siihen päätökseen, että alkava mielenhäiriö oli todettavissa. Minä en
ilmaissut mitään, vaikka kimppuuni käytiinkin kyselyin, mutta kun
tahdoin mennä häntä katsomaan, niin monet minua kovasti moittivat,
varsinkin hänen vaimonsa: »Tehän», sanoi hän minulle, »saatoitte
hänet pois tasapainosta, hän oli jo aikaisemminkin synkkä, ja viime
vuonna kaikki huomasivat hänessä tavatonta kiihtymystä ja hän
käyttäytyi omituisesti, ja juuri silloin te syöksitte hänet turmioon: te
olette hänen kanssaan lukemalla pannut hänen päänsä pyörälle, hän
istui luonanne kokonaisen kuukauden.» Eikä vain hänen vaimonsa,
vaan kaikki kaupunkilaiset kävivät kimppuuni ja syyttivät minua: »Te
olette syynä kaikkeen», sanovat. Minä olen vaiti, mutta iloitsen myös
sielussani, sillä näin Jumalan epäämättömän armon kohdanneen
miestä, joka oli noussut itseänsä vastaan ja itseään rangaissut. Enkä
voinut uskoa, että hän oli menettänyt järkensä. Viimein päästettiin
minutkin hänen luokseen, hän oli itse sitä hartaasti halunnut
sanoakseen minulle jäähyväiset. Astuin sisälle ja näin heti, että ei
vain hänen päivänsä, vaan tunnitkin olivat luetut. Hän oli heikko,
keltainen, kädet vapisevat, hän läähättää, mutta on lempeän ja
iloisen näköinen.

»Se on täytetty!» lausui hän minulle. »Jo kauan olen halunnut


nähdä sinua, miksi et ole tullut?»

En ilmoittanut hänelle, että minua ei ollut päästetty hänen


luokseen.

»Jumala on säälinyt minua ja kutsuu luokseen. Tiedän nyt


kuolevani, mutta tunnen riemua ja rauhaa ensimmäisen kerran niin
monen vuoden jälkeen. Heti tunsin sielussani paratiisin, kun täytin
sen, mitä piti. Nyt uskallan rakastaa lapsiani ja suudella heitä. Minua
ei uskota eikä kukaan ole uskonut, ei vaimoni eivätkä tuomarini;
eivät lapsenikaan koskaan usko. Näen siinä Jumalan armon lapsiani
kohtaan. Kuolen, ja nimeni jää heille tahrattomaksi. Mutta nyt
aavistan jo Jumalan, sydän riemuitsee kuin paratiisissa… olen
täyttänyt velvollisuuteni…»

Hän ei voi puhua, hengitys tukahtuu, hän puristaa lämpimästi


kättäni, katsoo minua palavin silmin. Mutta emme keskustelleet
kauan, hänen vaimonsa pistäytyi tavan takaa meitä katsomassa.
Hän ennätti kuitenkin kuiskata minulle:

»Muistatko, miten minä silloin toistamiseen tulin luoksesi


sydänyöllä? Käskin sinua vielä panemaan sen mieleesi. Tiedätkö,
miksi silloin tulin? Tulin tappaakseni sinut!»

Minä hätkähdin.

»Minä läksin silloin luotasi pimeään, kuljeskelin kaduilla ja


kamppailin itseni kanssa. Ja äkkiä tunsin sinua kohtaan niin suurta
vihaa, että sydämeni tuskin jaksoi sitä kestää. 'Nyt', ajattelen, 'hän
yksin on sitonut minut ja on minun tuomarini, en voi enää vapautua
huomisesta rangaistuksestani, sillä hän tietää kaikki.' Ei se ollut sitä,
että olisin pelännyt sinun ilmiantavan minut (ei ollut ajatustakaan
sinnepäin), vaan ajattelin: kuinka voin katsoa häneen, jos en
ilmianna itseäni? Ja vaikka sinä olisit ollut maailman ääressä, mutta
elossa, niin se ei olisi muuttanut asiaa; se ajatus oli sietämätön, että
sinä olit elossa ja tiedät kaikki sekä tuomitset minut. Vihasin sinua,
niinkuin sinä olisit ollut kaiken alkuna ja kaikkeen syypää. Palasin
silloin luoksesi, muistan, että pöydälläsi oli tikari. Istuuduin ja pyysin
sinua istuutumaan ja ajattelin kokonaisen minuutin. Jos olisin
tappanut sinut, niin olisin joka tapauksessa ollut turmion oma tämän
murhan tähden, vaikka en olisikaan ilmaissut entistä rikostani. Mutta
sitä minä en ollenkaan ajatellut enkä tahtonut ajatella sillä hetkellä.
Minä vain vihasin sinua ja tahdoin kostaa sinulle kaikin voimin
kaikesta. Mutta Jumalani voitti perkeleen sydämessäni. Tiedä
kuitenkin, että sinä et koskaan ole ollut lähempänä kuolemaa.»

Viikon kuluttua hän kuoli. Hänen ruumisarkkuaan saattoi hautaan


koko kaupunki. Esipappi puhui liikuttavia sanoja. Murehdittiin
kaameata sairautta, joka oli päättänyt hänen päivänsä. Mutta koko
kaupunki nousi minua vastaan, kun hänet oli haudattu, eikä minua
enää tahdottu nähdä taloissa vieraana. Tosin jotkut, alussa
harvalukuiset, mutta sitten yhä useammat, alkoivat uskoa tosiksi
hänen selityksiään ja rupesivat yhä enemmän käymään luonani ja
kyselemään suurella uteliaisuudella ja halulla: sillä ihminen näkee
mielellään vanhurskaan lankeemuksen ja hänen häpeänsä. Mutta
minä olin vaiti ja poistuin kohta koko kaupungista, ja viiden
kuukauden kuluttua Herra Jumala soi minun astua varmalle ja
oikealle tielle, ja minä siunaan näkymätöntä kättä, joka minut niin
selvästi tälle tielle ohjasi. Mutta paljon kärsinyttä Jumalan palvelijaa
Mikaelia olen muistanut rukouksissani joka päivä hamaan tähän
päivään saakka.

3.

Luostarinvanhin Zosiman keskusteluja ja opetuksia

e) Venäläisestä munkista ja hänen mahdollisesta merkityksestään

— Isät ja opettajat, mitä on munkki? Sivistyneessä maailmassa


tämän sanan lausuvat meidän päivinämme toiset ivallisesti ja jotkut
haukkumasananakin. Ja sitä enemmän, kuta pitemmälle aika kuluu.
Totta on, ah, totta, että paljon on munkkien joukossa laiskoittelijoita,
hekumoitsijoita, nautiskelijoita ja julkeita kulkureita. Näitä osoittavat
sivistyneet maallikot: »Te olette laiskureita ja hyödyttömiä
yhteiskunnan jäseniä, elätte toisten työstä, olette häpeämättömiä
kerjäläisiä.» Ja miten paljon kuitenkin onkaan munkkien joukossa
nöyriä ja lempeitä, semmoisia, jotka hartaasti haluavat yksinäisyyttä
ja palavaa rukousta hiljaisuudessa. Näitä mainitaan vähemmän,
vieläpä heistä kokonaan vaietaankin, ja kuinka
hämmästyttäisiinkään, jos sanon, että nämä lempeät ja
yksinäisyydessä rukousta haluavat kenties kerran vielä tuottavat
pelastuksen Venäjän maalle! Sillä totisesti he ovat hiljaisuudessa
valmistuneet »päivään ja hetkeen, kuukauteen ja vuoteen».
Kristuksen kuvan he säilyttävät siihen saakka yksinäisyydessään
loistossansa ja väärentämättömänä, Jumalan totuuden puhtaudessa,
semmoisena kuin sen ovat jättäneet ikivanhoista ajoista isät,
apostolit ja marttyyrit, ja tarpeen tullen he tuovat sen esille maailman
horjuvalle totuudelle. Tämä on suuri ajatus. Idästä tämä tähti
nousee.

Tämmöinen on ajatukseni munkista, ja onko se väärä, onko se


pöyhkeilevä? Katsokaa maallisia ja koko Jumalan kansan yläpuolelle
asettunutta maailmaa, eikö siinä ole Jumalan kuva ja Hänen
totuutensa väärentynyt? Heillä on tiede, mutta tieteessä vain se,
mikä riippuu tunteista. Mutta hengen maailma, ihmisolennon
korkeampi puoli, on kokonaan kielletty, karkoitettu jonkinmoisella
voitonriemulla, vieläpä vihamielisyydellä. Maailma on julistanut
vapauden, varsinkin viime aikoina, ja mitä me näemme tässä heidän
vapaudessaan: ainoastaan orjuutta ja itsemurhaa! Sillä maailma
sanoo: »Sinulla on haluja ja sentähden tyydytä niitä, sillä sinulla on
samat oikeudet kuin kaikkein ylhäisimmillä ja rikkaimmilla ihmisillä.
Älä pelkää tyydyttää niitä, vaan lisääkin niiden lukumäärää», — siinä
on maailman nykyinen oppi. Siinä he näkevät vapauden. Ja mikä on
seurauksena tästä oikeudesta lisätä halujaan? Rikkailla
eristäytyneisyys ja henkinen itsemurha, köyhillä — kateus ja murha,
sillä oikeudet on annettu, mutta keinoja halujen tyydyttämiseen ei
vielä ole osoitettu. Vakuutetaan maailman ajan kuluessa yhä
enemmän yhtyvän ja liittyvän veljelliseksi kokonaisuudeksi sen
johdosta, että se lyhentää välimatkat, siirtää ilman halki ajatuksia;
voi, älkää uskoko tuommoiseen ihmisten yhtymiseen. Käsittäessään
vapauden halujen lisäämiseksi ja nopeaksi tyydyttämiseksi he
väärentävät luontonsa, sillä he synnyttävät itsessään paljon
järjettömiä ja typeriä pyyteitä, tottumuksia ja mielettömiä
päähänpistoja. He elävät vain kadehtiakseen toisiaan,
hekumoidakseen ja pöyhkeilläkseen. Päivällisten, huviretkien,
vaunujen, virka-arvojen ja orjamaisten mielistelijäin merkitys on heille
niin suuri, että he pitävät semmoista välttämättömyytenä, jonka takia
uhraavat henkensä, kunnian ja ihmisrakkauden saadakseen tämän
välttämättömyyden tyydytetyksi, vieläpä tappavat itsensä, jos eivät
voi sitä tyydyttää. Niillä, jotka eivät ole rikkaita, näemme samaa, kun
taas köyhät tukahduttavat halujensa tyydyttämättömyyden ja
kateutensa juoppouteen. Mutta pian he viinan asemesta juovat verta,
siihen heitä johdetaan. Minä kysyn teiltä: onko tämmöinen ihminen
vapaa? Olen tuntenut erään »aatteen soturin», joka itse kertoi
minulle, että kun hänelle vankilassa ei annettu tupakkaa, niin sen
riistäminen kiusasi häntä niin, että hän oli vähällä mennä ja hylätä
»aatteensa», kunhan vain saisi tupakkaa. Mutta tämmöinen sanoo:
»Menen taisteluun ihmisyyden puolesta.» No, mihin tuollainen
menee ja mihin hän kelpaa? Ehkä tekemään jonkin nopeasti
suoritettavan teon, mutta kauan hän ei jaksa kestää. Eikä ole ihme,
että he vapauden asemesta ovat joutuneet orjuuteen, ja sen sijaan,
että palvelisivat veljesrakkautta ja ihmisten yhdistymistä, päinvastoin
ovat joutuneet erottautuneisuuteen ja eristäytyneisyyteen, niinkuin
nuoruudessani minulle puhui salaperäinen vieraani ja opettajani. Ja
sentähden maailmassa yhä enemmän ja enemmän sammuu ajatus
ihmiskunnan palvelemisesta, ihmisten veljeydestä ja
yhteenkuuluvaisuudesta, ja totisesti tätä ajatusta ivataankin, sillä
kuinka voi luopua tottumuksistaan, minne menee tuo vanki, jos hän
on siinä määrin tottunut tyydyttämään lukemattomia halujaan, jotka
hän itse on keksinyt? Hän on eristäytynyt, eikä hänellä ole mitään
tekemistä kokonaisuuden kanssa. Ja niin on jouduttu siihen, että
tavaraa on kertynyt enemmän, mutta iloa on alkanut olla vähemmän.

Toista on munkin ura. Kuuliaisuudelle, paastolle ja rukoukselle


nauretaan, mutta niissä kuitenkin on tie oikeaan, todelliseen
vapauteen: minä leikkaan itsestäni pois liiat ja tarpeettomat halut,
taltutan ja alistan kuuliaisuuden alle itserakkaan ja ylpeän tahtoni, ja
saavutan sillä tavoin Jumalan avulla, hengen vapauden ja sen
mukana myös hengen ilon! Kumpi heistä on soveliaampi
kohottamaan suuren ajatuksen ja lähtemään sen palvelukseen, —
eristäytynyt rikas mies vaiko tämä esineitten ja tottumusten
tyrannivallasta vapautunut henkilö? Munkkia moititaan hänen
eristäytymisestään: »Sinä olet eristäytynyt pelastaaksesi itsesi
luostarin seinien sisällä ja olet unhottanut veljellisen ihmiskunnan
palvelemisen.» Mutta katsokaamme vielä, kumpi enemmän edistää
veljesrakkautta. Sillä emme me ole eristäytyneitä, vaan he, vaikka he
eivät näe sitä. Mutta meidän joukostamme on jo vanhastaan lähtenyt
kansan toimenmiehiä, miksi siis niitä ei voisi olla nytkin? Samat
nöyrät ja lempeät paastoojat ja vaikenijat nousevat ja lähtevät
suorittamaan suurta työtä. Kansa on Venäjän pelastus. Venäläinen
luostari taas on ikivanhoista ajoista pitänyt yhtä kansan kanssa. Jos
kansa on eristäytynyt, niin silloin mekin olemme eristäytyneitä.
Kansa uskoo meidän tavallamme, mutta henkilö, joka ei usko, ei
meillä Venäjällä saa mitään toimeen, vaikka hän olisi vilpitön
sydämeltään ja nerokas älyltään. Muistakaa tämä. Kansa nousee
ateistia vastaan ja voittaa hänet, ja syntyy yksi oikeauskoinen
Venäjä. Mutta vaalikaa kansaa ja varjelkaa sen sydäntä.
Hiljaisuudessa kasvattakaa sitä. Se on teidän munkki-urotyönne,
sillä tämä kansa on jumalinen.

f) Yhä ja toista herroista ja palvelijoista ja siitä, voivatko herrat ja


palvelijat tulla keskenään henkisesti veljiksi

— Herra Jumala, kuka väittääkään, ettei kansassakin olisi syntiä.


Turmeluksen palo leviää aivan silminnähtävästi, joka hetki, se tulee
ylhäältäpäin. Kansassakin saa valtaa eristäytyneisyys: alkaa olla
pomoja ja kansan nylkyreitä; kauppias haluaa jo yhä enemmän ja
enemmän kunnianosoituksia, pyrkii käymään sivistyneestä, vaikka
hänellä ei ole hituistakaan sivistystä, ja tämän vuoksi hän iljettävästi
hylkii ikivanhoja tapoja, jopa häpeilee isiensä uskoa. Hän käy
ruhtinaitten vieraana, eikä hän kuitenkaan ole muuta kuin
turmeltunut talonpoika. Juoppous on tehnyt kansasta mädän, eikä
kansa enää voi siitä luopua. Entä miten paljon julmuutta perhettä
kohtaan, vaimoa ja lapsiakin kohtaan, — kaikki juoppouden ansiota.
Olen nähnyt tehtaissa jopa kymmenvuotiaita lapsia: heikkoja,
kuihtuneita, kumaraisia, ja jo siveellisesti turmeltuneita.
Tukahduttava sali, jymisevä kone, koko Jumalan päivän työtä,
irstaita sanoja ja viinaa, viinaa, — sitäkö tarvitsee vielä noin pienen
lapsen sielu? Hän tarvitsee aurinkoa, lasten leikkejä ja kaikkialla
valoisan esimerkin sekä edes hivenen rakkautta kohtaansa. Mutta
eihän sitä saa olla, munkit, eihän saa olla lasten kidutusta, nouskaa
ja saarnatkaa siitä pian, pian. Jumala pelastaa Venäjän, sillä vaikka
rahvaanmies onkin paheellinen eikä enää voi irtautua häpeällisestä
synnistä, niin hän kuitenkin tietää, että hänen häpeällinen syntinsä
on Jumalan kiroama ja että hän tekee huonosti silloin, kun tekee
syntiä. Niin että väsymättä kansamme vielä uskoo totuuteen,
tunnustaa Jumalan, itkee liikutettuna. Toisin on ylempien laita. Nämä
tieteen mukaisesti tahtovat saada olonsa oikeudenmukaiseksi
pelkällä järjellänsä, mutta ilman Kristusta, kuten oli ennen, ja he ovat
julistaneet, että ei ole olemassa rikosta, ei ole enää syntiä. Ja onhan
se oikein heidän kannaltaan: sillä jos sinulla ei ole Jumalaa, niin mitä
rikosta silloin voisi olla? Euroopassa kansa nousee jo väkivoimin
rikkaita vastaan ja kansan johtajat johtavat sen kaikkialla vereen ja
opettavat, että sen viha on oikea. Mutta »kirottu on heidän vihansa,
sillä se on julma». Mutta Venäjän pelastaa Jumala niinkuin on
pelastanut jo monta kertaa. Pelastus lähtee kansasta, sen uskosta ja
nöyryydestä. Isät ja opettajat, varjelkaa kansan uskoa, eikä tämä ole
vain haave: koko elämäni ajan minua on hämmästyttänyt suuressa
kansassamme sen suurenmoinen ja todellinen oivallisuus, itse olen
sen nähnyt, itse voin sen todistaa, olen nähnyt ja ihmetellyt, nähnyt
huolimatta syntien saastastakin ja kansamme köyhästä asusta.
Kansamme ei ole orjamainen, vaikka on ollut kaksi vuosisataa
orjana. Vapaa se on muodoltaan ja käytökseltään eikä ole mitään
menettänyt. Eikä se ole kostonhimoinen eikä kateellinen. »Sinä olet
ylhäinen, sinä olet rikas, sinä olet viisas ja lahjakas, — ole vain sitä,
Jumala sinua siunatkoon. Minä kunnioitan sinua, mutta tiedän, että
minäkin olen ihminen. Sillä, että kunnioitan sinua tuntematta
kateutta, sillä minä juuri osoitankin sinun edessäsi ihmisarvoni.»
Totisesti, jos he eivät puhu näin (sillä he eivät vielä osaa sanoa tätä),
niin he menettelevät tällä tavoin, olen sen itse nähnyt, itse kokenut,
ja uskotteko: kuta köyhempi ja alhaisempi meidän venäläinen
miehemme on, sitä enemmän hänessä huomataan tätä
suurenmoista totuutta, sillä rikkaat pomot ja nylkyrit heidän
joukossaan ovat jo suurin määrin turmeltuneita, ja paljon, paljon
tähän on vaikuttanut meidän huolimattomuutemme ja velttoutemme!
Mutta Jumala pelastaa omansa, sillä Venäjä on suuri
nöyryydessään. Haluan hartaasti nähdä ja ikäänkuin näenkin jo
selvästi tulevaisuutemme; sillä tulee niin olemaan, että
turmeltuneinkin pohatta meillä lopuksi alkaa hävetä rikkauttaan
köyhän edessä, mutta köyhä nähdessään tämän nöyryyden
ymmärtää ja myöntää hänelle kaiken, vastaa ilolla ja
ystävällisyydellä hänen jaloon häveliäisyyteensä. Uskokaa, että tämä
tulee lopputulokseksi: siihen se on menossa. Vain henkisessä
ihmisarvossa on tasavertaisuus, ja se ymmärretään ainoastaan
meillä. Jos vain olisi veljiä, niin tulisi myös veljeys, mutta sitä ennen
ei koskaan jaeta omaisuutta. Me säilytämme Kristuksen kuvan, ja se
on loistava kuin kallis timantti koko maailmalle… Niin tapahtuu,
tapahtuu!

Isät ja opettajat, minulle sattui kerran liikuttava tapaus.


Vaellusmatkoillani tapasin kerran K:n kaupungissa entisen
sotilaspalvelijani Afanasin; erostamme oli silloin kulunut kahdeksan
vuotta. Hän näki minut sattumalta toripaikalla, tunsi, juoksi luokseni
ja, hyvä Jumala, miten hän ilostui, suorastaan syöksähti luokseni:
»Isäkulta, herrani, tekö siinä olette? Näenkö todellakin teidät?» Hän
vei minut kotiinsa. Hän oli jo eronnut sotapalveluksesta, mennyt
naimisiin, saanut jo kaksi pienokaista. Hän eli puolisoineen
harjoittamalla pientä kauppaa torilla kantelemalla tavaroita
kanninlaudalla. Hänen huoneensa oli köyhästi sisustettu, mutta se oli
puhdas ja iloinen. Hän pani minut istumaan, viritti tulen
teekeittimeen, lähetti noutamaan vaimoaan, aivan kuin minun tuloni
olisi ollut hänelle juhla. Hän toi lapsensa luokseni: »Siunatkaa,
isäkulta.» — »Minustako olisi siunaajaksi», vastaan hänelle, »minä
olen yksinkertainen ja nöyrä munkki, rukoilen Jumalaa heidän
puolestaan, ja sinun puolestasi, Afanasi Pavlovitš, rukoilen aina, joka
päivä Jumalaa, olen sen tehnyt tuosta päivästä asti, sillä sinusta,
sanon, sai kaikki alkunsa.» Ja minä selitin hänelle sen niinkuin
osasin. Mutta mitäs mies: katsoo minua eikä mitenkään voi käsittää,
että minä, hänen entinen herransa, upseeri, olen hänen edessään
sen näköinen ja semmoisessa puvussa; hän ihan rupesi itkemään.
»Mitä sinä itket», sanon hänelle, »sinä olet unohtumaton mies,
riemuitse mieluummin puolestani hengessä, ystäväni, sillä tieni on
riemukas ja valoisa». Paljoa hän ei puhunut, huokaili vain ja pudisteli
minulle lempeästi päätään. »Entä missä», kysyy, »on teidän
rikkautenne?» Vastaan hänelle: »Annoin luostariin, me elämme
yhteiselämää.» Teetä juotuani aloin hyvästellä heitä, mutta hän toi
minulle äkkiä puoli ruplaa lahjaksi luostarille ja toisen puoliruplasen,
huomaan, hän tunkee minulle kouraan puhuen kiireesti: »Tämä taas
on teille, sanoo, kulkijalle, vaeltajalle, ehkäpä se voi olla teille
hyödyksi, isäkulta.» Otin vastaan hänen puoliruplasensa, kumarsin
hänelle ja hänen vaimolleen ja poistuin ilostuneena ajatellen
kulkiessani: »Kas nyt me molemmat, hän kotonaan ja minä
kulkiessani, huokailemme ja naurahtelemme iloisesti, riemuitsevin
sydämin, sekä nyökäytämme päätämme ja muistelemme, kuinka
Jumala johti meidät kohtaamaan toisemme.» Enkä minä sen
koommin enää nähnyt häntä. Minä olin ollut hänen herransa ja hän
minun palvelijani, mutta nyt, kun me suutelimme toisiamme rakkaasti
ja hengessä liikutettuina, syntyi meidän välillämme suuri inhimillinen
yhteenkuuluvaisuus. Olen paljon ajatellut tätä, ja nyt ajattelen näin:
onko todellakin järjelle niin käsittämätöntä, että tämä suuri ja vilpitön
yhdistyminen voisi kaikkialla tapahtua meidän venäläisten kesken?
Uskon, että se tapahtuu, ja aika on lähellä.

Palvelijoista lisään seuraavaa: muinoin nuorena minä olin usein


vihainen palvelijoille: keittäjätär tarjosi ruoan liian kuumana,
sotilaspalvelija ei puhdistanut pukua. Mutta minua valaisi silloin
yhtäkkiä rakkaan veljeni ajatus, jonka lapsuudessani kuulin hänen
lausuvan: »Olenko minä ensinkään sen arvoinen, että toinen minua

You might also like