# MatlabR.dvi Hiebeler Matlab R

User Manual: Hiebeler-matlabR

Open the PDF directly: View PDF .
Page Count: 52

1

MATLAB °R / R Reference
May 25, 2010

David Hiebeler
Dept. of Mathematics and Statistics
University of Maine
Orono, ME 04469-5752
http://www.math.umaine.edu/~hiebeler

I wrote the first version of this reference during the Spring 2007 semester, as I learned R while
teaching my Modeling & Simulation course at the University of Maine. The course covers population
and epidemiological modeling, including deterministic and stochastic models in discrete and continuous
time, along with spatial models. Half of the class meetings are in a regular classroom, and half are in
a computer lab where students work through modeling & simulation exercises. When I taught earlier
versions of the course, it was based on Matlab only. In Spring 2007, some biology graduate students in
the class who had learned R in statistics courses asked if they could use R in my class as well, and I said
yes. My colleague Bill Halteman was a great help as I frantically learned R to stay ahead of the class.
As I went, every time I learned how to do something in R for the course, I added it to this reference, so
that I wouldn’t forget it later. Some items took a huge amount of time searching for a simple way to do
what I wanted, but at the end of the semester, I was pleasantly surprised that almost everything I do
in Matlab had an equivalent in R. I was also inspired to do this after seeing the “R for Octave Users”
reference written by Robin Hankin. I’ve continued to add to the document, with many additions based
on topics that came up while teaching courses on Advanced Linear Algebra and Numerical Analysis.
This reference is organized into general categories. There is also a Matlab index and an R index at
the end, which should make it easy to look up a command you know in one of the languages and learn
how to do it in the other (or if you’re trying to read code in whichever language is unfamiliar to you,
allow you to translate back to the one you are more familiar with). The index entries refer to the item
numbers in the first column of the reference document, rather than page numbers.
Any corrections, suggested improvements, or even just notification that the reference has been useful
are appreciated. I hope all the time I spent on this will prove useful for others in addition to myself and
my students. Note that sometimes I don’t necessarily do things in what you may consider the “best” way
in a particular language. I often tried to do things in a similar way in both languages, and where possible
I’ve avoided the use of Matlab toolboxes or R packages which are not part of the core distributions.
But if you believe you have a “better” way (either simpler, or more computationally efficient) to do
something, feel free to let me know.
Acknowledgements: Thanks to Alan Cobo-Lewis and Isaac Michaud for correcting some errors; and
Robert Bryce, Thomas Clerc, Richard Cotton, Stephen Eglen, Andreas Handel, Niels Richard Hansen,
David Khabie-Zeitoune, Michael Kiparsky, Andy Moody, Ben Morin, Lee Pang, Manas A. Pathak, Rachel
Rier, Rune Schjellerup Philosof, and Corey Yanofsky for contributions.
Permission is granted to make and distribute verbatim copies of this manual provided this permission
notice is preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions
for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a
permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a
translation approved by the Free Software Foundation.
c
David Hiebeler

D. Hiebeler, Matlab / R Reference

2

Contents
1 Help

3

2 Entering/building/indexing matrices
2.1 Cell arrays and lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Structs and data frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3
6
6

3 Computations
3.1 Basic computations . . . . . . . . . .
3.2 Complex numbers . . . . . . . . . .
3.3 Matrix/vector computations . . . . .
3.4 Root-finding . . . . . . . . . . . . . .
3.5 Function optimization/minimization
3.6 Numerical integration / quadrature .
3.7 Curve fitting . . . . . . . . . . . . .

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

6
6
7
8
14
14
15
16

4 Conditionals, control structure, loops

17

5 Functions, ODEs

21

6 Probability and random values

23

7 Graphics
7.1 Various types of plotting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2 Printing/saving graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3 Animating cellular automata / lattice simulations . . . . . . . . . . . . . . . . . . . . . . .

27
27
35
36

8 Working with files

37

9 Miscellaneous
9.1 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.2 Strings and Misc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

38
38
39

10 Spatial Modeling

42

Index of MATLAB commands and concepts

43

Index of R commands and concepts

48

D. Hiebeler, Matlab / R Reference

1
No.
1

3

Help
Description
Show help for a function (e.g.
sqrt)
Show help for a built-in keyword (e.g. for)
General list of many help topics

Matlab
help sqrt, or helpwin sqrt to see
it in a separate window
help for

R
help(sqrt) or ?sqrt

help

4

Explore main documentation
in browser

5

Search documentation for
keyword or partial keyword
(e.g. functions which refer to
“binomial”)

doc or helpbrowser (previously it
was helpdesk, which is now being
phased out)
lookfor binomial

library() to see available libraries,
or library(help=’base’) for very
long list of stuff in base package which
you can see help for
help.start()

2
3

2
No.
6

7

Description
Enter
a row ¤ vector ~v
£
1 2 3 4

=




1
 2 

Enter a column vector 
 3 
4
·

1 2
4 5

3
6

¸

Enter a matrix

9
10

Access an element of vector v
Access an element of matrix
A
Access an element of matrix
A using a single index: indices count down the first column, then down the second
column, etc.
Build the vector [2 3 4 5 6 7]
Build the vector [7 6 5 4 3 2]
Build the vector [2 5 8 11 14]

12
13
14

help.search(’binomial’)

Entering/building/indexing matrices

8

11

help(’for’) or ?’for’

Matlab
v=[1 2 3 4]

R
v=c(1,2,3,4)
or
alternatively
v=scan() then enter “1 2 3 4” and
press Enter twice (the blank line
terminates input)

[1; 2; 3; 4]

c(1,2,3,4)
(R does not distinguish between row
and column vectors.)

v(3)
A(2,3)

To
enter
values
by
row:
matrix(c(1,2,3,4,5,6), nrow=2,
byrow=TRUE) To enter values by
column: matrix(c(1,4,2,5,3,6),
nrow=2)
v[3]
A[2,3]

A(5)

A[5]

2:7
7:-1:2
2:3:14

2:7
7:2
seq(2,14,3)

[1 2 3 ; 4 5 6]

D. Hiebeler, Matlab / R Reference
No.
15

4

Description
Build a vector containing
n equally-spaced values between a and b inclusive
Build a vector containing
n logarithmically equallyspaced values between 10a
and 10b inclusive
Build a vector of length k
containing all zeros
Build a vector of length k
containing the value j in all
positions
Build an m×n matrix of zeros

Matlab
linspace(a,b,n)

R
seq(a,b,length.out=n)
seq(a,b,len=n)

logspace(a,b,n)

10^seq(a,b,len=n)

zeros(k,1) (for a column vector) or
zeros(1,k) (for a row vector)
j*ones(k,1) (for a column vector)
or j*ones(1,k) (for a row vector)

rep(0,k)

zeros(m,n)
j*ones(m,n)

v=diag(A)
[a1 a2]

cbind(a1,a2)

[a1; a2]

rbind(a1,a2)

28

Build an m × n matrix containing j in all positions
n × n identity matrix In
Build diagonal matrix A using elements of vector v as diagonal entries
Extract diagonal elements of
matrix A
“Glue” two matrices a1 and
a2 (with the same number of
rows) side-by-side
“Stack” two matrices a1 and
a2 (with the same number of
columns) on top of each other
Given vectors x and y of
lengths m and n respectively,
build n×m matrices X whose
rows are copies of x and Y
whose columns are copies of
y
Reverse the order of elements
in vector v
Column 2 of matrix A

matrix(0,nrow=m,ncol=n) or just
matrix(0,m,n)
matrix(j,nrow=m,ncol=n) or just
matrix(j,m,n)
diag(n)
diag(v,nrow=length(v)) (Note: if
you are sure the length of vector v is 2
or more, you can simply say diag(v).)
v=diag(A)

29

Row 7 of matrix A

A(7,:)

30

All elements of A as a vector,
column-by-column
Rows 2–4, columns 6–10 of A
(this is a 3 × 5 matrix)
A 3 × 2 matrix consisting of
rows 7, 7, and 6 and columns
2 and 1 of A (in that order)
Circularly shift the rows of
matrix A down by s1 elements, and right by s2 elements

16

17
18

19
20
21
22

23
24

25

26

27

31
32

33

eye(n)
diag(v)

or

just

rep(j,k)

[X,Y]=meshgrid(x,y)
m=length(x); n=length(y);
X=matrix(rep(x,each=n),nrow=n);
Y=matrix(rep(y,m),nrow=n)
v(end:-1:1)

rev(v)

A(:,2)

A(:) (gives a column vector)

A[,2] Note: that gives the result as a
vector. To make the result a m×1 matrix instead, do A[,2,drop=FALSE]
A[7,] Note: that gives the result as a
vector. To make the result a 1×n matrix instead, do A[7,,drop=FALSE]
c(A)

A(2:4,6:10)

A[2:4,6:10]

A([7 7 6], [2 1])

A[c(7,7,6),c(2,1)]

circshift(A, [s1 s2])

No simple way, but modulo arithmetic
on indices will work: m=dim(A)[1];
n=dim(A)[2]; A[(1:m-s1-1)%%m+1,
(1:n-s2-1)%%n+1]

D. Hiebeler, Matlab / R Reference
No.
34
35
36

37

38

39
40
41
42
43

44
45
46

47

5

Description
Flip the order of elements in
each row of matrix A
Flip the order of elements in
each column of matrix A
Given a single index ind into
an m × n matrix A, compute
the row r and column c of
that position (also works if
ind is a vector)
Given the row r and column
c of an element of an m × n
matrix A, compute the single
index ind which can be used
to access that element of A
(also works if r and c are vectors)
Given equal-sized vectors r
and c (each of length k), set
elements in rows (given by r)
and columns (given by c) of
matrix A equal to 12. That
is, k elements of A will be
modified.
Truncate vector v, keeping
only the first 10 elements
Extract elements of vector v
from position a to the end
All but the k th element of
vector v
All but the j th and k th elements of vector v
Reshape matrix A, making it
an m × n matrix with elements taken columnwise from
the original A (which must
have mn elements)
Extract the lower-triangular
portion of matrix A
Extract the upper-triangular
portion of matrix A
Enter n × n Hilbert matrix H
where Hij = 1/(i + j − 1)

Matlab
fliplr(A)

R
t(apply(A,1,rev))

flipud(A)

apply(A,2,rev)

[r,c] = ind2sub(size(A), ind)

r = ((ind-1) %% m) + 1
c = floor((ind-1) / m) + 1

ind = sub2ind(size(A), r, c)

ind = (c-1)*m + r

inds = sub2ind(size(A),r,c);
A(inds) = 12;

inds = cbind(r,c)
A[inds] = 12

v = v(1:10)
v(a:end)

v = v[1:10], or length(v) = 10
also works
v[a:length(v)]

v([1:(k-1) (k+1):end])

v[-k]

No simple way? Generalize the previous item
A = reshape(A,m,n)

v[c(-j,-k)]

L = tril(A)

L = A; L[upper.tri(L)]=0

U = triu(A)

U = A; U[lower.tri(U)]=0

hilb(n)

Enter an n-dimensional array,
e.g. a 3 × 4 × 2 array with the
values 1 through 24

reshape(1:24, 3, 4, 2)
reshape(1:24, [3 4 2])

Hilbert(n), but this is part of the
Matrix package which you’ll need to
install (see item 331 for how to install/load packages).
array(1:24, c(3,4,2)) (Note that
a matrix is 2-D, i.e.
rows and
columns, while an array is more generally N -D)

or

dim(A) = c(m,n)

D. Hiebeler, Matlab / R Reference

2.1
No.
48

50

Then

you

v[[1]] = 12
v[[2]] = ’hi there’
v[[3]] = matrix(runif(9),3)

w = v[[i]]

Set the name of the ith element in a list.

If you use regular indexing, i.e. w
= v(i), then w will be a 1 × 1 cell
matrix containing the contents of the
ith element of v.
(Matlab does not have names associated with elements of cell arrays.)

If you use regular indexing, i.e. w =
v[i], then w will be a list of length 1
containing the contents of the ith element of v.
names(v)[3] = ’myrandmatrix’
Use names(v) to see all names, and
names(v)=NULL to clear all names.

Structs and data frames

Description
Matlab
R
Create a matrix-like object avals=2*ones(1,6);
v=c(1,5,3,2,3,7); d=data.frame(
with different named columns yvals=6:-1:1; v=[1 5 3 2 3 7]; cbind(a=2, yy=6:1), v)
(a struct in Matlab, or a d=struct(’a’,avals,
data frame in R)
’yy’, yyvals, ’fac’, v);
Note that I (surprisingly) don’t use R for statistics, and therefore have very little experience with data
frames (and also very little with Matlab structs). I will try to add more to this section later on.

Computations

3.1

56
57
58
59
60
61
62

v{1} = 12
v{2} = ’hi there’
v{3} = rand(3)

R
v = vector(’list’,n)
can do e.g.:

w = v{i}

3
No.
52
53
54
55

Matlab
v = cell(1,n)
In general,
cell(m,n) makes an m × n cell
array. Then you can do e.g.:

Extract the ith element of a
cell/list vector v

2.2
No.
51

Cell arrays and lists

Description
Build a vector v of length n,
capable of containing different data types in different elements (called a cell array in
Matlab, and a list in R)

49

6

Basic computations

Description
a + b, a − b, ab, a/b
√
a
ab
|a| (note: for complex arguments, this computes the
modulus)
ea
ln(a)
log2 (a), log10 (a)
sin(a), cos(a), tan(a)
sin−1 (a), cos−1 (a), tan−1 (a)
sinh(a), cosh(a), tanh(a)
sinh−1 (a),
cosh−1 (a),
−1
tanh (a)

Matlab
a+b, a-b, a*b, a/b
sqrt(a)
a^b
abs(a)

R
a+b, a-b, a*b, a/b
sqrt(a)
a^b
abs(a)

exp(a)
log(a)
log2(a), log10(a)
sin(a), cos(a), tan(a)
asin(a), acos(a), atan(a)
sinh(a), cosh(a), tanh(a)
asinh(a), acosh(a), atanh(a)

exp(a)
log(a)
log2(a), log10(a)
sin(a), cos(a), tan(a)
asin(a), acos(a), atan(a)
sinh(a), cosh(a), tanh(a)
asinh(a), acosh(a), atanh(a)

D. Hiebeler, Matlab / R Reference
No.
63
64

65
66
67
68
69

70
71

7

Description
n MOD k (modulo arithmetic)
Round to nearest integer

Matlab
mod(n,k)

R
n %% k

round(x)

Round down to next lowest
integer
Round up to next largest integer
Sign of x (+1, 0, or -1)

floor(x)

round(x) (Note: R uses IEC 60559
standard, rounding 5 to the even digit
— so e.g. round(0.5) gives 0, not 1.)
floor(x)

ceil(x)

ceiling(x)

sign(x) (Note: for complex values,
this computes x/abs(x).)
erf(x)

sign(x) (Does not work with complex values)
2*pnorm(x*sqrt(2))-1

erfc(x)

2*pnorm(x*sqrt(2),lower=FALSE)

Error function erf(x)
√ Rx
2
(2/ π) 0 e−t dt

=

Complementary
error function cerf(x) =
√ R∞
2
(2/ π) x e−t dt = 1-erf(x)

Inverse error function
erfinv(x)
qnorm((1+x)/2)/sqrt(2)
Inverse complementary error erfcinv(x)
qnorm(x/2,lower=FALSE)/sqrt(2)
function
72
Binomial
coefficient nchoosek(n,k)
choose(n,k)
¶
µ
n
= n!/(n!(n − k)!)
k
Note: the various functions above (logarithm, exponential, trig, abs, and rounding functions) all work
with vectors and matrices, applying the function to each element, as well as with scalars.

3.2
No.
73
74
75
76
77
78

Complex numbers

Description
Enter a complex number
Modulus (magnitude)
Argument (angle)
Complex conjugate
Real part of z
Imaginary part of z

Matlab
1+2i
abs(z)
angle(z)
conj(z)
real(z)
imag(z)

R
1+2i
abs(z) or Mod(z)
Arg(z)
Conj(z)
Re(z)
Im(z)

D. Hiebeler, Matlab / R Reference

3.3
No.
79

8

Matrix/vector computations

Description
Vector dot product ~x · ~y =
~xT ~y
Vector cross product ~x × ~y

Matlab
dot(x,y)

R
sum(x*y)

cross(x,y)

A * B
A .* B

83

Matrix multiplication AB
Element-by-element multiplication of A and B
Transpose of a matrix, AT

Not in base R, but e.g. the xprod
function from the RSEIS package will
do it (see item 331 for how to install/load packages)
A %*% B
A * B

84

Solve A~x = ~b

85
86
87
88
89
90

Reduced echelon form of A
Determinant of A
Inverse of A
Trace of A
Compute AB −1
Element-by-element division
of A and B
Compute A−1 B
Square the matrix A
Raise matrix A to the k th
power

80

81
82

91
92
93

94
95
96

97

Raise each element of A to
the k th power
Rank of matrix A
Set w to be a vector of eigenvalues of A, and V a matrix
containing the corresponding
eigenvectors
Permuted LU factorization of
a matrix

A’ (This is actually the complex conjugate (i.e. Hermitian) transpose;
use A.’ for the non-conjugate transpose if you like; they are equivalent
for real matrices.)
A\b Warning: if there is no solution,
Matlab gives you a least-squares
“best fit.” If there are many solutions, Matlab just gives you one of
them.
rref(A)
det(A)
inv(A)
trace(A)
A/B
A ./ B

t(A) for transpose, or Conj(t(A)) for
conjugate (Hermitian) transpose

A\B
A^2
A^k

solve(A,B)
A %*% A
(No easy way to do this in R
other than repeated multiplication
A %*% A %*% A...)
A^k

A.^k

solve(A,b) Warning: this only works
with square invertible matrices.

R does not have a function to do this
det(A)
solve(A)
sum(diag(A))
A %*% solve(B)
A / B

rank(A)
[V,D]=eig(A) and then w=diag(D)
since Matlab returns the eigenvalues on the diagonal of D

qr(A)$rank tmp=eigen(A); w=tmp$values;
V=tmp$vectors [L,U,P]=lu(A) then the matrices satisfy P A = LU . Note that this works even with non-square matrices tmp=expand(lu(Matrix(A))); L=tmp$L; U=tmp$U; P=tmp$P then
the matrices satisfy A = P LU , i.e.
P −1 A = LU . Note that the lu and
expand functions are part of the Matrix package (see item 331 for how to
this doesn’t seem to work correctly
with non-square matrices. L, U, and
P will be of class Matrix rather than
class matrix; to make them the latter,
instead do L=as.matrix(tmp$L), U=as.matrix(tmp$U),
and
P=as.matrix(tmp$P) above. D. Hiebeler, Matlab / R Reference No. 98 9 Description Singular-value decomposition: given m × n matrix A with rank r, find m × r matrix P with orthonormal columns, diagonal r × r matrix S, and r × n matrix QT with orthonormal rows so that P SQT = A Schur decomposition of square matrix, A = QT QH = QT Q−1 where Q is unitary (i.e. QH Q = I) and T is upper triangular; QH = QT is the Hermitian (conjugate) transpose Matlab [P,S,Q]=svd(A,’econ’) R tmp=svd(A); U=tmp$u; V=tmp$v; S=diag(tmp$d)

[Q,T]=schur(A)

Cholesky factorization of a
square, symmetric, positive
definite matrix A = RT R,
where R is upper-triangular
QR factorization of matrix A,
where Q is orthogonal (satisfying QQT = I) and R is
upper-triangular

R = chol(A)

tmp=Schur(Matrix(A)); T=tmp@T;
Q=tmp@Q Note that Schur is part of
the Matrix package (see item 331 for
how to install/load packages). T and
Q will be of class Matrix rather than
class matrix; to make them the latter,
Q=as.matrix(tmp@Q) above.
R = chol(A) Note that chol is part
of the Matrix package (see item 331

102

Vector norms

norm(v,1)
for
1-norm
k~v k1 ,
norm(v,2) for Euclidean norm
k~v k2 , norm(v,inf) for infinity-norm
k~v k∞ , and norm(v,p) for p-norm
P
1/p
k~v kp = ( |vi |p )

103

Matrix norms

104

Condition number cond(A) =
kAk1 kA−1 k1 of A, using 1norm

105

Condition number cond(A) =
kAk2 kA−1 k2 of A, using 2norm
Condition number cond(A) =
kAk∞ kA−1 k∞ of A, using
infinity-norm

norm(A,1) for 1-norm kAk1 ,
norm(A)
for
2-norm
kAk2 ,
norm(A,inf)
for
infinity-norm
kAk∞ , and norm(A,’fro’) for
¡P T
¢1/2
Frobenius norm
i (A A)ii
cond(A,1) (Note: Matlab also has
a function rcond(A) which computes
reciprocal condition estimator using
the 1-norm)
cond(A,2)

99

100

101

106

[Q,R]=qr(A) satisfying QR = A, or
[Q,R,E]=qr(A) to do permuted QR
factorization satisfying AE = QR

cond(A,inf)

z=qr(A); Q=qr.Q(z); R=qr.R(z);
E=diag(n)[,z$pivot] (where n is the number of columns in A) gives permuted QR factorization satisfying AE = QR R does not have a norm function for vectors; only one for matrices. But the following will work: norm(matrix(v),’1’) for 1-norm k~v k1 , norm(matrix(v),’i’) for infinity-norm k~v k∞ , and sum(abs(v)^p)^(1/p) for p-norm P 1/p k~v kp = ( |vi |p ) norm(A,’1’) for 1-norm kAk1 , max(svd(A)$d) for 2-norm kAk2 ,
norm(A,’i’) for infinity-norm kAk∞ ,
and norm(A,’f’) for Frobenius norm
¡P T
¢1/2
i (A A)ii
1/rcond(A,’1’)

kappa(A, exact=TRUE) (leave out
the “exact=TRUE” for an estimate)
1/rcond(A,’I’)

D. Hiebeler, Matlab / R Reference
No.
107
108
109
110

111
112
113

114
115
116

117

118

119

120

121

122

123

Description
Compute mean of all elements in vector or matrix
Compute means of columns
of a matrix
Compute means of rows of a
matrix
Compute standard deviation
of all elements in vector or
matrix
Compute standard deviations
of columns of a matrix
Compute standard deviations
of rows of a matrix
Compute variance of all elements in vector or matrix
Compute variance of columns
of a matrix
Compute variance of rows of
a matrix
Compute covariance for two
vectors of observations
Compute covariance matrix,
giving covariances between
columns of matrix A
Given matrices A and B,
build covariance matrix C
where cij is the covariance between column i of A and column j of B
Compute Pearson’s linear
correlation coefficient between elements of vectors v
and w
Compute Kendall’s tau correlation statistic for vectors v
and w
Compute Spearman’s rho
correlation
statistic
for
vectors v and w
Compute pairwise Pearson’s
correlation coefficient between columns of matrix
A
Compute matrix C of pairwise Pearson’s correlation coefficients between each pair of
columns of matrices A and B,
i.e. so cij is the correlation
between column i of A and
column j of B

10

Matlab
mean(v) for vectors, mean(A(:)) for
matrices
mean(A)

R
mean(v) or mean(A)

mean(A,2)

rowMeans(A)

std(v) for vectors, std(A(:)) for
matrices. This normalizes by n − 1.
Use std(v,1) to normalize by n.
std(A). This normalizes by n − 1.
Use std(A,1) to normalize by n
std(A,0,2) to normalize by n − 1,
std(A,1,2) to normalize by n
var(v) for vectors, var(A(:)) for
matrices. This normalizes by n − 1.
Use var(v,1) to normalize by n.
var(A). This normalizes by n − 1.
Use var(A,1) to normalize by n
var(A,0,2) to normalize by n − 1,
var(A,1,2) to normalize by n
cov(v,w) computes the 2 × 2 covariance matrix; the off-diagonal elements give the desired covariance
cov(A)

sd(v) for vectors, sd(c(A)) for matrices. This normalizes by n − 1.

colMeans(A)

sd(A). This normalizes by n − 1.
apply(A,1,sd). This normalizes by
n − 1.
var(v) for vectors, var(c(A)) for
matrices. This normalizes by n − 1.
apply(A,2,var). This normalizes by
n − 1.
apply(A,1,var). This normalizes by
n − 1.
cov(v,w)

var(A) or cov(A)

I don’t know of a direct way to
do this in Matlab. But one way is
[Y,X]=meshgrid(std(B),std(A));
X.*Y.*corr(A,B)

cov(A,B)

corr(v,w) Note: v and w must
be column vectors.
To make it
work regardless of whether they
are row or column vectors, do
corr(v(:),w(:))
corr(v,w,’type’,’kendall’)

cor(v,w)

corr(v,w,’type’,’spearman’)

cor(v,w,method=’spearman’)

corr(A) The ’type’ argument may
also be used as in the previous two
items

cor(A) The method argument may
also be used as in the previous two
items

corr(A,B) The ’type’ argument
may also be used as just above

cor(A,B) The method argument
may also be used as just above

cor(v,w,method=’kendall’)

D. Hiebeler, Matlab / R Reference
No.
124
125
126
127
128
129
130

131
132
133
134

135
136

137

138

139
140
141
142

Description
Compute sum of all elements
in vector or matrix
Compute sums of columns of
matrix
Compute sums of rows of matrix
Compute product of all elements in vector or matrix
Compute
products
of
columns of matrix
Compute products of rows of
matrix
Compute
P∞ matrix exponential
eA = k=0 Ak /k!
Compute cumulative sum of
values in vector
Compute cumulative sums of
columns of matrix
Compute cumulative sums of
rows of matrix
Compute cumulative sum
of all elements of matrix
(column-by-column)
Cumulative product of elements in vector v
Cumulative minimum or
maximum of elements in
vector v
Compute differences between
consecutive elements of vector v. Result is a vector
w 1 element shorter than v,
where element i of w is element i + 1 of v minus element
i of v
Make a vector y the same size
as vector x, which equals 4
everywhere that x is greater
than 5, and equals 3 everywhere else (done via a vectorized computation).
Compute minimum of values
in vector v
Compute minimum of all values in matrix A
Compute minimum value of
each column of matrix A
Compute minimum value of
each row of matrix A

11

Matlab
sum(v) for vectors, sum(A(:)) for
matrices
sum(A)

R
sum(v) or sum(A)

sum(A,2)

rowSums(A)

prod(v) for vectors, prod(A(:)) for
matrices
prod(A)

prod(v) or prod(A)

prod(A,2)

apply(A,1,prod)

expm(A)

cumsum(v)

expm(Matrix(A)), but this is part of
the Matrix package which you’ll need
to install (see item 331 for how to install/load packages).
cumsum(v)

cumsum(A)

apply(A,2,cumsum)

cumsum(A,2)

t(apply(A,1,cumsum))

cumsum(A(:))

cumsum(A)

cumprod(v) (Can also be used in the
various ways cumsum can)
I don’t know of an easy way to do
this in Matlab

cumprod(v) (Can also be used in the
various ways cumsum can)
cummin(v) or cummax(v)

diff(v)

diff(v)

z = [3 4]; y = z((x > 5)+1)

y = ifelse(x > 5, 4, 3)

min(v)

min(v)

min(A(:))

min(A)

min(A) (returns a row vector)

apply(A,2,min) (returns a vector)

min(A, [ ], 2) (returns a column
vector)

apply(A,1,min) (returns a vector)

colSums(A)

apply(A,2,prod)

D. Hiebeler, Matlab / R Reference
No.
143

144

145
146

Description
Given matrices A and B,
compute a matrix where each
element is the minimum of
the corresponding elements of
A and B
Given matrix A and scalar
c, compute a matrix where
each element is the minimum
of c and the corresponding element of A
Find minimum among all values in matrices A and B
Find index of the first time
min(v) appears in v, and
store that index in ind
Notes:

12

Matlab
min(A,B)

R
pmin(A,B)

min(A,c)

pmin(A,c)

min([A(:)

; B(:)])

[y,ind] = min(v)

min(A,B)
ind = which.min(v)

• Matlab and R both have a max function (and R has pmax and which.max as well) which behaves
in the same ways as min but to compute maxima rather than minima.
• Functions like exp, sin, sqrt etc. will operate on arrays in both Matlab and R, doing the
computations for each element of the matrix.
No.
147
148
149
150
151
152
153
154

155

156

Description
Number of rows in A
Number of columns in A
Dimensions of A, listed in a
vector
Number of elements in vector
v
Total number of elements in
matrix A
Max. dimension of A
Sort values in vector v
Sort values in v, putting
sorted values in s, and indices
in idx, in the sense that s[k]
= x[idx[k]]
Sort the order of the rows of
matrix m

Matlab
size(A,1)
size(A,2)
size(A)

R
nrow(A)
ncol(A)
dim(A)

length(v)

length(v)

numel(A)

length(A)

length(A)
sort(v)
[s,idx]=sort(v)

max(dim(A))
sort(v)
tmp=sort(v,index.return=TRUE);
s=tmp$x; idx=tmp$ix

sortrows(m)
This sorts according to the first column, then uses column 2 to break
ties, then column 3 for remaining
ties, etc.
Complex numbers are
sorted by abs(x), and ties are then
broken by angle(x).

Sort order of rows of matrix
m, specifying to use columns
c1, c2, c3 as the sorting
“keys”

sortrows(m, [c1 c2 c2])

m[order(m[,1]),]
This only sorts according to the first
column. To use column 2 to break
ties, and then column 3 to break further ties, do
m[order(m[,1], m[,2], m[,3]),]
Complex numbers are sorted first by
real part, then by imaginary part.
m[order(m[,c1], m[,c2],
m[,c3]),]

D. Hiebeler, Matlab / R Reference
No.
157

158

159

160

161

162

163

164

165

Description
Same as previous item, but
sort in decreasing order for
columns c1 and c2
Sort order of rows of matrix
m, and keep indices used for
sorting
To count how many values in
the vector v are between 4
and 7 (inclusive on the upper
end)
Given vector v, return list of
indices of elements of v which
are greater than 5
Given matrix A, return list
of indices of elements of A
which are greater than 5, using single-indexing
Given matrix A, generate
vectors r and c giving rows
and columns of elements of A
which are greater than 5
Given vector x (of presumably discrete values), build a
vector v listing unique values in x, and corresponding
vector c indicating how many
times those values appear in
x
Given vector x (of presumably continuous values), divide the range of values into k
equally-sized bins, and build
a vector m containing the
midpoints of the bins and a
corresponding vector c containing the counts of values in
the bins
Convolution / polynomial
multiplication (given vectors
x and y containing polynomial coefficients, their convolution is a vector containing
coefficients of the product of
the two polynomials)

13

Matlab
sortrows(m, [-c1 -c2 c2])

R
m[order(-m[,c1], -m[,c2],
m[,c3]),]

[y,i] = sortrows(m)

i=order(m[1,]); y=m[i,]

sum((v > 4) & (v <= 7))

sum((v > 4) & (v <= 7))

find(v > 5)

which(v > 5)

find(A > 5)

which(A > 5)

[r,c] = find(A > 5)

w = which(A > 5, arr.ind=TRUE);
r=w[,1]; c=w[,2]

v = unique(x); c = hist(x,v);

w=table(x); c=as.numeric(w);
v=as.numeric(names(w))

[c,m] = hist(x,k)

w=hist(x,seq(min(x),max(x),
length.out=k+1), plot=FALSE);
m=w$mids; c=w$counts

conv(x,y)

convolve(x,rev(y),type=’open’)
Note: the accuracy of this is not
as good as Matlab; e.g.
doing
v=c(1,-1); for (i in 2:20)
v=convolve(v,c(-i,1),
type=’open’) to generate the
20th -degree
Q20 Wilkinson polynomial
W (x) = i=1 (x−i) gives a coefficient
of ≈ −780.19 for x19 , rather than the
correct value -210.

D. Hiebeler, Matlab / R Reference

3.4
No.
166

167

No.
168

169

170

171

Root-finding

Description
Find roots of polynomial
whose coefficients are stored
in vector v (coefficients in v
are highest-order first)
Find zero (root) of a function
f (x) of one variable

3.5

14

Matlab
roots(v)

Define function f(x), then do
fzero(f,x0) to search for a root
near x0, or fzero(f,[a b]) to find
a root between a and b, assuming
the sign of f (x) differs at x = a
and x = b. Default forward error
tolerance (i.e. error in x) is machine
epsilon ǫmach .

R
polyroot(rev(v))
(This function
really wants the vector to have the
constant coefficient first in v; rev reverses their order to achieve this.)
Define function f(x), then do
uniroot(f, c(a,b)) to find a root
between a and b, assuming the sign
of f (x) differs at x = a and x = b.
Default forward error tolerance (i.e.
error in x) is fourth root of machine
epsilon, (ǫmach )0.25 . To specify e.g.
a tolerance of 2−52 , do uniroot(f,
c(a,b), tol=2^-52).

Function optimization/minimization

Description
Find value m which minimizes a function f (x) of one
variable within the interval
from a to b
Find value m which minimizes a function f (x, p1 , p2 )
with given extra parameters
(but minimization is only occuring over the first argument), in the interval from a
to b.
Find values of x, y, z which
minimize function f (x, y, z),
using a starting guess of x =
1, y = 2.2, and z = 3.4.

Find
values
of
x, y, z
which minimize function
f (x, y, z, p1 , p2 ),
using a
starting guess of x = 1,
y = 2.2, and z = 3.4, where
the function takes some extra
parameters (useful e.g. for
doing things like nonlinear
least-squares
optimization
where you pass in some data
vectors as extra parameters).

Matlab
Define function f(x), then do

R
Define function f(x), then do

m = fminbnd(f, a, b)

m = optimize(f,c(a,b))$minimum Define function f(x,p1,p2), then use an “anonymous function”: Define function f(x,p1,p2), then: % first define values for p1 % and p2, and then do: m=fminbnd(@(x) f(x,p1,p2),a,b) # first define values for p1 # and p2, and then do: m = optimize(f, c(a,b), p1=p1, p2=p2)$minimum

First write function f(v) which accepts a vector argument v containing
values of x, y, and z, and returns the
scalar value f (x, y, z), then do:

First write function f(v) which accepts a vector argument v containing
values of x, y, and z, and returns the
scalar value f (x, y, z), then do:

fminsearch(@f,[1 2.2 3.4])

optim(c(1,2.2,3.4),f)$par First write function f(v,p1,p2) which accepts a vector argument v containing values of x, y, and z, along with the extra parameters, and returns the scalar value f (x, y, z, p1 , p2 ), then do: First write function f(v,p1,p2) which accepts a vector argument v containing values of x, y, and z, along with the extra parameters, and returns the scalar value f (x, y, z, p1 , p2 ), then do: fminsearch(@f,[1 2.2 3.4], ... [ ], p1, p2) Or use an anonymous function: fminsearch(@(x) f(x,p1,p2), ... [1 2.2 3.4]) optim(c(1,2.2,3.4), f, p1=p1, p2=p2)$par

D. Hiebeler, Matlab / R Reference

3.6

15

No.
172

Description
Numerically integrate function f (x) over interval from
a to b

Matlab
absolute tolerance
specify absolute

173

Simple trapezoidal numerical
integration using (x, y) values
in vectors x and y

trapz(x,y)

of 10−6 .
To
tolerance, use

R
and relative error tolerances being
the fourth root of machine epsilon,
(ǫmach )0.25 ≈ 1.22 × 10−4 .
Tolerances can be specified by using
integrate(f,a,b, rel.tol=tol1,
abs.tol=tol2). Note that the function f must be written to work even
when given a vector of x values as its
argument.
sum(diff(x)*(y[-length(y)]+
y[-1])/2)

D. Hiebeler, Matlab / R Reference

3.7
No.
174

175

176

177

178

179

16

Curve fitting

Description
Fit the line y = c1 x + c0 to
data in vectors x and y.

y = c2 x2 + c1 x + c0 to data in
vectors x and y.

Fit nth degree polynomial
y = cn xn + cn−1 xn−1 + . . . +
c1 x + c0 to data in vectors x
and y.

with zero intercept, y =
c2 x2 + c1 x to data in vectors
x and y.

Fit natural cubic spline
(S ′′ (x) = 0 at both endpoints) to points (xi , yi )
whose coordinates are in
vectors x and y; evaluate at
points whose x coordinates
are in vector xx, storing
corresponding y’s in yy
Fit cubic spline using
Forsythe,
Malcolm
and
Moler method (third derivatives at endpoints match
third derivatives of exact cubics through the four points
at each end) to points (xi , yi )
whose coordinates are in
vectors x and y; evaluate at
points whose x coordinates
are in vector xx, storing
corresponding y’s in yy

Matlab

R

p = polyfit(x,y,1)

p = coef(lm(y ~ x))

The return vector p has the coefficients in descending order, i.e. p(1)
is c1 , and p(2) is c0 .

The return vector p has the coefficients in ascending order, i.e. p[1] is
c0 , and p[2] is c1 .

p = polyfit(x,y,2)

p = coef(lm(y ~ x + I(x^2)))

The return vector p has the coefficients in descending order, i.e. p(1)
is c2 , p(2) is c1 , and p(3) is c0 .

The return vector p has the coefficients in ascending order, i.e. p[1] is
c0 , p[2] is c1 , and p[3] is c2 .
No simple built-in way. But this will
work: coef(lm(as.formula(paste(
’y~’,paste(’I(x^’,1:n,’)’,
sep=’’,collapse=’+’)))))
This
more
concise
“lowerlevel” method will also work:
coef(lm.fit(outer(x,0:n,’^’),y))
Note that both of the above return
the coefficients in ascending order.
Also see the polyreg function in the
mda package (see item 331 for how

p = polyfit(x,y,n)
The return vector p has the coefficients in descending order, p(1) is
cn , p(2) is cn−1 , etc.

(I don’t know a simple way do this
in Matlab, other than to write a
function which computes the sum
of squared residuals and use fminsearch on that function. There is
likely an easy way to do it in the
Statistics Toolbox.)
pp=csape(x,y,’variational’);
yy=ppval(pp,xx) but note that
csape is in Matlab’s Spline
Toolbox

I’m not aware of a function to do this
in Matlab

p=coef(lm(y ~ -1 + x + I(x^2)))
The return vector p has the coefficients in ascending order, i.e. p[1] is
c1 , and p[2] is c2 .
tmp=spline(x,y,method=’natural’,
xout=xx); yy=tmp$y tmp=spline(x,y,xout=xx); yy=tmp$y

D. Hiebeler, Matlab / R Reference
No.
180

Description
Fit cubic spline such that
first derivatives at endpoints
match first derivatives of exact cubics through the four
points at each end) to points
(xi , yi ) whose coordinates are
in vectors x and y; evaluate
at points whose x coordinates
are in vector xx, storing corresponding y’s in yy
Fit cubic spline with periodic
boundaries, i.e. so that first
and second derivatives match
at the left and right ends
(the first and last y values
of the provided data should
also agree), to points (xi , yi )
whose coordinates are in vectors x and y; evaluate at
points whose x coordinates
are in vector xx, storing corresponding y’s in yy
Fit cubic spline with “nota-knot” conditions (the first
two piecewise cubics coincide,
as do the last two), to points
(xi , yi ) whose coordinates are
in vectors x and y; evaluate
at points whose x coordinates
are in vector xx, storing corresponding y’s in yy

181

182

4
No.
183

17

Matlab
pp=csape(x,y); yy=ppval(pp,xx)
but csape is in Matlab’s Spline
Toolbox

R
I’m not aware of a function to do this
in R

pp=csape(x,y,’periodic’);
yy=ppval(pp,xx) but csape is in
Matlab’s Spline Toolbox

tmp=spline(x,y,method=
’periodic’, xout=xx); yy=tmp$y yy=spline(x,y,xx) I’m not aware of a function to do this in R Conditionals, control structure, loops Description “for” loops over values in a vector v (the vector v is often constructed via a:b) Matlab R If only one command inside the loop: for i=v command1 command2 end for (i in v) command or for (i in v) command If multiple commands inside the loop: for (i in v) { command1 command2 } D. Hiebeler, Matlab / R Reference No. 184 Description “if” statements with no else clause 18 Matlab R If only one command inside the clause: if cond command1 command2 end if (cond) command or if (cond) command If multiple commands: if (cond) { command1 command2 } 185 “if/else” statement If one command in clauses: if cond command1 command2 else command3 command4 end Note: Matlab also has an “elseif” statement, e.g.: if cond1 command1 elseif cond2 command2 elseif cond3 command3 else command4 end if (cond) command1 else command2 or if (cond) cmd1 else cmd2 If multiple commands: if (cond) { command1 command2 } else { command3 command4 } Warning: the “else” must be on the same line as command1 or the “}” (when typed interactively at the command prompt), otherwise R thinks the “if” statement was finished and gives an error. R does not have an “elseif” statement. Logical comparisons which can be used on scalars in “if” statements, or which operate element-byelement on vectors/matrices: Matlab xa x <= a x >= a x == a x ~= a R x x x x x x a <= a >= a == a != a Description True if x is less than a True if x is greater than a True if x is less than or equal to a True if x is greater than or equal to a True if x is equal to a True if x is not equal to a D. Hiebeler, Matlab / R Reference 19 Scalar logical operators: Description a AND b a OR b a XOR b NOT a Matlab a && b a || b xor(a,b) ~a R a && b a || b xor(a,b) !a The && and || operators are short-circuiting, i.e. && stops as soon as any of its terms are FALSE, and || stops as soon as any of its terms are TRUE. Matrix logical operators (they operate element-by-element): Description a AND b a OR b a XOR b NOT a No. 186 187 188 189 Description To test whether a scalar value x is between 4 and 7 (inclusive on the upper end) To count how many values in the vector x are between 4 and 7 (inclusive on the upper end) Test whether all values in a logical/boolean vector are TRUE Test whether any values in a logical/boolean vector are TRUE Matlab a & b a | b xor(a,b) ~a R a & b a | b xor(a,b) !a Matlab if ((x > 4) && (x <= 7)) R if ((x > 4) && (x <= 7)) sum((x > 4) & (x <= 7)) sum((x > 4) & (x <= 7)) all(v) all(v) any(v) any(v) D. Hiebeler, Matlab / R Reference No. 190 191 192 Description “while” statements to do iteration (useful when you don’t know ahead of time how many iterations you’ll need). E.g. to add uniform random numbers between 0 and 1 (and their squares) until their sum is greater than 20: More flow control: these commands exit or move on to the next iteration of the innermost while or for loop, respectively. “Switch” statements for integers 20 Matlab R mysum = 0; mysumsqr = 0; while (mysum < 20) r = rand; mysum = mysum + r; mysumsqr = mysumsqr + r^2; end mysum = 0 mysumsqr = 0 while (mysum < 20) { r = runif(1) mysum = mysum + r mysumsqr = mysumsqr + r^2 } break and continue (As with “if” statements and “for” loops, the curly brackets are not necessary if there’s only one statement inside the “while” loop.) break and next switch (x) case 10 disp(’ten’) case {12,13} disp(’dozen (bakers?)’) otherwise disp(’unrecognized’) end R doesn’t have a switch statement capable of doing this. It has a function which is fairly limited for integers, but can which do string matching. See ?switch for more. But a basic example of what it can do for integers is below, showing that you can use it to return different expressions based on whether a value is 1, 2, . . .. mystr = switch(x, ’one’, ’two’, ’three’); print(mystr) Note that switch returns NULL if x is larger than 3 in the above case. Also, continuous values of x will be truncated to integers. D. Hiebeler, Matlab / R Reference 5 No. 193 Functions, ODEs Description Implement add(x,y) a function Matlab Put the following in add.m: function retval=add(x,y) retval = x+y; Then you can do e.g. add(2,3) 194 21 Implement a function f(x,y,z) which returns multiple values, and store those return values in variables u and v Write function as follows: function [a,b] = f(x,y,z) a = x*y+z; b=2*sin(x-z); Then call the function by doing: [u,v] = f(2,8,12) R Enter the following, or put it in a file and source that file: add = function(x,y) { return(x+y) } Then you can do e.g. add(2,3). Note, the curly brackets aren’t needed if your function only has one line. Also, the return keyword is optional in the above example, as the value of the last expression in a function gets returned, so just x+y would work too. Write function as follows: f = function(x,y,z) { a = x*y+z; b=2*sin(x-z) return(list(a,b)) } Then call the function by doing: tmp=f(2,8,12); u=tmp[[1]]; v=tmp[[2]]. The above is most general, and will work even when u and v are different types of data. If they are both scalars, the function could simply return them packed in a vector, i.e. return(c(a,b)). If they are vectors of the same size, the function could return them packed together into the columns of a matrix, i.e. return(cbind(a,b)). D. Hiebeler, Matlab / R Reference No. 195 196 197 Description Numerically solve ODE dx/dt = 5x from t = 3 to t = 12 with initial condition x(3) = 7 Numerically solve system of ODEs dw/dt = 5w, dz/dt = 3w + 7z from t = 3 to t = 12 with initial conditions w(3) = 7, z(3) = 8.2 Pass parameters such as r = 1.3 and K = 50 to an ODE function from the command line, solving dx/dt = rx(1 − x/K) from t = 0 to t = 20 with initial condition x(0) = 2.5. 22 Matlab First implement function R First implement function function retval=f(t,x) retval = 5*x; f = function(t,x,parms) { return(list(5*x)) } Then do ode45(@f,[3,12],7) to plot solution, or [t,x]=ode45(@f,[3,12],7) to get back vector t containing time values and vector x containing corresponding function values. If you want function values at specific times, e.g. 3, 3.1, 3.2, . . . , 11.9, 12, you can do [t,x]=ode45(@f,3:0.1:12,7). Note: in older versions of Matlab, use ’f’ instead of @f. First implement function function retval=myfunc(t,x) w = x(1); z = x(2); retval = zeros(2,1); retval(1) = 5*w; retval(2) = 3*w + 7*z; Then do ode45(@myfunc,[3,12],[7; 8.2]) to plot solution, or [t,x]=ode45(@myfunc,[3,12],[7; 8.2]) to get back vector t containing time values and matrix x, whose first column containing corresponding w(t) values and second column contains z(t) values. If you want function values at specific times, e.g. 3, 3.1, 3.2, . . . , 11.9, 12, you can do [t,x]=ode45(@myfunc,3:0.1:12,[7; 8.2]). Note: in older versions of Matlab, use ’f’ instead of @f. First implement function function retval=func2(t,x,r,K) retval = r*x*(1-x/K) Then do ode45(@func2,[0 20], 2.5, [ ], 1.3, 50). The empty matrix is necessary between the initial condition and the beginning of your extra parameters. Then do y=lsoda(7, seq(3,12, 0.1), f,NA) to obtain solution values at times 3, 3.1, 3.2, . . . , 11.9, 12. The first column of y, namely y[,1] contains the time values; the second column y[,2] contains the corresponding function values. Note: lsoda is part of the deSolve package (see item 331 for how to install/load packages). First implement function myfunc = function(t,x,parms) { w = x[1]; z = x[2]; return(list(c(5*w, 3*w+7*z))) } Then do y=lsoda(c(7,8.2), seq(3,12, 0.1), myfunc,NA) to obtain solution values at times 3, 3.1, 3.2, . . . , 11.9, 12. The first column of y, namely y[,1] contains the time values; the second column y[,2] contains the corresponding values of w(t); and the third column contains z(t). Note: lsoda is part of the deSolve package (see item 331 for how to install/load packages). First implement function func2=function(t,x,parms) { r=parms[1]; K=parms[2] return(list(r*x*(1-x/K))) } Then do y=lsoda(2.5,seq(0,20,0.1), func2,c(1.3,50)) Note: lsoda is part of the deSolve package (see item 331 for how to install/load packages). D. Hiebeler, Matlab / R Reference 6 No. 198 199 200 201 202 203 204 205 206 207 208 209 210 23 Probability and random values Description Generate a continuous uniform random value between 0 and 1 Generate vector of n uniform random vals between 0 and 1 Generate m×n matrix of uniform random values between 0 and 1 Generate m×n matrix of continuous uniform random values between a and b Generate a random integer between 1 and k Matlab rand R runif(1) rand(n,1) or rand(1,n) runif(n) rand(m,n) matrix(runif(m*n),m,n) matrix(runif(m*n),m) a+rand(m,n)*(b-a) or if you have the Statistics toolbox then unifrnd(a,b,m,n) floor(k*rand) + 1 matrix(runif(m*n,a,b),m) Generate m×n matrix of discrete uniform random integers between 1 and k Generate m × n matrix where each entry is 1 with probability p, otherwise is 0 floor(k*rand(m,n))+1 or if you have the Statistics toolbox then unidrnd(k,m,n) (rand(m,n)=0)*exp(-x/mu)/mu will work even without the Statistics Toolbox, as long as mu is positive. normpdf(x,mu,sigma) or exp(-(x-mu)^2/(2*sigma^2))/ (sqrt(2*pi)*sigma) will work even without the Statistics Toolbox. R dbinom(x,n,p) unifpdf(x,a,b) or ((x>=a)&&(x<=b))/(b-a) will work even without the Statistics Toolbox. dunif(x,a,b) dpois(x,lambda) dexp(x,1/mu) dnorm(x,mu,sigma) unidpdf(x,n) or ((x==floor(x)) ((x==round(x)) && (x >= 1) && && (x>=1)&&(x<=n))/n will work (x <= n))/n even without the Statistics Toolbox, as long as n is a positive integer. 228 mnpdf(x,p) dmultinom(x,prob=p) Note: vector p must sum to one. Also, x and p can be vectors of length k, or if one or both are m × k matrices then the computations are performed for each row. Note: one or more of the parameters in the above “*pdf” (Matlab) or “d*” (R) functions can be vectors, but they must be the same size. Scalars are promoted to arrays of the appropriate size. D. Hiebeler, Matlab / R Reference No. 229 230 231 232 233 234 The corresponding CDF functions are below: Description Matlab Compute probability that a binocdf(x,n,p). Without the random variable from the Statistics Toolbox, as long Binomial(n, p) distribution is as n is a non-negative inless than or equal to x (i.e. teger, this will work: r = the cumulative distribution 0:floor(x); sum(factorial(n)./ function, or cdf). (factorial(r).*factorial(n-r)) .*p.^r.*(1-p).^(n-r)). (Unfortunately, Matlab’s nchoosek function won’t take a vector argument for k.) Compute probability that a poisscdf(x,lambda). Withrandom variable from the out the Statistics Toolbox, as Poisson(λ) distribution is less long as lambda ≥ 0, this than or equal to x. will work: r = 0:floor(x); sum(exp(-lambda)*lambda.^r ./factorial(r)) Compute cumulative distri- expcdf(x,mu) or bution function at x for a (x>=0)*(1-exp(-x/mu)) will random variable from the ex- work even without the Statistics ponential distribution with Toolbox, as long as mu is positive. mean µ. Compute cumulative distri- normcdf(x,mu,sigma) or 1/2 bution function at x for a ran- erf(-(x-mu)/(sigma*sqrt(2)))/2 dom variable from the Nor- will work even without the Statismal distribution with mean µ tics Toolbox, as long as sigma is and standard deviation σ. positive. Compute cumulative distri- unifcdf(x,a,b) or bution function at x for a ran- (x>a)*(min(x,b)-a)/(b-a) will dom variable from the contin- work even without the Statistics uous uniform distribution on Toolbox, as long as b > a. interval (a, b). Compute probability that a unidcdf(x,n) or random variable from the dis- (x>=1)*min(floor(x),n)/n will crete uniform distribution on work even without the Statistics integers 1 . . . n is less than or Toolbox, as long as n is a positive equal to x. integer. 26 R pbinom(x,n,p) ppois(x,lambda) pexp(x,1/mu) pnorm(x,mu,sigma) punif(x,a,b) (x>=1)*min(floor(x),n)/n D. Hiebeler, Matlab / R Reference 7 Graphics 7.1 Various types of plotting No. 235 Description Create a new figure window Matlab figure 236 Select figure number n figure(n) (will create the figure if it doesn’t exist) 237 gcf 238 Determine which figure window is currently active List open figure windows 239 Close figure window(s) 240 241 Plot points using open circles Plot points using solid lines 242 Plotting: color, point markers, linestyle 243 27 Plotting axes with logarithmic get(0,’children’) (The 0 handle refers to the root graphics object.) close to close the current figure window, close(n) to close a specified figure, and close all to close all figures plot(x,y,’o’) plot(x,y) plot(x,y,str) where str is a string specifying color, point marker, and/or linestyle (see table below) (e.g. ’gs--’ for green squares with dashed line) semilogx, semilogy, and loglog functions take arguments like plot, and plot with logarithmic scales for x, y, and both axes, respectively R dev.new() Notes: internally, on Windows this calls windows(), on MacOS it calls quartz(), and on Linux it calls X11(). X11() is also available on MacOS; you can tell R to use it by default by doing options(device=’X11’). In R sometime after 2.7.0, X11 graphics started doing antialising by default, which makes plots look smoother but takes longer to draw. If you are using X11 graphics in R and notice that figure plotting is extremely slow (especially if making many plots), do this before calling dev.new(): X11.options(type=’Xlib’) or X11.options(antialias=’none’). Or just use e.g. X11(type=’Xlib’) to make new figure windows. They are uglier (lines are more jagged), but render much more quickly. dev.set(n) (returns the actual device selected; will be different from n if there is no figure device with number n) dev.cur() dev.list() dev.off() to close the currently active figure device, dev.off(n) to close a specified one, and graphics.off() to close all figure devices. plot(x,y) plot(x,y,type=’l’) (Note: that’s a lower-case ’L’, not the number 1) plot(x,y,type=str1, pch=arg2,col=str3, lty=arg4) See tables below for possible values of the 4 parameters plot(..., log=’x’), plot(..., log=’y’), and plot(..., log=’xy’) plot with logarithmic scales for x, y, and both axes, respectively D. Hiebeler, Matlab / R Reference No. 244 Description Make bar graph where the x coordinates of the bars are in x, and their heights are in y 245 Make histogram of values in x Given vector x containing discrete values, make a bar graph where the x coordinates of bars are the values, and heights are the counts of how many times the values appear in x Given vector x containing continuous values, lump the data into k bins and make a histogram / bar graph of the binned data Make a plot containing errorbars of height s above and below (x, y) points 246 247 248 28 Matlab bar(x,y) Or just bar(y) if you only want to specify heights. Note: if A is a matrix, bar(A) interprets each column as a separate set of observations, and each row as a different observation within a set. So a 20 × 2 matrix is plotted as 2 sets of 20 observations, while a 2 × 20 matrix is plotted as 20 sets of 2 observations. hist(x) R Can’t do this in R; but barplot(y) makes a bar graph where you specify the heights, barplot(y,w) also specifies the widths of the bars, and hist can make plots like this too. v=unique(x); c=hist(x,v); bar(v,c) barplot(table(x)) [c,m] = hist(x,k); bar(m,c) or for slightly different plot style use hist(x,k) hist(x,seq(min(x), max(x), length.out=k+1)) errorbar(x,y,s) errbar(x,y,y+s,y-s) Note: errbar is part of the Hmisc package (see item 331 for how to install/load packages). errbar(x,y,y+a,y-b) Note: errbar is part of the Hmisc package (see item 331 for how to install/load packages). pie(v) 249 Make a plot containing errorbars of height a above and b below (x, y) points errorbar(x,y,b,a) 250 Other types of 2-D plots stem(x,y) and stairs(x,y) for other types of 2-D plots. polar(theta,r) to use polar coordinates for plotting. hist(x) D. Hiebeler, Matlab / R Reference No. 251 Description Make a 3-D plot of some data points with given x, y, z coordinates in the vectors x, y, and z. 252 Surface plot of data in matrix A 253 Surface plot √ sin(x + y) y of x between 90 values of y 8 of f (x, y) = for 100 values 0 and 10, and between 2 and 29 Matlab plot3(x,y,z) This works much like plot, as far as plotting symbols, linetypes, and colors. R cloud(z~x*y) You can also use arguments pch and col as with plot. To make a 3-D plot with lines, do cloud(z~x*y,type=’l’, panel.cloud=panel.3dwire) surf(A) persp(A) You can then click on the small curved arrow in the figure window (or choose “Rotate 3D” from the “Tools” menu), and then click and drag the mouse in the figure to rotate it in three dimensions. You can include shading in the image via e.g. persp(A,shade=0.5). There are two viewing angles you can also specify, among other parameters, e.g. persp(A, shade=0.5, theta=50, phi=35). x = linspace(0,10,100); y = linspace(2,8,90); [X,Y] = meshgrid(x,y); Z = sin(X+Y).*sqrt(Y); surf(X,Y,Z) shading flat x = seq(0,10,len=100) y = seq(2,8,len=90) f = function(x,y) return(sin(x+y)*sqrt(y)) z = outer(x,y,f) persp(x,y,z) contour(x,y,z) Or do s=expand.grid(x=x,y=y), and then wireframe(z~x*y,s) or wireframe(z~x*y,s,shade=TRUE) (Note: wireframe is part of the lattice package; see item 331 for how to load packages). If you have vectors x, y, and z all the same length, you can also do symbols(x,y,z). You have to do this when you make the plot, e.g. plot(x,y,xlim=c(x1,x2), ylim=c(y1,y2)) title(main=’somestring’) adds a main title, title(sub=’somestring’) adds a subtitle. You can also include main= and sub= arguments in a plot command. title(xlab=’somestring’, ylab=’anotherstr’). You can also include xlab= and ylab= arguments in a plot command. 254 Other ways of plotting the data from the previous command mesh(X,Y,Z), surfc(X,Y,Z), surfl(X,Y,Z), contour(X,Y,Z), pcolor(X,Y,Z), waterfall(X,Y,Z). Also see the slice command. 255 Set axis ranges in a figure window axis([x1 x2 y1 y2]) 256 Add title to plot title(’somestring’) 257 Add axis labels to plot xlabel(’somestring’) ylabel(’somestring’) and D. Hiebeler, Matlab / R Reference No. 258 Description Include Greek letters or symbols in plot axis labels 259 Change font size to 16 in plot labels 260 Add grid lines to plot grid on (and grid off to turn off) 261 262 Add a text label to a plot Add set of text labels to a plot. xv and yv are vectors. Add an arrow to current plot, with tail at (xt, yt) and head at (xh, yh) text(x,y,’hello’) s={’hi’, ’there’}; text(xv,yv,s) annotation(’arrow’, [xt xh], [yt yh]) Note: coordinates should be normalized figure coordinates, not coordinates within your displayed axes. Find and download from The Mathworks the file dsxy2figxy.m which converts for you, then do this: [fx,fy]=dsxy2figxy([xt xh], [yt yh]); annotation(’arrow’, fx, fy) annotation(’doublearrow’, [x0 x1], [y0 y1]) See note in previous item about normalized figure coordinates. legend(’first’, ’second’, ’Location’, ’NorthWest’) 263 264 Add a double-headed arrow to current plot, with coordinates (x0, y0) and (x1, y1) 265 Add figure legend to top-left corner of plot Matlab You can use basic TeX commands, e.g. plot(x,y); xlabel(’\phi^2 + \mu_{i,j}’) or xlabel(’fecundity \phi’) See also help tex and parts of doc text props for more about building labels using general LaTeX commands For the legends and numerical axis labels, use set(gca, ’FontSize’, 16), and for text labels on axes do e.g. xlabel(’my x var’, ’FontSize’, 16) 30 R plot(x,y,xlab= expression(phi^2 + mu[’i,j’])) or plot(x,y,xlab=expression( paste(’fecundity ’, phi))) See also help(plotmath) and p. 98 of the R Graphics book by Paul Murrell for more. For on-screen graphics, do par(ps=16) followed by e.g. a plot command. For PostScript or PDF plots, add a pointsize=16 argument, e.g. pdf(’myfile.pdf’, width=8, height=8, pointsize=16) (see items 275 and 276) grid() Note that if you’ll be printing the plot, the default style for grid-lines is to use gray dotted lines, which are almost invisible on some printers. You may want to do e.g. grid(lty=’dashed’, col=’black’) to use black dashed lines which are easier to see. text(x,y,’hello’) s=c(’hi’, ’there’); text(xv,yv,s) arrows(xt, yt, xh, yh) arrows(x0, y0, x1, y1, code=3) legend(’topleft’, legend=c(’first’, ’second’), col=c(’red’, ’blue’), pch=c(’*’,’o’)) Matlab note: sometimes you build a graph piece-by-piece, and then want to manually add a legend which doesn’t correspond with the order you put things in the plot. You can manually construct a legend by plotting “invisible” things, then building the legend using them. E.g. to make a legend with black stars and solid lines, and red circles and dashed lines: h1=plot(0,0,’k*-’); set(h1,’Visible’, ’off’); h2=plot(0,0,’k*-’); set(h2,’Visible’, ’off’); legend([h1 h2], ’blah, ’whoa’). Just be sure to choose coordinates for your “invisible” points within the current figure’s axis ranges. D. Hiebeler, Matlab / R Reference 31 No. 266 Description Adding more things to a figure Matlab hold on means everything plotted from now on in that figure window is added to what’s already there. hold off turns it off. clf clears the figure and turns off hold. 267 Plot multiple data sets at once 268 Plot sin(2x) for x between 7 and 18 plot(x,y) where x and y are 2-D matrices. Each column of x is plotted against the corresponding column of y. If x has only one column, it will be re-used. fplot(’sin(2*x)’, [7 18]) 269 Plot color image of integer values in matrix A image(A) to use array values as raw indices into colormap, or imagesc(A) to automatically scale values first (these both draw row 1 of the matrix at the top of the image); or pcolor(A) (draws row 1 of the matrix at the bottom of the image). After using pcolor, try the commands shading flat or shading interp. 270 Add colorbar legend to image plot colorbar, pcolor. 271 Set colormap in image colormap(hot). Instead of hot, you can also use gray, flag, jet (the default), cool, bone, copper, pink, hsv, prism. By default, the length of the new colormap is the same as the currently-installed one; use e.g. colormap(hot(256)) to specify the number of entries. after using image or R points(...) and lines(...) work like plot, but add to what’s already in the figure rather than clearing the figure first. points and lines are basically identical, just with different default plotting styles. Note: axes are not recalculated/redrawn when adding more things to a figure. matplot(x,y) where x and y are 2-D matrices. Each column of x is plotted against the corresponding column of y. If x has only one column, it will be re-used. curve(sin(2*x), 7, 18, 200) makes the plot, by sampling the value of the function at 200 values between 7 and 18 (if you don’t specify the number of points, 101 is the default). You could do this manually yourself via commands like tmpx=seq(7,18,len=200); plot(tmpx, sin(2*tmpx)). image(A) (it rotates the matrix 90 degrees counterclockwise: it draws row 1 of A as the left column of the image, and column 1 of A as the bottom row of the image, so the row number is the x coord and column number is the y coord). It also rescales colors. If you are using a colormap with k entries, but the value k does not appear in A, use image(A,zlim=c(1,k)) to avoid rescaling of colors. Or e.g. image(A,zlim=c(0,k-1)) if you want values 0 through k−1 to be plotted using the k colors. Use filled.contour(A) rather than image(A), although it “blurs” the data via interpolation, or use levelplot(A) from the lattice package (see item 331 for how to load packages). To use a colormap with the latter, do e.g. levelplot(A,col.regions= terrain.colors(100)). image(A,col=terrain.colors(100)). The parameter 100 specifies the length of the colormap. Other colormaps are heat.colors(), topo.colors(), and cm.colors(). D. Hiebeler, Matlab / R Reference No. 272 Description Build your own colormap using Red/Green/Blue triplets Matlab plotting specifications, Symbol Color Symbol b blue . g green o r red x c cyan + m magenta * y yellow s k black d w white v ^ < > p h Matlab Use an n × 3 matrix; each row gives R,G,B intensities between 0 and 1. Can use as argument with colormap. E.g. for 2 colors: mycmap = [0.5 0.8 0.2 ; 0.2 0.2 0.7] 32 R Use a vector of hexadecimal strings, each beginning with ’#’ and giving R,G,B intensities between 00 and FF. E.g. c(’#80CC33’,’#3333B3’); can use as argument to col= parameter to image. You can build such a vector of strings from vectors of Red, Green, and Blue intensities (each between 0 and 1) as follows (for a 2-color example): r=c(0.5,0.2); g=c(0.8,0.2); b=c(0.2,0.7); mycolors=rgb(r,g,b). for use with plot, fplot, semilogx, semilogy, loglog, etc: Marker Symbol Linestyle point (.) solid line circle (◦) : dotted line cross (×) -. dash-dot line plus sign (+) -dashed line asterisk (∗) square (¤) diamond (♦) triangle (down) (▽) triangle (up) (△) triangle (left) (⊳) triangle (right) (⊲) pentragram star hexagram star R plotting specifications for col (color), pch (plotting character), and type arguments, for use with plot, matplot, points, and lines: col Description pch Description type Description ’blue’ Blue ’a’ a (similarly for other p points characters, but see ’.’ below for an exception ’green’ Green 0 open square l lines ’red’ Red 1 open circle b both ’cyan’ Cyan 2 triangle point-up c lines part only of “b” ’magenta’ Magenta 3 + (plus) o lines, points overplotted ’yellow’ Yellow 4 × (cross) h histogram-like lines ’black’ Black 5 diamond s steps ’#RRGGBB’ hexadecimal specifica6 triangle point-down S another kind of steps tion of Red, Green, Blue (Other names) See colors() for list of ’.’ rectangle of size 0.01 n no plotting (can be useavailable color names. inch, 1 pixel, or 1 point ful for setting up axis (1/72 inch) depending ranges, etc.) on device (See table on next page for more) D. Hiebeler, Matlab / R Reference 33 R plotting specifications for lty (line-type) argument, for use with plot, matplot, points, and lines: lty Description 0 blank 1 solid 2 dashed 3 dotted 4 dotdash 5 longdash 6 twodash # # 24 25 A A b b 18 19 20 21 22 23 12 13 14 15 16 17 6 7 8 9 10 11 0 1 2 3 4 5 . R plotting characters, i.e. values for pch argument (from the book R Graphics, by Paul Murrell, Chapman & Hall / CRC, 2006) D. Hiebeler, Matlab / R Reference No. 273 Description Divide up a figure window into smaller sub-figures Matlab subplot(m,n,k) divides the current figure window into an m × n array of subplots, and draws in subplot number k as numbered in “reading order,” i.e. left-to-right, top-tobottom. E.g. subplot(2,3,4) selects the first sub-figure in the second row of a 2 × 3 array of sub-figures. You can do more complex things, e.g. subplot(5,5,[1 2 6 7]) selects the first two subplots in the first row, and first two subplots in the second row, i.e. gives you a bigger subplot within a 5 × 5 array of subplots. (If you that command followed by e.g. subplot(5,5,3) you’ll see what’s meant by that.) 274 Force graphics windows to update drawnow (Matlab normally only updates figure windows when a script/function finishes and returns control to the Matlab prompt, or under a couple of other circumstances. This forces it to update figure windows to reflect any recent plotting commands.) 34 R There are several ways to do this, e.g. using layout or split.screen, although they aren’t quite as friendly as  Matlab’s. E.g. if you let A = 1 1 2  1 1 3 , then layout(A) will 4 5 6 divide the figure into 6 sub-figures: you can imagine the figure divide into a 3 × 3 matrix of smaller blocks; subfigure 1 will take up the upper-left 2 × 2 portion, and sub-figures 2–6 will take up smaller portions, according to the positions of those numbers in the matrix A. Consecutive plotting commands will draw into successive subfigures; there doesn’t seem to be a way to explicitly specify which sub-figure to draw into next. To use split.screen, you can do e.g. split.screen(c(2,1)) to split into a 2 × 1 matrix of subfigures (numbered 1 and 2). Then split.screen(c(1,3),2) splits subfigure 2 into a 1 × 3 matrix of smaller sub-figures (numbered 3, 4, and 5). screen(4) will then select sub-figure number 4, and subsequent plotting commands will draw into it. A third way to accomplish this is via the commands par(mfrow=) or par(mfcol=) to split the figure window, and par(mfg=) to select which sub-figure to draw into. Note that the above methods are all incompatible with each other. R automatically updates graphics windows even before functions/scripts finish executing, so it’s not necessary to explictly request it. But note that some graphics functions (particularly those in the lattice package) don’t display their results when called from scripts or functions; e.g. rather than levelplot(...) you need to do print(levelplot(...)). Such functions will automatically display their plots when called interactively from the command prompt. D. Hiebeler, Matlab / R Reference 7.2 35 Printing/saving graphics No. 275 Description To print/save to a PDF file named fname.pdf Matlab print -dpdf fname saves the contents of currently active figure window 276 To print/save to a PostScript file fname.ps or fname.eps print -dps fname for black & white PostScript; print -dpsc fname for color PostScript; print -deps fname for black & white Encapsulated PostScript; print -depsc fname for color Encapsulated PostScript. The first two save to fname.ps, while the latter two save to fname.eps. 277 To print/save to a JPEG file fname.jpg with jpeg quality = 90 (higher quality looks better but makes the file larger) print -djpeg90 fname R First do pdf(’fname.pdf’). Then, do various plotting commands to make your image, as if you were plotting in a window. Finally, do dev.off() to close/save the PDF file. To print the contents of the active figure window, do dev.copy(device=pdf, file=’fname.pdf’); dev.off(). (But this will not work if you’ve turned off the display list via dev.control(displaylist= ’inhibit’).) You can also simply use dev.copy2pdf(file=’fname.pdf’). postscript(’fname.eps’), followed by your plotting commands, followed by dev.off() to close/save the file. Note: you may want to use postscript(’fname.eps’, horizontal=FALSE) to save your figure in portrait mode rather than the default landscape mode. To print the contents of the active figure window, do dev.copy(device=postscript, file=’fname.eps’); dev.off(). (But this will not work if you’ve turned off the display list via dev.control(displaylist= ’inhibit’).) You can also include the horizontal=FALSE argument with dev.copy(). The command dev.copy2eps(file=’fname.eps’) also saves in portrait mode. jpeg(’fname.jpg’,quality=90), followed by your plotting commands, followed by dev.off() to close/save the file. D. Hiebeler, Matlab / R Reference 7.3 No. 278 36 Animating cellular automata / lattice simulations Description To display images of cellular automata or other lattice simulations while running in real time Matlab Repeatedly use either pcolor or image to display the data. Don’t forget to call drawnow as well, otherwise the figure window will not be updated with each image. R If you simply call image repeatedly, there is a great deal of flickering/flashing. To avoid this, after drawing the image for the first time using e.g. image(A), from then on only use image(A,add=TRUE), which avoids redrawing the entire image (and the associated flicker). However, this will soon consume a great deal of memory, as all drawn images are saved in the image buffer. There are two solutions to that problem: (1) every k time steps, leave off the “add=TRUE” argument to flush the image buffer (and get occasional flickering), where you choose k to balance the flickering vs. memory-usage tradeoff; or (2) after drawing the first image, do dev.control(displaylist= ’inhibit’) to prohibit retaining the data. However, the latter solution means that after the simulation is done, the figure window will not be redrawn if it is resized, or temporarily obscured by another window. (A call to dev.control(displaylist= ’enable’) and then one final image(A) at the end of the simulation will re-enable re-drawing after resizing or obscuring, without consuming extra memory.) D. Hiebeler, Matlab / R Reference 8 No. 279 280 281 282 283 284 285 37 Working with files Description Create a folder (also known as a “directory”) Set/change working directory See list of files in current working directory Run commands in file ‘foo.m’ or ‘foo.R’ respectively Read data from text file “data.txt” into matrix A Read data from text file “data.txt” into matrix A, skipping the first s lines of the file Write data from matrix A into text file “data.txt” Matlab mkdir dirname R dir.create(’dirname’) cd dirname dir setwd(’dirname’) dir() foo source(’foo.R’) A=load(’data.txt’) or A=importdata(’data.txt’) Note that both routines will ignore comments (anything on a line following a “%” character) A=as.matrix(read.table( ’data.txt’)) This will ignore comments (anything on a line following a “#” character). To ignore comments indicated by “%”, do A=as.matrix(read.table( ’data.txt’, comment.char=’%’)) A=as.matrix(read.table( ’data.txt’, skip=s)) tmp=importdata(’data.txt’, ’ ’,s); a=tmp.data save data.txt A -ascii write(t(A), file=’data.txt’, ncolumn=dim(A)[2]) D. Hiebeler, Matlab / R Reference 9 38 Miscellaneous 9.1 Variables No. 286 Description Assigning to variables Matlab x = 5 287 From within a function, assign a value to variable y in the base environment (i.e. the command prompt environment) From within a function, access the value of variable y in the base environment (i.e. the command prompt environment) assignin(’base’, ’y’, 7) who whos whos ab whos *ab* ls.str(pattern=’ab’) openvar(A), or double-click on the variable in the Workspace pane (if it’s being displayed) of your Matlabdesktop fix(A) 294 295 296 297 Short list of defined variables Long list of defined variables See detailed info about the variable ab See detailed info about all variables with “ab” in their name Open graphical data editor, to edit the value of variable A (useful for editing values in a matrix, though it works for non-matrix variables as well) Clear one variable Clear two variables Clear all variables See what type of object x is get(’y’, envir=globalenv()) Though note that inside a function, if there isn’t a local variable y, then just the expression y will look for one in the base environment, but if there is a local y then that one will be used instead. ls() ls.str() str(ab) clear x clear x y clear all class(x) 298 (Variable names) Variable names must begin with a letter, but after that they may contain any combination of letters, digits, and the underscore character. Names are case-sensitive. 299 Result of last command ans contains the result of the last command which did not assign its value to a variable. E.g. after 2+5; x=3, then ans will contain 7. rm(x) rm(x,y) rm(list=ls()) class(x) and typeof(x) give different aspects of the “type” of x Variable names may contain letters, digits, the period, and the underscore character. They cannot begin with a digit or underscore, or with a period followed by a digit. Names are casesensitive. .Last.value contains the result of the last command, whether or not its value was assigned to a variable. E.g. after 2+5; x=3, then .Last.value will contain 3. 288 289 290 291 292 293 evalin(’base’, ’y’) R x <- 5 or x = 5 Note: for compatibility with S-plus, many people prefer the first form. y <<- 7 D. Hiebeler, Matlab / R Reference 9.2 39 Strings and Misc. No. 300 Description Line continuation 301 Controlling output formatting Matlab If you want to break up a Matlab command over more than one line, end all but the last line with three periods: “...”. E.g.: x = 3 + ... 4 or x = 3 ... + 4 of format short g format long g are help format handy; and see 302 303 304 Exit the program Comments Display a string quit or exit % this is a comment disp(’hi there’) or omit trailing newline fprintf(’hi there’) 305 Display a string containing single quotes 306 Give prompt and read numerical input from user disp(’It’’s nice’) or to omit trailing newline fprintf(’It’’s nice’) x = input(’Enter data:’) 307 Give prompt and read character (string) input from user Concatenate strings Concatenate strings stored in a vector 308 309 310 Extract substring of a string 311 Determine whether elements of a vector are in a set, and give positions of corresponding elements in the set. to use x = input(’Enter string:’,’s’) [’two hal’ ’ves’] v={’two ’, ’halves’}; strcat(v{:}) But note that this drops trailing spaces on strings. To avoid that, instead do strcat([v{:}]) text1=’hi there’; text2=text(2:6) x = {’a’, ’aa’, ’bc’, ’c’}; y = {’da’, ’a’, ’bc’, ’a’, ’bc’, ’aa’}; [tf, loc]=ismember(x,y) Then loc contains the locations of last occurrences of elements of x in the set y, and 0 for unmatched elements. R In R, you can spread commands out over multiple lines, and nothing extra is necessary. R will continue reading input until the command is complete. However, this only works when the syntax makes it clear that the first line was not complete. E.g.: x = 3 + 4 works, but x = 3 + 4 does not treat the second line as a continuation of the first. options(digits=6) tells R you’d like to use 6 digits of precision in values it displays (it is only a suggestion, not strictly followed) q() or quit() # this is a comment print(’hi there’) Note: to avoid having double-quotes around the displayed string, do print(’hi there’, quote=FALSE) or print(noquote(’hi there’)). print(’It\’s nice’) or print("It’s nice") print(’Enter data:’); x=scan() But note: if in a script and you use the Edit → Execute menu item to run it, the selected text after the scan statement will be used as source for the input, rather than keyboard. x = readline(’Enter string:’) paste(’two hal’, ’ves’, sep=’’) v=c(’two ’, ’halves’); paste(v, collapse=’’) text1=’hi there’; text2=substr(text1,2,6) x = c(’a’, ’aa’, ’bc’, ’c’); y = c(’da’, ’a’, ’bc’, ’a’, ’bc’, ’aa’); loc=match(x,y) Then loc contains the locations of first occurences of elements of x in the set y, and NA for unmatched elements. D. Hiebeler, Matlab / R Reference No. 312 Description Find indices of regular expression pattern p in string s 313 Perform some commands only if the regular expression p is contained in the string s 314 315 316 317 318 319 320 321 322 323 324 40 Matlab v=regexp(s,p) R v=gregexpr(p,s)[[1]] (The returned vector also has a “match.length” attribute giving lengths of the matches; this attribute can be removed via attributes(v)=NULL.) if (regexp(s,p) ...commands... end if (grepl(p,s)) { ...commands... } Convert number to string Use sprintf to create a formatted string. Use %d for integers (“d” stands for “decimal”, i.e. base 10), %f for floating-point numbers, %e for scientific-notation floating point, %g to automatically choose %e or %f based on the value. You can specify field-widths/precisions, e.g. %5d for integers with padding to 5 spaces, or %.7f for floating-point with 7 digits of precision. There are many other options too; see the docs. Machine epsilon ǫmach , i.e. difference between 1 and the next largest double-precision floating-point number Pause for x seconds Wait for user to press any key num2str(x) as.character(x) x=2; y=3.5; s=sprintf(’x is %d, y=%g’, ... x, y) x=2; y=3.5 s=sprintf(’x is %d, y is %g’, x, y) eps (See help eps for various other things eps can give.) .Machine$double.eps

pause(x)
pause

Produce a beep (or possibly
a visual signal, depending on
preferences set)
Measure CPU time used to
do some commands
Measure elapsed (“wallclock”) time used to do some
commands
Print an error message an interrupt execution
Print a warning message
Putting multiple statements
on one line

beep

Sys.sleep(x)
Don’t know of a way to do this in R,
but scan(quiet=TRUE) will wait until
the user presses the Enter key
alarm()

t1=cputime; ...commands... ;
cputime-t1
tic; ...commands... ; toc or
t1=clock; ...commands... ;
etime(clock,t1)
error(’Problem!’)

t1=proc.time(); ...commands...
; (proc.time()-t1)[1]
t1=proc.time(); ...commands...
; (proc.time()-t1)[3]

warning(’Smaller problem!’)
Separate statements by commas or
semicolons. A semicolon at the end
of a statement suppresses display of
the results (also useful even with just
a single statement on a line), while a
comma does not.

warning(’Smaller problem!’)
Separate statements by semicolons.

stop(’Problem!’)

D. Hiebeler, Matlab / R Reference
No.
325
326

Description
Evaluate contents of a string
s as command(s).
Get a command prompt for
debugging, while executing a
script or function. While at
that prompt, you can type expressions to see the values of
variables, etc.

327

Show where a command is

328

Query/set the search path.

41

Matlab
eval(s)

R
eval(parse(text=s))

Insert the command keyboard in
change to K>>. When you are done
debugging and want to continue executing the file, type return.

Insert the command browser() in
change to Browse[1]>. When you are
done debugging and want to continue
executing the file, either type c or just
press return (i.e. enter a blank line).
Note, if you type n, you enter the step
debugger.
R does not execute commands directly
from files, so there is no equivalent
command.

which sqrt shows you where the file
defining the sqrt function is (but
note that many basic functions are
“built in,” so the Matlab function file is really just a stub containing documentation). This is useful if a command is doing something
strange, e.g. sqrt isn’t working. If
you’ve accidentally defined a variable
called sqrt, then which sqrt will
tell you, so you can clear sqrt to
erase it so that you can go back to
using the function sqrt.
path displays the current search path
(the list of places Matlab searches
for commands you enter). To add a
directory ~/foo to the beginning of
the search path, do

R does not use a search path to look
for files.

329

Startup sequence

330

Shutdown sequence

or to add it to the end of the path,
do addpath ~/foo -end (Note: you
should generally add the full path
of a directory, i.e. in Linux or Mac
OS-X something like ~/foo as above
or of the form /usr/local/lib/foo,
while under Windows it would be
something like C:/foo)
If a file startup.m exists in the
startup directory for Matlab, its
contents are executed.
(See the
Matlab docs for how to change the
startup directory.)

Upon typing quit or exit, Matlab
will run the script finish.m if present
somewhere in the search path.

If a file .Rprofile exists in the current directory or the user’s home directory (in that order), its contents
are sourced; saved data from the file
.RData (if it exists) are then loaded.
If a function .First() has been defined, it is then called (so the obvious
place to define this function is in your
.Rprofile file).
Upon typing q() or quit(), R will call
the function .Last() if it has been defined (one obvious place to define it
would be in the .Rprofile file)

D. Hiebeler, Matlab / R Reference
No.
331

Description

10
No.
332

333

334

335

Matlab
Matlab does not have packages. It
has toolboxes, which you can purchase and install. “Contributed”
code (written by end users) can simply be downloaded and put in a directory which you then add to Matlab’s path (see item 328 for how to

42
R
To install e.g. the deSolve package, you can use the command
install.packages(’deSolve’).
You then need to load the package
in order to use it, via the command
library(’deSolve’). When running
R again later you’ll need to load the
package again to use it, but you
should not need to re-install it. Note
that the lattice package is typically
included with binary distributions of
R, so it only needs to be loaded, not
installed.

Spatial Modeling

Description
Take an L×L matrix A of
0s and 1s, and “seed” fraction p of the 0s (turn them
into 1s), not changing entries
Take an L × L matrix A of 0s
and 1s, and “kill” fraction p
of the 1s (turn them into 0s),
not changing the rest of the
entries
Do “wraparound” on a coordinate newx that you’ve already calculated. You can
replace newx with x+dx if
you want to do wraparound
on an offset x coordinate.
Randomly initialize a portion
of an array: set fraction p of
sites in rows iy1 through iy2
and columns ix1 through ix2
equal to 1 (and set the rest of
the sites in that block equal
to zero). Note: this assume
iy1 < iy2 and ix1 < ix2.

Matlab
A = (A | (rand(L) < p))*1;

R
A = (A | (matrix(runif(L^2),L)
< p))*1

A = (A & (rand(L) < 1-p))*1;

A = (A & (matrix(runif(L^2),L)
< 1-p))*1

mod(newx-1,L)+1 Note: for portability with other languages such as
C which handle MOD of negative
values differently, you may want to
get in the habit of instead doing
mod(newx-1+L,L)+1
dx=ix2-ix1+1; dy=iy2-iy1+1;
A(iy1:iy2,ix1:ix2) = ...
(rand(dy,dx) < p0)*1;

((newx-1) %% L) + 1 Note:
for
portability with other languages such
as C which handle MOD of negative values differently, you may want
to get in the habit of instead doing
((newx-1+L)%%L) + 1
dx=ix2-ix1+1; dy=iy2-iy1+1;
A[iy1:iy2,ix1:ix2] =
(matrix(runif(dy*dx),dy) <
p0)*1

INDEX OF MATLAB COMMANDS AND CONCEPTS

43

Index of MATLAB commands and concepts
’, 83
,, 324
.*, 82
..., 300
./, 90
.^, 94
/, 89
:, 12–14
;, 324
=, 286
[, 6–8
%, 303
&, 186, 187
^, 54, 92, 93
\, 84, 91
{ 49
abs, 55, 74
acos, 60
acosh, 62
all, 188
angle, 75
annotation, 263, 264
ans, 299
any, 189
arrows in plots, 263, 264
asin, 60
asinh, 62
assignin, 287
atan, 60
atanh, 62
average, see mean
axis, 255
bar, 244, 246, 247
beep, 319
binocdf, 229
binopdf, 222
binornd, 213
boolean tests
scalar, 186
vector, 187–189
break, 191
cd, 280
ceil, 66
cell, 48
cell arrays, 48
extracting elements of, 49
cellular automata animation, 278

chol, 100
circshift, 33
class, 297
clear, 294–296
clf, 266
clock, 321
close, 239
colon, see :
colorbar, 270
colormap
colormap, 271, 272
column vector, 7
complex numbers, 73–78
cond, 104–106
conj, 76
continue, 191
contour, 254
conv, 165
corr, 118–123
cos, 59
cosh, 61
cov, 116, 117
cputime, 320
cross, 80
csape, 178, 180, 181
cubic splines, 179, 180
natural, 178
not-a-knot, 182
periodic, 181
cumprod, 135
cumsum, 131–134
cumulative distribution functions
binomial, 229
continuous uniform on interval (a, b), 233
discrete uniform from 1..n, 234
exponential, 231
normal, 232
Poisson, 230
debugging, 326
det, 86
diag, 22, 23
diff, 137
differential equations, see ode45
dir, 281
disp, 304, 305
doc, 4
dot, 79

INDEX OF MATLAB COMMANDS AND CONCEPTS
drawnow, 274, 278
echelon form, see matrix
eig, 96
element-by-element matrix operations, see matrix
else, 185
elseif, 185
end, 40
eps, 316
erf, 68
erfc, 69
erfcinv, 71
erfinv, 70
error, 322
errorbar, 248, 249
etime, 321
eval, 325
evalin, 288
exit, 302, 330
exp, 56
expcdf, 231
expm, 130
exppdf, 224
exprnd, 215
eye, 21
figure, 235, 236
file
running commands in, 282
text
saving data to, 285
find, 160–162
finish.m, 330
fliplr, 34
flipud, 35
floor, 65
fminbnd, 168, 169
fminsearch, 170, 171
font size in plots, 259
for, 183
format, 301
fplot, 268
fprintf, 304, 305
function
multi-variable
minimization, 170
minimization over first parameter only, 169
minimization over only some parameters,
171
single-variable
minimization, 168

user-written, 193
returning multiple values, 194
fzero, 167
gca, 259
gcf, 237
get, 238
Greek letters
in plot labels, 258
grid, 260
help, 1–3
helpbrowser, 4
helpdesk, 4
hilb, 46
hist, 163, 164, 245, 246
hold, 266
identity, see matrix
if, 184–186
imag, 78
image, 269, 278
imagesc, 269
importdata, 283, 284
ind2sub, 36
indexing
matrix, 10
with a single index, 11
vector, 9
input, 306, 307
inv, 87
inverse, see matrix
ismember, 311
keyboard, 326
legend, 265
length, 150, 152
linspace, 15
log, 57
log10, 58
log2, 58
loglog, 243
logspace, 16
lookfor, 5
lu, 97
matrix, 8
boolean operations on, 161, 162
changing shape of, 43
Cholesky factorization, 100
circular shift, 33
condition number, 104–106

44

INDEX OF MATLAB COMMANDS AND CONCEPTS
containing all indentical entries, 20
containing all zeros, 19
converting row, column to single index, 37
converting single-index to row, column, 36
cumulative sums of all elements of, 134
cumulative sums of columns, 132
cumulative sums of rows, 133
determinant, 86
diagonal, 22
echelon form, 85
eigenvalues and eigenvectors of, 96
equation
solving, 84
exponential of, 130
extracting a column of, 28
extracting a rectangular piece of, 31
extracting a row of, 29
extracting specified rows and columns of, 32
“gluing” together, 24, 25
identity, 21
inverse, 87
lower-triangular portion of, 44
LU factorization, 97
minimum of values of, 140
minimum value of each column of, 141
minimum value of each row of, 142
modifying elements given lists of rows and
columns, 38
multiplication, 81
element-by-element, 82
N -dimensional, 47
norm, 103
powers of, 93
product
of all elements, 127
of columns of, 128
of rows of, 129
QR factorization, 101
rank, 95
re-shaping its elements into a vector, 30
reverse elements in columns, 35
reverse elements in rows, 34
Schur decomposition, 99
singular value decomposition, 98
size of, 147–149, 151, 152
sum
of all elements, 124
of columns of, 125
of rows of, 126
trace, 88
transpose, 83
upper-triangular portion of, 45
max, see min

45

mean, 107–109
mesh, 254
meshgrid, 26, 118, 253
min, 139–142, 144–146
mind, 143
mkdir, 279
mnpdf, 228
mnrnd, 220, 221
mod, 63, 334
modulo arithmetic, 63, 334
multiple statements on one line, 324
nchoosek, 72
norm, 102, 103
normcdf, 232
normpdf, 225
normrnd, 219
num2str, 314
numel, 151
ode45, 195–197
ones, 18, 20
openvar, 293
optimization, 168–171
path, 328
pause, 317, 318
pcolor, 254, 269, 278
perform some commands with probability p, 207
permutation of integers 1..n, 208
plot, 240–242, 267
Greek letters in axis labels, 258
plot3, 251
poisscdf, 230
poisspdf, 223
poissrnd, 214
polar, 250
polyfit, 174–176
polynomial
least-squares fitted, 175–177
multiplication, 165
roots of, 166
ppval, 178, 180, 181
print, 275–277
probability density functions
binomial, 222
continuous uniform on interval (a, b), 226
discrete uniform from 1..n, 227
exponential, 224
multinomial, 228
normal, 225
Poisson, 223
prod, 127–129

INDEX OF MATLAB COMMANDS AND CONCEPTS
qr, 101
quit, 302, 330
rand, 198–206, 212
random values
Bernoulli, 204
binomial, 213
continuous uniform distribution on interval
(a, b), 201, 218
continuous uniform distribution on interval
(0,1), 198–200
discrete uniform distribution from a..b, 206
discrete uniform distribution from 1..k, 203,
216, 217
discrete uniform distribution, 202
exponential, 215
k unique values sampled from integers 1..n,
209
multinomial, 220, 221
normal, 219
Poisson, 214
setting the seed, 212
randperm, 208, 209
randsample, 209–211
rank, 95
rcond, 104
real, 77
regexp, 312, 313
reshape, 43, 47
roots
of general single-variable function, 167
polynomial, 166
roots, 166
round, 64
row vector, 6
rref, 85
sampling values from a vector, 210, 211
save, 285
schur, 99
semilogx, 243
semilogy, 243
set, 259
sign, 67
sin, 59
sinh, 61
size, 147–149
slice, 254
sort, 153, 154, 209
sortrows, 155–158
spline, 182

46

splines, see cubic splines
sprintf, 315
sqrt, 53
stairs, 250
standard deviation, see std
startup.m, 329
std, 110–112
stem, 250
stop, 322
strcat, 309
string
concatenation, 308
converting number to, 314
pattern matching, 312, 313
substrings, 310
struct, 51
sub2ind, 37, 38
subplot, 273
sum, 124–126, 187
surf, 252, 253
surfc, 254
surfl, 254
svd, 98
switch, 192
tan, 59
tanh, 61
text, 261, 262
tic, 321
title, 256
toc, 321
trace, 88
transpose, see matrix
trapz, 173
tril, 44
triu, 45
unidcdf, 234
unidpdf, 227
unidrnd, 216, 217
unifcdf, 233
unifpdf, 226
unifrnd, 218
unique, 163, 246
var, 113–115
variables
assigning, 286
assigning in base environment from function, 287
evaluating from base environment within function, 288
names, 298
variance, see var

INDEX OF MATLAB COMMANDS AND CONCEPTS
vector
boolean operations on, 159, 160
containing all indentical entries, 18
containing all zeros, 17
counts of binned values in, 164
counts of discrete values in, 163
cross product, 80
cumulative sum of elements of, 131
differences between consecutive elements of,
137
dot product, 79
minimum of values of, 139
norm, 102
position of first occurance of minimum value
in, 146
product of all elements, 127
reversing order of elements in, 27
size of, 150
sum of all elements, 124
truncating, 39
warning, 323
waterfall, 254
which, 327
while, 190
who, 289
whos, 290–292
xlabel, 257–259
ylabel, 257, 258
zeros, 17, 19

47

INDEX OF R COMMANDS AND CONCEPTS

48

Index of R commands and concepts
*, 92
/, 90
:, 12, 13
;, 324
<-, 286
<<-, 287
=, 286
?, 1, 2
[[, 49
#, 303
%%, 63, 334
&, 186, 187
^, 54, 94
abs, 55, 74
acos, 60
acosh, 62
alarm, 319
all, 188
any, 189
apply, 34, 35, 112, 114, 115, 128, 141, 142
Arg, 75
array, 47
arrows, 263, 264
as.character, 314
as.formula, 176
as.numeric, 163
asin, 60
asinh, 62
atan, 60
atanh, 62
average, see mean
barplot, 244, 246
boolean tests
scalar, 186
vector, 187–189
break, 191
browser, 326
c, 6, 7
cbind, 24, 38
ceiling, 66
cellular automata animation, 278
chol, 100
choose, 72
class, 297
cloud, 251
coef, 174–177
colMeans, 108
colon, see :

colormap
for image, 271
colSums, 125
column vector, 7
complex numbers, 73–78
Conj, 76
contour, 254
convolve, 165
cor, 119–123
cos, 59
cosh, 61
cov, 116–118
cubic splines, 179, 180, 182
natural, 178
periodic, 181
cummax, 136
cummin, 136
cumprod, 135
cumsum, 131–134
cumulative distribution functions
binomial, 229
continuous uniform on interval (a, b), 233
discrete uniform from 1..n, 234
exponential, 231
normal, 232
Poisson, 230
curve, 268
data.frame, 51
dbinom, 222
debugging, 326
det, 86
dev.control, 275, 276, 278
dev.copy, 275, 276
dev.copy2eps, 276
dev.copy2pdf, 275
dev.cur(), 237
dev.list, 238
dev.new, 235
dev.off, 239, 275–277
dev.set, 236
dexp, 224
diag, 21–23
diff, 137
differential equations, see lsoda
dim, 43, 149, 152
dir, 281
dir.create, 279

INDEX OF R COMMANDS AND CONCEPTS
dmultinom, 228
dnorm, 225
dpois, 223
dunif, 226
echelon form, see matrix
eig, 96
element-by-element matrix operations, see matrix
else, 185
errbar, 248, 249
eval, 325
exp, 56
expand, 97
expand.grid, 254
expm, 130
file
running commands in, 282
text
saving data to, 285
filled.contour, 270
.First, 329
fix, 293
floor, 65
font size in plots, 259
for, 183
function
multi-variable
minimization, 170
minimization over first parameter only, 169
minimization over only some parameters,
171
single-variable
minimization, 168
user-written, 193
returning multiple values, 194
get, 288
globalenv, 288
graphics
not being displayed from scripts/functions,
274
Greek letters
in plot labels, 258
gregexpr, 312
grepl, 313
grid, 260
help, 1, 2
help.search, 5
help.start, 4
Hilbert, 46

49
hist, 164, 244, 245, 247
identity, see matrix
if, 184–186
ifelse, 138
Im, 78
image, 269, 278
indexing
matrix, 10
with a single index, 11
vector, 9
install.packages, 331
integrate, 172
inverse, see matrix
jpeg, 277
kappa, 105
.Last, 330
.Last.value, 299
lattice package, 254, 270, 274, 331
layout, 273
legend, 265
length, 39, 40, 150, 151
levelplot, 270, 274
library, 3, 331
lines, 266
lists, 48
extracting elements of, 49
lm, 174–177
lm.fit, 176
log, 57
log10, 58
log2, 58
lower.tri, 45
ls, 289
ls.str, 290, 292
lsoda, 195–197
.Machine\$double.eps, 316
match, 311
matplot, 267
matrix, 8
boolean operations on, 161, 162
changing shape of, 43
Cholesky factorization, 100
circular shift, 33
condition number, 104–106
containing all indentical entries, 20
containing all zeros, 19
converting row, column to single index, 37
converting single-index to row, column, 36
cumulative sums of all elements of, 134

INDEX OF R COMMANDS AND CONCEPTS
cumulative sums of columns, 132
cumulative sums of rows, 133
determinant, 86
diagonal, 22
echelon form, 85
eigenvalues and eigenvectors of, 96
equation
solving, 84
exponential of, 130
extracting a column of, 28
extracting a rectangular piece of, 31
extracting a row of, 29
extracting specified rows and columns of, 32
“gluing” together, 24, 25
identity, 21
inverse, 87
lower-triangular portion of, 44
LU factorization, 97
minimum of values of, 140
minimum value of each column of, 141
minimum value of each row of, 142
modifying elements given lists of rows and
columns, 38
multiplication, 81
element-by-element, 82
N -dimensional, 47
norm, 103
powers of, 93
product
of all elements, 127
of columns of, 128
of rows of, 129
QR factorization, 101
rank, 95
re-shaping its elements into a vector, 30
reverse elements in columns, 35
reverse elements in rows, 34
Schur decomposition, 99
singular value decomposition, 98
size of, 147–149, 151, 152
sum
of all elements, 124
of columns of, 125
of rows of, 126
trace, 88
transpose, 83
upper-triangular portion of, 45
matrix, 8, 19, 20
max, see min
mean, 107
min, 139–142, 145
Mod, 74
modulo arithmetic, 63, 334

50
multiple statements on one line, 324
names, 50, 163
ncol, 148
next, 191
norm, 102, 103
nrow, 147
optim, 170, 171
optimization, 168–171
optimize, 168, 169
options
digits=, 301
order, 155–158
outer, 176, 253
packages
installing, 331
par, 259
par
mfcol=, 273
mfrow=, 273
parse, 325
paste, 176, 308, 309
pbinom, 229
pdf, 259, 275
perform some commands with probability p, 207
permutation of integers 1..n, 208
persp, 252, 253
pexp, 231
pie, 250
plot, 240–243
Greek letters in axis labels, 258
main=, 256
sub=, 256
xlab=, 257, 258
xlim=, 255
ylab=, 257, 258
ylim=, 255
pmin, 143, 144
pnorm, 68, 69, 232
points, 266
polynomial
least-squares fitted, 175–177
multiplication, 165
roots of, 166
polyreg, 176
polyroot, 166
postscript, 276
ppois, 230
print, 274, 304, 305
probability density functions
binomial, 222

INDEX OF R COMMANDS AND CONCEPTS
continuous uniform on interval (a, b), 226
discrete uniform from 1..n, 227
exponential, 224
multinomial, 228
normal, 225
Poisson, 223
proc.time, 320, 321
prod, 127–129
punif, 233
q, 302, 330
qnorm, 70, 71
qr, 95, 101
quartz, 235
quit, 302, 330
rand, 205
random values
Bernoulli, 204
binomial, 213
continuous uniform distribution on interval
(a, b), 201, 218
continuous uniform distribution on interval
(0,1), 198, 200
continuous uniform distribution on inteval
(0,1), 199
discrete uniform distribution from a..b, 206
discrete uniform distribution from 1..k, 203,
216, 217
discrete uniform distribution, 202
exponential, 215
k unique values sampled from integers 1..n,
209
multinomial, 220, 221
normal, 219
Poisson, 214
setting the seed, 212
rbind, 25
rbinom, 213
rcond, 104, 106
.RData, 329
Re, 77
rep, 17, 18
rev, 27
rexp, 215
rgb, 272
rm, 294–296
rmultinom, 220, 221
rnorm, 219
roots
of general single-variable function, 167

51
polynomial, 166
round, 64
row vector, 6
rowMeans, 109
rpois, 214
.Rprofile, 329
runif, 198–204, 206, 218
sample, 208–211, 216, 217
sampling values from a vector, 210, 211
scan, 306, 318
Schur, 99
sd, 110–112
seq, 14–16
set.seed, 212
setwd, 280
sign, 67
sin, 59
sinh, 61
solve, 84, 87, 89, 91
sort, 153, 154
source, 282
spline, 178, 179, 181
splines, see cubic splines
split.screen, 273
sprintf, 315
sqrt, 53
standard deviation, see sd
str, 291
string
concatenation, 308
converting number to, 314
pattern matching, 312, 313
substrings, 310
substr, 310
sum, 124, 126, 187
svd, 98
switch, 192
symbols, 254
Sys.sleep, 317
t, 83
table, 163, 246
tan, 59
tanh, 61
text, 261, 262
title, 256, 257
transpose, see matrix
typeof, 297
uniroot, 167
upper.tri, 44
var, 113–115, 117

INDEX OF R COMMANDS AND CONCEPTS
variables
assigning, 286
assigning in base environment from function, 287
evaluating from base environment within function, 288
names, 298
variance, see var
vector
boolean operations on, 159, 160
containing all indentical entries, 18
containing all zeros, 17
counts of binned values in, 164
counts of discrete values in, 163
cross product, 80
cumulative sum of elements of, 131
differences between consecutive elements of,
137
dot product, 79
minimum of values of, 139
norm, 102
position of first occurance of minimum value
in, 146
product of all elements, 127
reversing order of elements in, 27
size of, 150
sum of all elements, 124
truncating, 39
vector, 48
warning, 323
which, 160–162
which.max, see which.min
which.min, 146
while, 190
windows, 235
wireframe, 254
write, 285
x11, 235

52



Source Exif Data:
File Type                       : PDF
File Type Extension             : pdf
MIME Type                       : application/pdf