# MatlabR.dvi Hiebeler Matlab R

User Manual: Hiebeler-matlabR

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

1
MATLAB R
°/RReference
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 ﬁrst version of this reference during the Spring 2007 semester, as I learned Rwhile
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 Rin statistics courses asked if they could use Rin my class as well, and I said
yes. My colleague Bill Halteman was a great help as I frantically learned Rto stay ahead of the class.
As I went, every time I learned how to do something in Rfor 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 “Rfor 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 Rindex 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 ﬁrst column of the reference document, rather than page numbers.
Any corrections, suggested improvements, or even just notiﬁcation 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 Rpackages which are not part of the core distributions.
But if you believe you have a “better” way (either simpler, or more computationally eﬃcient) 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 modiﬁed 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, un-
der the above conditions for modiﬁed versions, except that this permission notice may be stated in a
translation approved by the Free Software Foundation.
°2007–2010 David Hiebeler
D. Hiebeler, Matlab /RReference 2
Contents
1 Help 3
2 Entering/building/indexing matrices 3
2.1 Cell arrays and lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Structs and data frames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3 Computations 6
3.1 Basic computations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.2 Complex numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.3 Matrix/vector computations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.4 Root-ﬁnding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.5 Function optimization/minimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.6 Numerical integration / quadrature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.7 Curve ﬁtting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4 Conditionals, control structure, loops 17
5 Functions, ODEs 21
6 Probability and random values 23
7 Graphics 27
7.1 Various types of plotting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
7.2 Printing/saving graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
7.3 Animating cellular automata / lattice simulations . . . . . . . . . . . . . . . . . . . . . . . 36
8 Working with ﬁles 37
9 Miscellaneous 38
9.1 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
9.2 Strings and Misc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
10 Spatial Modeling 42
Index of MATLAB commands and concepts 43
Index of Rcommands and concepts 48
D. Hiebeler, Matlab /RReference 3
1 Help
No. Description Matlab R
1 Show help for a function (e.g.
sqrt)
help sqrt, or helpwin sqrt to see
it in a separate window
help(sqrt) or ?sqrt
2 Show help for a built-in key-
word (e.g. for)
help for help(’for’) or ?’for’
3 General list of many help top-
ics
help library() to see available libraries,
or library(help=’base’) for very
long list of stuﬀ in base package which
you can see help for
4 Explore main documentation
in browser
doc or helpbrowser (previously it
was helpdesk, which is now being
phased out)
help.start()
5 Search documentation for
keyword or partial keyword
(e.g. functions which refer to
“binomial”)
lookfor binomial help.search(’binomial’)
2 Entering/building/indexing matrices
No. Description Matlab R
6 Enter a row vector ~v =
£1 2 3 4 ¤
v=[1 2 3 4] 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)
7 Enter a column vector
1
2
3
4
[1; 2; 3; 4] c(1,2,3,4)
(Rdoes not distinguish between row
and column vectors.)
8 Enter a matrix ·1 2 3
4 5 6 ¸[1 2 3 ; 4 5 6] 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)
9 Access an element of vector vv(3) v[3]
10 Access an element of matrix
A
A(2,3) A[2,3]
11 Access an element of matrix
Ausing a single index: in-
dices count down the ﬁrst col-
umn, then down the second
column, etc.
A(5) A[5]
12 Build the vector [2 3 4 5 6 7] 2:7 2:7
13 Build the vector [7 6 5 4 3 2] 7:-1:2 7:2
14 Build the vector [2 5 8 11 14] 2:3:14 seq(2,14,3)
D. Hiebeler, Matlab /RReference 4
No. Description Matlab R
15 Build a vector containing
nequally-spaced values be-
tween aand binclusive
linspace(a,b,n) seq(a,b,length.out=n) or just
seq(a,b,len=n)
16 Build a vector containing
nlogarithmically equally-
spaced values between 10a
and 10binclusive
logspace(a,b,n) 10^seq(a,b,len=n)
17 Build a vector of length k
containing all zeros
zeros(k,1) (for a column vector) or
zeros(1,k) (for a row vector)
rep(0,k)
18 Build a vector of length k
containing the value jin all
positions
j*ones(k,1) (for a column vector)
or j*ones(1,k) (for a row vector)
rep(j,k)
19 Build an m×nmatrix of zeros zeros(m,n) matrix(0,nrow=m,ncol=n) or just
matrix(0,m,n)
20 Build an m×nmatrix con-
taining jin all positions
j*ones(m,n) matrix(j,nrow=m,ncol=n) or just
matrix(j,m,n)
21 n×nidentity matrix Ineye(n) diag(n)
22 Build diagonal matrix Aus-
ing elements of vector vas di-
agonal entries
diag(v) diag(v,nrow=length(v)) (Note: if
you are sure the length of vector vis 2
or more, you can simply say diag(v).)
23 Extract diagonal elements of
matrix A
v=diag(A) v=diag(A)
24 “Glue” two matrices a1 and
a2 (with the same number of
rows) side-by-side
[a1 a2] cbind(a1,a2)
25 “Stack” two matrices a1 and
a2 (with the same number of
columns) on top of each other
[a1; a2] rbind(a1,a2)
26 Given vectors xand yof
lengths mand nrespectively,
build n×mmatrices Xwhose
rows are copies of xand Y
whose columns are copies of
y
[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)
27 Reverse the order of elements
in vector v
v(end:-1:1) rev(v)
28 Column 2 of matrix AA(:,2) A[,2] Note: that gives the result as a
vector. To make the result a m×1 ma-
29 Row 7 of matrix AA(7,:) A[7,] Note: that gives the result as a
vector. To make the result a 1×nma-
30 All elements of Aas a vector,
column-by-column
A(:) (gives a column vector) c(A)
31 Rows 2–4, columns 6–10 of A
(this is a 3 ×5 matrix)
A(2:4,6:10) A[2:4,6:10]
32 A 3 ×2 matrix consisting of
rows 7, 7, and 6 and columns
2 and 1 of A(in that order)
A([7 7 6], [2 1]) A[c(7,7,6),c(2,1)]
33 Circularly shift the rows of
ments, and right by s2ele-
ments
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 /RReference 5
No. Description Matlab R
34 Flip the order of elements in
each row of matrix A
fliplr(A) t(apply(A,1,rev))
35 Flip the order of elements in
each column of matrix A
flipud(A) apply(A,2,rev)
36 Given a single index ind into
an m×nmatrix A, compute
the row rand column cof
that position (also works if
ind is a vector)
[r,c] = ind2sub(size(A), ind) r = ((ind-1) %% m) + 1
c = floor((ind-1) / m) + 1
37 Given the row rand column
cof 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 rand care vec-
tors)
ind = sub2ind(size(A), r, c) ind = (c-1)*m + r
38 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 Aequal to 12. That
is, kelements of Awill be
modiﬁed.
inds = sub2ind(size(A),r,c);
A(inds) = 12;
inds = cbind(r,c)
A[inds] = 12
39 Truncate vector v, keeping
only the ﬁrst 10 elements
v = v(1:10) v = v[1:10], or length(v) = 10
also works
40 Extract elements of vector v
from position ato the end
v(a:end) v[a:length(v)]
41 All but the kth element of
vector v
v([1:(k-1) (k+1):end]) v[-k]
42 All but the jth and kth ele-
ments of vector v
No simple way? Generalize the pre-
vious item
v[c(-j,-k)]
43 Reshape matrix A, making it
an m×nmatrix with ele-
ments taken columnwise from
the original A(which must
have mn elements)
A = reshape(A,m,n) dim(A) = c(m,n)
44 Extract the lower-triangular
portion of matrix A
L = tril(A) L = A; L[upper.tri(L)]=0
45 Extract the upper-triangular
portion of matrix A
U = triu(A) U = A; U[lower.tri(U)]=0
46 Enter n×nHilbert matrix H
where Hij = 1/(i+j1)
hilb(n) Hilbert(n), but this is part of the
Matrix package which you’ll need to
install (see item 331 for how to in-
47 Enter an n-dimensional array,
e.g. a 3 ×4×2 array with the
values 1 through 24
reshape(1:24, 3, 4, 2) or
reshape(1:24, [3 4 2])
array(1:24, c(3,4,2)) (Note that
amatrix is 2-D, i.e. rows and
columns, while an array is more gen-
erally N-D)
D. Hiebeler, Matlab /RReference 6
2.1 Cell arrays and lists
No. Description Matlab R
48 Build a vector vof length n,
capable of containing diﬀer-
ent data types in diﬀerent el-
ements (called a cell array in
Matlab, and a list in R)
v = cell(1,n) In general,
cell(m,n) makes an m×ncell
array. Then you can do e.g.:
v{1} = 12
v{2} = ’hi there’
v{3} = rand(3)
v = vector(’list’,n) Then you
can do e.g.:
v[[1]] = 12
v[[2]] = ’hi there’
v[[3]] = matrix(runif(9),3)
49 Extract the ith element of a
cell/list vector vw = v{i}
If you use regular indexing, i.e. w
= v(i), then wwill be a 1 ×1 cell
matrix containing the contents of the
ith element of v.
w = v[[i]]
If you use regular indexing, i.e. w =
v[i], then wwill be a list of length 1
containing the contents of the ith ele-
ment of v.
50 Set the name of the ith ele-
ment in a list.
(Matlab does not have names asso-
ciated with elements of cell arrays.)
names(v)[3] = ’myrandmatrix’
Use names(v) to see all names, and
names(v)=NULL to clear all names.
2.2 Structs and data frames
No. Description Matlab R
51 Create a matrix-like object
with diﬀerent named columns
(a struct in Matlab, or a
data frame in R)
avals=2*ones(1,6);
yvals=6:-1:1; v=[1 5 3 2 3 7];
d=struct(’a’,avals,
’yy’, yyvals, ’fac’, v);
v=c(1,5,3,2,3,7); d=data.frame(
cbind(a=2, yy=6:1), v)
Note that I (surprisingly) don’t use Rfor 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.
3 Computations
3.1 Basic computations
No. Description Matlab R
52 a+b,ab,ab,a/b a+b,a-b,a*b,a/b a+b,a-b,a*b,a/b
53 asqrt(a) sqrt(a)
54 aba^b a^b
55 |a|(note: for complex ar-
guments, this computes the
modulus)
abs(a) abs(a)
56 eaexp(a) exp(a)
57 ln(a)log(a) log(a)
58 log2(a), log10(a)log2(a),log10(a) log2(a),log10(a)
59 sin(a), cos(a), tan(a)sin(a),cos(a),tan(a) sin(a),cos(a),tan(a)
60 sin1(a), cos1(a), tan1(a)asin(a),acos(a),atan(a) asin(a),acos(a),atan(a)
61 sinh(a), cosh(a), tanh(a)sinh(a),cosh(a),tanh(a) sinh(a),cosh(a),tanh(a)
62 sinh1(a), cosh1(a),
tanh1(a)
asinh(a),acosh(a),atanh(a) asinh(a),acosh(a),atanh(a)
D. Hiebeler, Matlab /RReference 7
No. Description Matlab R
63 nMOD k(modulo arith-
metic)
mod(n,k) n %% k
64 Round to nearest integer round(x) round(x) (Note: Ruses IEC 60559
standard, rounding 5 to the even digit
— so e.g. round(0.5) gives 0, not 1.)
65 Round down to next lowest
integer
floor(x) floor(x)
66 Round up to next largest in-
teger
ceil(x) ceiling(x)
67 Sign of x(+1, 0, or -1) sign(x) (Note: for complex values,
this computes x/abs(x).)
sign(x) (Does not work with com-
plex values)
68 Error function erf(x) =
(2/π)Rx
0et2dt
erf(x) 2*pnorm(x*sqrt(2))-1
69 Complementary er-
ror function cerf(x) =
(2/π)R
xet2dt = 1-erf(x)
erfc(x) 2*pnorm(x*sqrt(2),lower=FALSE)
70 Inverse error function erfinv(x) qnorm((1+x)/2)/sqrt(2)
71 Inverse complementary error
function
erfcinv(x) qnorm(x/2,lower=FALSE)/sqrt(2)
72 Binomial coeﬃcient
µn
k=n!/(n!(nk)!)
nchoosek(n,k) choose(n,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 Complex numbers
No. Description Matlab R
73 Enter a complex number 1+2i 1+2i
74 Modulus (magnitude) abs(z) abs(z) or Mod(z)
75 Argument (angle) angle(z) Arg(z)
76 Complex conjugate conj(z) Conj(z)
77 Real part of zreal(z) Re(z)
78 Imaginary part of zimag(z) Im(z)
D. Hiebeler, Matlab /RReference 8
3.3 Matrix/vector computations
No. Description Matlab R
79 Vector dot product ~x ·~y =
~xT~y
dot(x,y) sum(x*y)
80 Vector cross product ~x ×~y cross(x,y) Not in base R, but e.g. the xprod
function from the RSEIS package will
do it (see item 331 for how to in-
81 Matrix multiplication AB A * B A %*% B
82 Element-by-element multipli-
cation of Aand B
A .* B A * B
83 Transpose of a matrix, ATA’ (This is actually the complex con-
jugate (i.e. Hermitian) transpose;
use A.’ for the non-conjugate trans-
pose if you like; they are equivalent
for real matrices.)
t(A) for transpose, or Conj(t(A)) for
conjugate (Hermitian) transpose
84 Solve A~x =~
bA\b Warning: if there is no solution,
Matlab gives you a least-squares
“best ﬁt.” If there are many solu-
tions, Matlab just gives you one of
them.
solve(A,b) Warning: this only works
with square invertible matrices.
85 Reduced echelon form of Arref(A) Rdoes not have a function to do this
87 Inverse of Ainv(A) solve(A)
88 Trace of Atrace(A) sum(diag(A))
89 Compute AB1A/B A %*% solve(B)
90 Element-by-element division
of Aand B
A ./ B A / B
91 Compute A1BA\B solve(A,B)
92 Square the matrix AA^2 A %*% A
93 Raise matrix Ato the kth
power
A^k (No easy way to do this in R
other than repeated multiplication
A %*% A %*% A...)
94 Raise each element of Ato
the kth power
A.^k A^k
95 Rank of matrix Arank(A) qr(A)$rank 96 Set wto be a vector of eigen- values of A, and Va matrix containing the corresponding eigenvectors [V,D]=eig(A) and then w=diag(D) since Matlab returns the eigenval- ues on the diagonal of D tmp=eigen(A); w=tmp$values;
V=tmp$vectors 97 Permuted LU factorization of a matrix [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.
P1A=LU. Note that the lu and
expand functions are part of the Ma-
trix package (see item 331 for how to
this doesn’t seem to work correctly
with non-square matrices. L,U, and
Pwill 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 /RReference 9 No. Description Matlab R 98 Singular-value decomposi- tion: given m×nmatrix Awith rank r, ﬁnd m×r matrix Pwith orthonormal columns, diagonal r×r matrix S, and r×nmatrix QTwith orthonormal rows so that P SQT=A [P,S,Q]=svd(A,’econ’) tmp=svd(A); U=tmp$u; V=tmp$v; S=diag(tmp$d)
99 Schur decomposi-
tion of square matrix,
A=QT QH=QT Q1where
Qis unitary (i.e. QHQ=I)
and Tis upper triangular;
QH=QTis the Hermitian
(conjugate) transpose
[Q,T]=schur(A) tmp=Schur(Matrix(A)); T=tmp@T;
Q=tmp@Q Note that Schur is part of
the Matrix package (see item 331 for
Qwill be of class Matrix rather than
class matrix; to make them the latter,
Q=as.matrix(tmp@Q) above.
100 Cholesky factorization of a
square, symmetric, positive
deﬁnite matrix A=RTR,
where Ris upper-triangular
R = chol(A) R = chol(A) Note that chol is part
of the Matrix package (see item 331
101 QR factorization of matrix A,
where Qis orthogonal (sat-
isfying QQT=I) and Ris
upper-triangular
[Q,R]=qr(A) satisfying QR =A, or
[Q,R,E]=qr(A) to do permuted QR
factorization satisfying AE =QR
z=qr(A); Q=qr.Q(z); R=qr.R(z);
E=diag(n)[,z$pivot] (where nis the number of columns in A) gives permuted QR factorization satisfying AE =QR 102 Vector norms norm(v,1) for 1-norm k~vk1, norm(v,2) for Euclidean norm k~vk2,norm(v,inf) for inﬁnity-norm k~vk, and norm(v,p) for p-norm k~vkp= (P|vi|p)1/p Rdoes not have a norm func- tion for vectors; only one for matrices. But the following will work: norm(matrix(v),’1’) for 1-norm k~vk1,norm(matrix(v),’i’) for inﬁnity-norm k~vk, and sum(abs(v)^p)^(1/p) for p-norm k~vkp= (P|vi|p)1/p 103 Matrix norms norm(A,1) for 1-norm kAk1, norm(A) for 2-norm kAk2, norm(A,inf) for inﬁnity-norm kAk, and norm(A,’fro’) for Frobenius norm ¡Pi(ATA)ii¢1/2 norm(A,’1’) for 1-norm kAk1, max(svd(A)$d) for 2-norm kAk2,
norm(A,’i’) for inﬁnity-norm kAk,
and norm(A,’f’) for Frobenius norm
¡Pi(ATA)ii¢1/2
104 Condition number cond(A) =
kAk1kA1k1of A, using 1-
norm
cond(A,1) (Note: Matlab also has
a function rcond(A) which computes
reciprocal condition estimator using
the 1-norm)
1/rcond(A,’1’)
105 Condition number cond(A) =
kAk2kA1k2of A, using 2-
norm
cond(A,2) kappa(A, exact=TRUE) (leave out
the “exact=TRUE” for an esti-
mate)
106 Condition number cond(A) =
kAkkA1kof A, using
inﬁnity-norm
cond(A,inf) 1/rcond(A,’I’)
D. Hiebeler, Matlab /RReference 10
No. Description Matlab R
107 Compute mean of all ele-
ments in vector or matrix
mean(v) for vectors, mean(A(:)) for
matrices
mean(v) or mean(A)
108 Compute means of columns
of a matrix
mean(A) colMeans(A)
109 Compute means of rows of a
matrix
mean(A,2) rowMeans(A)
110 Compute standard deviation
of all elements in vector or
matrix
std(v) for vectors, std(A(:)) for
matrices. This normalizes by n1.
Use std(v,1) to normalize by n.
sd(v) for vectors, sd(c(A)) for ma-
trices. This normalizes by n1.
111 Compute standard deviations
of columns of a matrix
std(A). This normalizes by n1.
Use std(A,1) to normalize by n
sd(A). This normalizes by n1.
112 Compute standard deviations
of rows of a matrix
std(A,0,2) to normalize by n1,
std(A,1,2) to normalize by n
apply(A,1,sd). This normalizes by
n1.
113 Compute variance of all ele-
ments in vector or matrix
var(v) for vectors, var(A(:)) for
matrices. This normalizes by n1.
Use var(v,1) to normalize by n.
var(v) for vectors, var(c(A)) for
matrices. This normalizes by n1.
114 Compute variance of columns
of a matrix
var(A). This normalizes by n1.
Use var(A,1) to normalize by n
apply(A,2,var). This normalizes by
n1.
115 Compute variance of rows of
a matrix
var(A,0,2) to normalize by n1,
var(A,1,2) to normalize by n
apply(A,1,var). This normalizes by
n1.
116 Compute covariance for two
vectors of observations
cov(v,w) computes the 2 ×2 co-
variance matrix; the oﬀ-diagonal ele-
ments give the desired covariance
cov(v,w)
117 Compute covariance matrix,
giving covariances between
columns of matrix A
cov(A) var(A) or cov(A)
118 Given matrices Aand B,
build covariance matrix C
where cij is the covariance be-
tween column iof Aand col-
umn jof B
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)
119 Compute Pearson’s linear
correlation coeﬃcient be-
tween elements of vectors v
and w
corr(v,w) Note: vand wmust
be column vectors. To make it
work regardless of whether they
are row or column vectors, do
corr(v(:),w(:))
cor(v,w)
120 Compute Kendall’s tau corre-
lation statistic for vectors v
and w
corr(v,w,’type’,’kendall’) cor(v,w,method=’kendall’)
121 Compute Spearman’s rho
correlation statistic for
vectors vand w
corr(v,w,’type’,’spearman’) cor(v,w,method=’spearman’)
122 Compute pairwise Pearson’s
correlation coeﬃcient be-
tween columns of matrix
A
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
123 Compute matrix Cof pair-
wise Pearson’s correlation co-
eﬃcients between each pair of
columns of matrices Aand B,
i.e. so cij is the correlation
between column iof Aand
column jof B
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
D. Hiebeler, Matlab /RReference 11
No. Description Matlab R
124 Compute sum of all elements
in vector or matrix
sum(v) for vectors, sum(A(:)) for
matrices
sum(v) or sum(A)
125 Compute sums of columns of
matrix
sum(A) colSums(A)
126 Compute sums of rows of ma-
trix
sum(A,2) rowSums(A)
127 Compute product of all ele-
ments in vector or matrix
prod(v) for vectors, prod(A(:)) for
matrices
prod(v) or prod(A)
128 Compute products of
columns of matrix
prod(A) apply(A,2,prod)
129 Compute products of rows of
matrix
prod(A,2) apply(A,1,prod)
130 Compute matrix exponential
eA=P
k=0 Ak/k!
expm(A) expm(Matrix(A)), but this is part of
the Matrix package which you’ll need
to install (see item 331 for how to in-
131 Compute cumulative sum of
values in vector
cumsum(v) cumsum(v)
132 Compute cumulative sums of
columns of matrix
cumsum(A) apply(A,2,cumsum)
133 Compute cumulative sums of
rows of matrix
cumsum(A,2) t(apply(A,1,cumsum))
134 Compute cumulative sum
of all elements of matrix
(column-by-column)
cumsum(A(:)) cumsum(A)
135 Cumulative product of ele-
ments in vector v
cumprod(v) (Can also be used in the
various ways cumsum can)
cumprod(v) (Can also be used in the
various ways cumsum can)
136 Cumulative minimum or
maximum of elements in
vector v
I don’t know of an easy way to do
this in Matlab
cummin(v) or cummax(v)
137 Compute diﬀerences between
consecutive elements of vec-
tor v. Result is a vector
w1 element shorter than v,
where element iof wis ele-
ment i+1 of vminus element
iof v
diff(v) diff(v)
138 Make a vector ythe same size
as vector x, which equals 4
everywhere that xis greater
than 5, and equals 3 every-
where else (done via a vector-
ized computation).
z = [3 4]; y = z((x > 5)+1) y = ifelse(x > 5, 4, 3)
139 Compute minimum of values
in vector v
min(v) min(v)
140 Compute minimum of all val-
ues in matrix A
min(A(:)) min(A)
141 Compute minimum value of
each column of matrix A
min(A) (returns a row vector) apply(A,2,min) (returns a vector)
142 Compute minimum value of
each row of matrix A
min(A, [ ], 2) (returns a column
vector)
apply(A,1,min) (returns a vector)
D. Hiebeler, Matlab /RReference 12
No. Description Matlab R
143 Given matrices Aand B,
compute a matrix where each
element is the minimum of
the corresponding elements of
Aand B
min(A,B) pmin(A,B)
144 Given matrix Aand scalar
c, compute a matrix where
each element is the minimum
of cand the corresponding el-
ement of A
min(A,c) pmin(A,c)
145 Find minimum among all val-
ues in matrices Aand B
min([A(:) ; B(:)]) min(A,B)
146 Find index of the ﬁrst time
min(v) appears in v, and
store that index in ind
[y,ind] = min(v) ind = which.min(v)
Notes:
Matlab and Rboth have a max function (and Rhas 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. Description Matlab R
147 Number of rows in Asize(A,1) nrow(A)
148 Number of columns in Asize(A,2) ncol(A)
149 Dimensions of A, listed in a
vector
size(A) dim(A)
150 Number of elements in vector
v
length(v) length(v)
151 Total number of elements in
matrix A
numel(A) length(A)
152 Max. dimension of Alength(A) max(dim(A))
153 Sort values in vector vsort(v) sort(v)
154 Sort values in v, putting
sorted values in s, and indices
in idx, in the sense that s[k]
= x[idx[k]]
[s,idx]=sort(v) tmp=sort(v,index.return=TRUE);
s=tmp$x; idx=tmp$ix
155 Sort the order of the rows of
matrix m
sortrows(m)
This sorts according to the ﬁrst col-
umn, 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).
m[order(m[,1]),]
This only sorts according to the ﬁrst
column. To use column 2 to break
ties, and then column 3 to break fur-
ther ties, do
m[order(m[,1], m[,2], m[,3]),]
Complex numbers are sorted ﬁrst by
real part, then by imaginary part.
156 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[,c1], m[,c2],
m[,c3]),]
D. Hiebeler, Matlab /RReference 13
No. Description Matlab R
157 Same as previous item, but
sort in decreasing order for
columns c1 and c2
sortrows(m, [-c1 -c2 c2]) m[order(-m[,c1], -m[,c2],
m[,c3]),]
158 Sort order of rows of matrix
m, and keep indices used for
sorting
[y,i] = sortrows(m) i=order(m[1,]); y=m[i,]
159 To count how many values in
the vector vare between 4
and 7 (inclusive on the upper
end)
sum((v > 4) & (v <= 7)) sum((v > 4) & (v <= 7))
160 Given vector v, return list of
indices of elements of vwhich
are greater than 5
find(v > 5) which(v > 5)
161 Given matrix A, return list
of indices of elements of A
which are greater than 5, us-
ing single-indexing
find(A > 5) which(A > 5)
162 Given matrix A, generate
vectors rand cgiving rows
and columns of elements of A
which are greater than 5
[r,c] = find(A > 5) w = which(A > 5, arr.ind=TRUE);
r=w[,1]; c=w[,2]
163 Given vector x(of presum-
ably discrete values), build a
vector vlisting unique val-
ues in x, and corresponding
vector cindicating how many
times those values appear in
x
v = unique(x); c = hist(x,v); w=table(x); c=as.numeric(w);
v=as.numeric(names(w))
164 Given vector x(of presum-
ably continuous values), di-
vide the range of values into k
equally-sized bins, and build
a vector mcontaining the
midpoints of the bins and a
corresponding vector ccon-
taining the counts of values in
the bins
[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
165 Convolution / polynomial
multiplication (given vectors
xand ycontaining polyno-
mial coeﬃcients, their convo-
lution is a vector containing
coeﬃcients of the product of
the two polynomials)
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 Wilkinson polynomial
W(x) = Q20
i=1(xi) gives a coeﬃcient
of ≈ −780.19 for x19, rather than the
correct value -210.
D. Hiebeler, Matlab /RReference 14
3.4 Root-ﬁnding
No. Description Matlab R
166 Find roots of polynomial
whose coeﬃcients are stored
in vector v(coeﬃcients in v
are highest-order ﬁrst)
roots(v) polyroot(rev(v)) (This function
really wants the vector to have the
constant coeﬃcient ﬁrst in v;rev re-
verses their order to achieve this.)
167 Find zero (root) of a function
f(x) of one variable
Deﬁne function f(x), then do
fzero(f,x0) to search for a root
near x0, or fzero(f,[a b]) to ﬁnd
a root between aand b, assuming
the sign of f(x) diﬀers at x=a
and x=b. Default forward error
tolerance (i.e. error in x) is machine
epsilon ǫmach.
Deﬁne function f(x), then do
uniroot(f, c(a,b)) to ﬁnd a root
between aand b, assuming the sign
of f(x) diﬀers at x=aand 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 252, do uniroot(f,
c(a,b), tol=2^-52).
3.5 Function optimization/minimization
No. Description Matlab R
168 Find value mwhich mini-
mizes a function f(x) of one
variable within the interval
from ato b
Deﬁne function f(x), then do
m = fminbnd(f, a, b)
Deﬁne function f(x), then do
m = optimize(f,c(a,b))$minimum 169 Find value mwhich mini- mizes a function f(x, p1, p2) with given extra parameters (but minimization is only oc- curing over the ﬁrst argu- ment), in the interval from a to b. Deﬁne function f(x,p1,p2), then use an “anonymous function”: % first define values for p1 % and p2, and then do: m=fminbnd(@(x) f(x,p1,p2),a,b) Deﬁne function f(x,p1,p2), then: # first define values for p1 # and p2, and then do: m = optimize(f, c(a,b), p1=p1, p2=p2)$minimum
170 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.
First write function f(v) which ac-
cepts a vector argument vcontaining
values of x,y, and z, and returns the
scalar value f(x, y, z), then do:
fminsearch(@f,[1 2.2 3.4])
First write function f(v) which ac-
cepts a vector argument vcontaining
values of x,y, and z, and returns the
scalar value f(x, y, z), then do:
optim(c(1,2.2,3.4),f)$par 171 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). First write function f(v,p1,p2) which accepts a vector argument vcontaining values of x,y, and z, along with the extra parame- ters, 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]) First write function f(v,p1,p2) which accepts a vector argument vcontain- ing values of x,y, and z, along with the extra parameters, and returns the scalar value f(x, y, z, p1, p2), then do: optim(c(1,2.2,3.4), f, p1=p1, p2=p2)$par
D. Hiebeler, Matlab /RReference 15
No. Description Matlab R
172 Numerically integrate func-
tion f(x) over interval from
ato b
absolute tolerance of 106. To
specify absolute tolerance, use
and relative error tolerances being
the fourth root of machine epsilon,
(ǫmach)0.25 1.22 ×104. Tol-
erances can be speciﬁed by using
integrate(f,a,b, rel.tol=tol1,
abs.tol=tol2). Note that the func-
tion fmust be written to work even
when given a vector of xvalues as its
argument.
173 Simple trapezoidal numerical
integration using (x, y) values
in vectors xand y
trapz(x,y) sum(diff(x)*(y[-length(y)]+
y[-1])/2)
D. Hiebeler, Matlab /RReference 16
3.7 Curve ﬁtting
No. Description Matlab R
174 Fit the line y=c1x+c0to
data in vectors xand y.p = polyfit(x,y,1)
The return vector phas the coeﬃ-
cients in descending order, i.e. p(1)
is c1, and p(2) is c0.
p = coef(lm(y ~ x))
The return vector phas the coeﬃ-
cients in ascending order, i.e. p[1] is
c0, and p[2] is c1.
y=c2x2+c1x+c0to data in
vectors xand y.p = polyfit(x,y,2)
The return vector phas the coeﬃ-
cients in descending order, i.e. p(1)
is c2,p(2) is c1, and p(3) is c0.
p = coef(lm(y ~ x + I(x^2)))
The return vector phas the coeﬃ-
cients in ascending order, i.e. p[1] is
c0,p[2] is c1, and p[3] is c2.
176 Fit nth degree polynomial
y=cnxn+cn1xn1+. . . +
c1x+c0to data in vectors x
and y.
p = polyfit(x,y,n)
The return vector phas the coeﬃ-
cients in descending order, p(1) is
cn,p(2) is cn1, etc.
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 “lower-
level” method will also work:
coef(lm.fit(outer(x,0:n,’^’),y))
Note that both of the above return
the coeﬃcients in ascending order.
Also see the polyreg function in the
mda package (see item 331 for how
with zero intercept, y=
c2x2+c1xto data in vectors
xand y.
(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 fmin-
search on that function. There is
likely an easy way to do it in the
Statistics Toolbox.)
p=coef(lm(y ~ -1 + x + I(x^2)))
The return vector phas the coeﬃ-
cients in ascending order, i.e. p[1] is
c1, and p[2] is c2.
178 Fit natural cubic spline
(S′′ (x) = 0 at both end-
points) to points (xi, yi)
whose coordinates are in
vectors xand y; evaluate at
points whose xcoordinates
are in vector xx, storing
corresponding y’s in yy
pp=csape(x,y,’variational’);
yy=ppval(pp,xx) but note that
csape is in Matlab’s Spline
Toolbox
tmp=spline(x,y,method=’natural’,
xout=xx); yy=tmp$y 179 Fit cubic spline using Forsythe, Malcolm and Moler method (third deriva- tives at endpoints match third derivatives of exact cu- bics through the four points at each end) to points (xi, yi) whose coordinates are in vectors xand y; evaluate at points whose xcoordinates are in vector xx, storing corresponding y’s in yy I’m not aware of a function to do this in Matlab tmp=spline(x,y,xout=xx); yy=tmp$y
D. Hiebeler, Matlab /RReference 17
No. Description Matlab R
180 Fit cubic spline such that
ﬁrst derivatives at endpoints
match ﬁrst derivatives of ex-
act cubics through the four
points at each end) to points
(xi, yi) whose coordinates are
in vectors xand y; evaluate
at points whose xcoordinates
are in vector xx, storing cor-
responding y’s in yy
pp=csape(x,y); yy=ppval(pp,xx)
but csape is in Matlab’s Spline
Toolbox
I’m not aware of a function to do this
in R
181 Fit cubic spline with periodic
boundaries, i.e. so that ﬁrst
and second derivatives match
at the left and right ends
(the ﬁrst and last yvalues
of the provided data should
also agree), to points (xi, yi)
whose coordinates are in vec-
tors xand y; evaluate at
points whose xcoordinates
are in vector xx, storing cor-
responding y’s in yy
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 182 Fit cubic spline with “not- a-knot” conditions (the ﬁrst two piecewise cubics coincide, as do the last two), to points (xi, yi) whose coordinates are in vectors xand y; evaluate at points whose xcoordinates are in vector xx, storing cor- responding y’s in yy yy=spline(x,y,xx) I’m not aware of a function to do this in R 4 Conditionals, control structure, loops No. Description Matlab R 183 “for” loops over values in a vector v(the vector vis of- ten constructed via a:b)for i=v command1 command2 end If only one command inside the loop: 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 /RReference 18 No. Description Matlab R 184 “if” statements with no else clause if cond command1 command2 end If only one command inside the clause: if (cond) command or if (cond) command If multiple commands: if (cond) { command1 command2 } 185 “if/else” statement 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 one command in clauses: 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 com- mand prompt), otherwise Rthinks the “if” statement was ﬁnished and gives an error. Rdoes not have an “elseif” state- ment. Logical comparisons which can be used on scalars in “if” statements, or which operate element-by- element on vectors/matrices: Matlab RDescription x<a x <aTrue if xis less than a x>a x >aTrue if xis greater than a x<= a x <= aTrue if xis less than or equal to a x>= a x >= aTrue if xis greater than or equal to a x == a x == a True if xis equal to a x~= a x != a True if xis not equal to a D. Hiebeler, Matlab /RReference 19 Scalar logical operators: Description Matlab R a AND b a && b a && b a OR b a || b a || b a XOR b xor(a,b) xor(a,b) NOT a ~a !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 Matlab R a AND b a & b a & b a OR b a | b a | b a XOR b xor(a,b) xor(a,b) NOT a ~a !a No. Description Matlab R 186 To test whether a scalar value xis between 4 and 7 (inclu- sive on the upper end) if ((x > 4) && (x <= 7)) if ((x > 4) && (x <= 7)) 187 To count how many values in the vector xare between 4 and 7 (inclusive on the upper end) sum((x > 4) & (x <= 7)) sum((x > 4) & (x <= 7)) 188 Test whether all values in a logical/boolean vector are TRUE all(v) all(v) 189 Test whether any values in a logical/boolean vector are TRUE any(v) any(v) D. Hiebeler, Matlab /RReference 20 No. Description Matlab R 190 “while” statements to do iter- ation (useful when you don’t know ahead of time how many iterations you’ll need). E.g. to add uniform ran- dom numbers between 0 and 1 (and their squares) until their sum is greater than 20: 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 } (As with “if” statements and “for” loops, the curly brackets are not nec- essary if there’s only one statement in- side the “while” loop.) 191 More ﬂow control: these com- mands exit or move on to the next iteration of the inner- most while or for loop, re- spectively. break and continue break and next 192 “Switch” statements for inte- gers switch (x) case 10 disp(’ten’) case {12,13} disp(’dozen (bakers?)’) otherwise disp(’unrecognized’) end Rdoesn’t have a switch statement ca- pable 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 ex- ample of what it can do for integers is below, showing that you can use it to return diﬀerent expressions based on whether a value is 1,2,.... mystr = switch(x, ’one’, ’two’, ’three’); print(mystr) Note that switch returns NULL if xis larger than 3 in the above case. Also, continuous values of xwill be trun- cated to integers. D. Hiebeler, Matlab /RReference 21 5 Functions, ODEs No. Description Matlab R 193 Implement a function add(x,y) Put the following in add.m: function retval=add(x,y) retval = x+y; Then you can do e.g. add(2,3) Enter the following, or put it in a ﬁle and source that ﬁle: 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. 194 Implement a function f(x,y,z) which returns mul- tiple 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) 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 do- ing: tmp=f(2,8,12); u=tmp[[1]]; v=tmp[[2]]. The above is most gen- eral, and will work even when uand vare diﬀerent types of data. If they are both scalars, the function could simply return them packed in a vec- tor, i.e. return(c(a,b)). If they are vectors of the same size, the func- tion could return them packed to- gether into the columns of a matrix, i.e. return(cbind(a,b)). D. Hiebeler, Matlab /RReference 22 No. Description Matlab R 195 Numerically solve ODE dx/dt = 5xfrom t= 3 to t= 12 with initial condition x(3) = 7 First implement function function retval=f(t,x) retval = 5*x; Then do ode45(@f,[3,12],7) to plot solution, or [t,x]=ode45(@f,[3,12],7) to get back vector tcontaining time values and vector xcontaining correspond- ing function values. If you want function values at speciﬁc 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 f = function(t,x,parms) { return(list(5*x)) } 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 ﬁrst column of y, namely y[,1] contains the time values; the second column y[,2] contains the corre- sponding function values. Note: lsoda is part of the deSolve package (see item 331 for how to install/load packages). 196 Numerically solve system of ODEs dw/dt = 5w,dz/dt = 3w+ 7zfrom t= 3 to t= 12 with initial conditions w(3) = 7, z(3) = 8.2 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 tcontain- ing time values and matrix x, whose ﬁrst column containing correspond- ing w(t) values and second column contains z(t) values. If you want function values at speciﬁc 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 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 ﬁrst 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). 197 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. 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 ini- tial condition and the beginning of your extra parameters. 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 in- stall/load packages). D. Hiebeler, Matlab /RReference 23 6 Probability and random values No. Description Matlab R 198 Generate a continuous uni- form random value between 0 and 1 rand runif(1) 199 Generate vector of nuniform random vals between 0 and 1 rand(n,1) or rand(1,n) runif(n) 200 Generate m×nmatrix of uni- form random values between 0 and 1 rand(m,n) matrix(runif(m*n),m,n) or just matrix(runif(m*n),m) 201 Generate m×nmatrix of con- tinuous uniform random val- ues between aand b a+rand(m,n)*(b-a) or if you have the Statistics toolbox then unifrnd(a,b,m,n) matrix(runif(m*n,a,b),m) 202 Generate a random integer between 1 and k floor(k*rand) + 1 floor(k*runif(1)) + 1 Note: sample(k)[1] would also work, but I believe in general will be less eﬃcient, because that actually generates many random numbers and then just uses one of them. 203 Generate m×nmatrix of dis- crete uniform random inte- gers between 1 and k floor(k*rand(m,n))+1 or if you have the Statistics toolbox then unidrnd(k,m,n) floor(k*matrix(runif(m*n),m))+1 204 Generate m×nmatrix where each entry is 1 with probabil- ity p, otherwise is 0 (rand(m,n)<p)*1 Note: multiplying by 1 turns the logical (true/false) re- sult back into numeric values. You could also do double(rand(m,n)<p) (matrix(runif(m,n),m)<p)*1 (Note: multiplying by 1 turns the logical (true/false) result back into numeric values; using as.numeric() to do it would lose the shape of the matrix.) 205 Generate m×nmatrix where each entry is awith probabil- ity p, otherwise is b b + (a-b)*(rand(m,n)<p) b + (a-b)*(matrix( runif(m,n),m)<p) 206 Generate a random integer between aand binclusive floor((b-a+1)*rand)+a or if you have the Statistics toolbox then unidrnd(b-a+1)+a-1 floor((b-a+1)*runif(1))+a 207 Flip a coin which comes up heads with probability p, and perform some action if it does come up heads if (rand < p) ...some commands... end if (runif(1) < p) { ...some commands... } 208 Generate a random permuta- tion of the integers 1,2, . . . , n randperm(n) sample(n) 209 Generate a random selection of kunique integers between 1 and n(i.e. sampling with- out replacement) [s,idx]=sort(rand(n,1)); ri=idx(1:k) or another way is ri=randperm(n); ri=ri(1:k). Or if you have the Statistics Toolbox, then randsample(n,k) ri=sample(n,k) 210 Choose kvalues (with re- placement) from the vector v, storing result in w L=length(v); w=v(floor(L*rand(k,1))+1) Or, if you have the Statistics Toolbox, w=randsample(v,k) w=sample(v,k,replace=TRUE) D. Hiebeler, Matlab /RReference 24 No. Description Matlab R 211 Choose kvalues (without re- placement) from the vector v, storing result in w L=length(v); ri=randperm(L); ri=ri(1:k); w=v(ri) Or, if you have the Statistics Toolbox, w=randsample(v,k) w=sample(v,k,replace=FALSE) 212 Set the random-number gen- erator back to a known state (useful to do at the beginning of a stochastic simulation when debugging, so you’ll get the same sequence of random numbers each time) rand(’state’, 12) Note: begin- ning in Matlab 7.7, use this in- stead: RandStream(’mt19937ar’, ’Seed’, 12) though the previous method is still supported for now. set.seed(12) Note that the “*rnd,” “*pdf,” and “*cdf” functions described below are all part of the Matlab Statistics Toolbox, and not part of the core Matlab distribution. No. Description Matlab R 213 Generate a random value from the binomial(n, p) dis- tribution binornd(n,p) rbinom(1,n,p) 214 Generate a random value from the Poisson distribution with parameter λ poissrnd(lambda) rpois(1,lambda) 215 Generate a random value from the exponential distri- bution with mean µ exprnd(mu) or -mu*log(rand) will work even without the Statistics Toolbox. rexp(1, 1/mu) 216 Generate a random value from the discrete uniform dis- tribution on integers 1 . . . k unidrnd(k) or floor(rand*k)+1 will work even without the Statistics Toolbox. sample(k,1) 217 Generate niid random values from the discrete uniform dis- tribution on integers 1 . . . k unidrnd(k,n,1) or floor(rand(n,1)*k)+1 will work even without the Statistics Toolbox. sample(k,n,replace=TRUE) 218 Generate a random value from the continuous uniform distribution on the interval (a, b) unifrnd(a,b) or (b-a)*rand + a will work even without the Statistics Toolbox. runif(1,a,b) 219 Generate a random value from the normal distribution with mean µand standard deviation σ normrnd(mu,sigma) or mu + sigma*randn will work even without the Statistics Toolbox. rnorm(1,mu,sigma) 220 Generate a random vector from the multinomial distri- bution, with ntrials and probability vector p mnrnd(n,p) rmultinom(1,n,p) 221 Generate jrandom vectors from the multinomial distri- bution, with ntrials and probability vector p mnrnd(n,p,j) The vectors are returned as rows of a matrix rmultinom(j,n,p) The vectors are returned as columns of a matrix Notes: The Matlab “*rnd” functions above can all take additional r,c arguments to build an r×cmatrix of iid random values. E.g. poissrnd(3.5,4,7) for a 4 ×7 matrix of iid values from the Poisson distribution with mean λ= 3.5. The unidrnd(k,n,1) command above is an example of this, to generate a k×1 column vector. D. Hiebeler, Matlab /RReference 25 The ﬁrst parameter of the R“r*” functions above speciﬁes how many values are desired. E.g. to generate 28 iid random values from a Poisson distribution with mean 3.5, use rpois(28,3.5). To get a 4 ×7 matrix of such values, use matrix(rpois(28,3.5),4). No. Description Matlab R 222 Compute probability that a random variable from the Binomial(n, p) distribution has value x(i.e. the density, or pdf). binopdf(x,n,p) or nchoosek(n,x)*p^x*(1-p)^(n-x) will work even without the Statistics Toolbox, as long as nand xare non-negative integers and 0 p 1. dbinom(x,n,p) 223 Compute probability that a random variable from the Poisson(λ) distribution has value x. poisspdf(x,lambda) or exp(-lambda)*lambda^x / factorial(x) will work even without the Statistics Toolbox, as long as xis a non-negative integer and lambda 0. dpois(x,lambda) 224 Compute probability density function at xfor a random variable from the exponential distribution with mean µ. exppdf(x,mu) or (x>=0)*exp(-x/mu)/mu will work even without the Statistics Toolbox, as long as mu is positive. dexp(x,1/mu) 225 Compute probability density function at xfor a random variable from the Normal dis- tribution with mean µand standard deviation σ. normpdf(x,mu,sigma) or exp(-(x-mu)^2/(2*sigma^2))/ (sqrt(2*pi)*sigma) will work even without the Statistics Toolbox. dnorm(x,mu,sigma) 226 Compute probability density function at xfor a random variable from the continuous uniform distribution on inter- val (a, b). unifpdf(x,a,b) or ((x>=a)&&(x<=b))/(b-a) will work even without the Statistics Toolbox. dunif(x,a,b) 227 Compute probability that a random variable from the dis- crete uniform distribution on integers 1 . . . n has value x. unidpdf(x,n) or ((x==floor(x)) && (x>=1)&&(x<=n))/n will work even without the Statistics Toolbox, as long as nis a positive integer. ((x==round(x)) && (x >= 1) && (x <= n))/n 228 Compute probability that a random vector from the multinomial distribution with probability vector ~p has the value ~x mnpdf(x,p) Note: vector pmust sum to one. Also, xand pcan be vectors of length k, or if one or both are m×k matrices then the computations are performed for each row. dmultinom(x,prob=p) 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 /RReference 26 The corresponding CDF functions are below: No. Description Matlab R 229 Compute probability that a random variable from the Binomial(n, p) distribution is less than or equal to x(i.e. the cumulative distribution function, or cdf). binocdf(x,n,p). Without the Statistics Toolbox, as long as nis a non-negative in- teger, this will work: r = 0:floor(x); sum(factorial(n)./ (factorial(r).*factorial(n-r)) .*p.^r.*(1-p).^(n-r)). (Un- fortunately, Matlab’s nchoosek function won’t take a vector argu- ment for k.) pbinom(x,n,p) 230 Compute probability that a random variable from the Poisson(λ) distribution is less than or equal to x. poisscdf(x,lambda). With- out the Statistics Toolbox, as long as lambda 0, this will work: r = 0:floor(x); sum(exp(-lambda)*lambda.^r ./factorial(r)) ppois(x,lambda) 231 Compute cumulative distri- bution function at xfor a random variable from the ex- ponential distribution with mean µ. expcdf(x,mu) or (x>=0)*(1-exp(-x/mu)) will work even without the Statistics Toolbox, as long as mu is positive. pexp(x,1/mu) 232 Compute cumulative distri- bution function at xfor a ran- dom variable from the Nor- mal distribution with mean µ and standard deviation σ. normcdf(x,mu,sigma) or 1/2 - erf(-(x-mu)/(sigma*sqrt(2)))/2 will work even without the Statis- tics Toolbox, as long as sigma is positive. pnorm(x,mu,sigma) 233 Compute cumulative distri- bution function at xfor a ran- dom variable from the contin- uous uniform distribution on interval (a, b). unifcdf(x,a,b) or (x>a)*(min(x,b)-a)/(b-a) will work even without the Statistics Toolbox, as long as b>a. punif(x,a,b) 234 Compute probability that a random variable from the dis- crete uniform distribution on integers 1 . . . n is less than or equal to x. unidcdf(x,n) or (x>=1)*min(floor(x),n)/n will work even without the Statistics Toolbox, as long as nis a positive integer. (x>=1)*min(floor(x),n)/n D. Hiebeler, Matlab /RReference 27 7 Graphics 7.1 Various types of plotting No. Description Matlab R 235 Create a new ﬁgure window figure 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 Rto 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 Rand notice that ﬁgure 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 ﬁgure windows. They are uglier (lines are more jagged), but render much more quickly. 236 Select ﬁgure number nfigure(n) (will create the ﬁgure if it doesn’t exist) dev.set(n) (returns the actual de- vice selected; will be diﬀerent from n if there is no ﬁgure device with num- ber n) 237 Determine which ﬁgure win- dow is currently active gcf dev.cur() 238 List open ﬁgure windows get(0,’children’) (The 0 handle refers to the root graphics object.) dev.list() 239 Close ﬁgure window(s) close to close the current ﬁgure win- dow, close(n) to close a speciﬁed ﬁgure, and close all to close all ﬁg- ures dev.off() to close the currently ac- tive ﬁgure device, dev.off(n) to close a speciﬁed one, and graphics.off() to close all ﬁgure devices. 240 Plot points using open circles plot(x,y,’o’) plot(x,y) 241 Plot points using solid lines plot(x,y) plot(x,y,type=’l’) (Note: that’s a lower-case ’L’, not the number 1) 242 Plotting: color, point mark- ers, linestyle 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) plot(x,y,type=str1, pch=arg2,col=str3, lty=arg4) See tables below for possible values of the 4 parameters 243 Plotting with logarithmic axes semilogx,semilogy, and loglog functions take arguments like plot, and plot with logarithmic scales for x,y, and both axes, respectively plot(..., log=’x’),plot(..., log=’y’), and plot(..., log=’xy’) plot with logarithmic scales for x,y, and both axes, respectively D. Hiebeler, Matlab /RReference 28 No. Description Matlab R 244 Make bar graph where the x coordinates of the bars are in x, and their heights are in y 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 observa- tions, and each row as a diﬀerent ob- servation within a set. So a 20 ×2 matrix is plotted as 2 sets of 20 ob- servations, while a 2 ×20 matrix is plotted as 20 sets of 2 observations. Can’t do this in R; but barplot(y) makes a bar graph where you specify the heights, barplot(y,w) also spec- iﬁes the widths of the bars, and hist can make plots like this too. 245 Make histogram of values in x hist(x) hist(x) 246 Given vector xcontaining discrete values, make a bar graph where the xcoordi- nates of bars are the values, and heights are the counts of how many times the values appear in x v=unique(x); c=hist(x,v); bar(v,c) barplot(table(x)) 247 Given vector xcontaining continuous values, lump the data into kbins and make a histogram / bar graph of the binned data [c,m] = hist(x,k); bar(m,c) or for slightly diﬀerent plot style use hist(x,k) hist(x,seq(min(x), max(x), length.out=k+1)) 248 Make a plot containing error- bars of height sabove and be- low (x, y) points 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 pack- ages). 249 Make a plot containing error- bars of height aabove and b below (x, y) points errorbar(x,y,b,a) errbar(x,y,y+a,y-b) Note: errbar is part of the Hmisc package (see item 331 for how to install/load pack- ages). 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. pie(v) D. Hiebeler, Matlab /RReference 29 No. Description Matlab R 251 Make a 3-D plot of some data points with given x,y,zco- ordinates in the vectors x,y, and z. plot3(x,y,z) This works much like plot, as far as plotting symbols, line- types, and colors. 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) 252 Surface plot of data in matrix Asurf(A) You can then click on the small curved arrow in the ﬁgure window (or choose “Rotate 3D” from the “Tools” menu), and then click and drag the mouse in the ﬁgure to ro- tate it in three dimensions. persp(A) You can include shading in the im- age via e.g. persp(A,shade=0.5). There are two viewing angles you can also specify, among other pa- rameters, e.g. persp(A, shade=0.5, theta=50, phi=35). 253 Surface plot of f(x, y) = sin(x+y)yfor 100 values of xbetween 0 and 10, and 90 values of ybetween 2 and 8 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) 254 Other ways of plotting the data from the previous com- mand 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. 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 zall the same length, you can also do symbols(x,y,z). 255 Set axis ranges in a ﬁgure window axis([x1 x2 y1 y2]) You have to do this when you make the plot, e.g. plot(x,y,xlim=c(x1,x2), ylim=c(y1,y2)) 256 Add title to plot title(’somestring’) 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. 257 Add axis labels to plot xlabel(’somestring’) and ylabel(’somestring’) title(xlab=’somestring’, ylab=’anotherstr’). You can also include xlab= and ylab= arguments in a plot command. D. Hiebeler, Matlab /RReference 30 No. Description Matlab R 258 Include Greek letters or sym- bols in plot axis labels You can use basic TeX com- mands, 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 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 RGraphics book by Paul Murrell for more. 259 Change font size to 16 in plot labels 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) 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) 260 Add grid lines to plot grid on (and grid off to turn oﬀ) grid() Note that if you’ll be printing the plot, the default style for grid-lines is to use gray dot- ted lines, which are almost invis- ible 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. 261 Add a text label to a plot text(x,y,’hello’) text(x,y,’hello’) 262 Add set of text labels to a plot. xv and yv are vectors. s={’hi’, ’there’}; text(xv,yv,s) s=c(’hi’, ’there’); text(xv,yv,s) 263 Add an arrow to current plot, with tail at (xt, yt) and head at (xh, yh) annotation(’arrow’, [xt xh], [yt yh]) Note: coordinates should be normalized ﬁgure coordinates, not coordinates within your displayed axes. Find and download from The Mathworks the ﬁle dsxy2ﬁgxy.m which converts for you, then do this: [fx,fy]=dsxy2figxy([xt xh], [yt yh]); annotation(’arrow’, fx, fy) arrows(xt, yt, xh, yh) 264 Add a double-headed arrow to current plot, with coordi- nates (x0, y0) and (x1, y1) annotation(’doublearrow’, [x0 x1], [y0 y1]) See note in previ- ous item about normalized ﬁgure coordinates. arrows(x0, y0, x1, y1, code=3) 265 Add ﬁgure legend to top-left corner of plot legend(’first’, ’second’, ’Location’, ’NorthWest’) 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 ﬁgure’s axis ranges. D. Hiebeler, Matlab /RReference 31 No. Description Matlab R 266 Adding more things to a ﬁg- ure hold on means everything plotted from now on in that ﬁgure window is added to what’s already there. hold off turns it oﬀ. clf clears the ﬁgure and turns oﬀ hold. points(...) and lines(...) work like plot, but add to what’s already in the ﬁgure rather than clearing the ﬁgure ﬁrst. points and lines are basically identical, just with diﬀerent default plotting styles. Note: axes are not recalculated/redrawn when adding more things to a ﬁgure. 267 Plot multiple data sets at once plot(x,y) where xand yare 2-D matrices. Each column of xis plot- ted against the corresponding col- umn of y. If xhas only one column, it will be re-used. matplot(x,y) where xand yare 2-D matrices. Each column of xis plotted against the corresponding column of y. If xhas only one column, it will be re-used. 268 Plot sin(2x) for xbetween 7 and 18 fplot(’sin(2*x)’, [7 18]) 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)). 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 ﬁrst (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. image(A) (it rotates the matrix 90 de- grees counterclockwise: it draws row 1 of Aas the left column of the im- age, and column 1 of Aas the bottom row of the image, so the row number is the xcoord and column number is the ycoord). It also rescales colors. If you are using a colormap with ken- tries, but the value kdoes 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 k1 to be plot- ted using the kcolors. 270 Add colorbar legend to image plot colorbar, after using image or pcolor. Use filled.contour(A) rather than image(A), although it “blurs” the data via interpolation, or use levelplot(A) from the lat- tice 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)). 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. image(A,col=terrain.colors(100)). The parameter 100 speciﬁes the length of the colormap. Other colormaps are heat.colors(), topo.colors(), and cm.colors(). D. Hiebeler, Matlab /RReference 32 No. Description Matlab R 272 Build your own colormap us- ing Red/Green/Blue triplets 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] 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). Matlab plotting speciﬁcations, for use with plot,fplot,semilogx,semilogy,loglog, etc: Symbol Color Symbol Marker Symbol Linestyle bblue .point (.) -solid line ggreen ocircle ():dotted line rred xcross (×)-. dash-dot line ccyan +plus sign (+) -- dashed line mmagenta *asterisk () yyellow ssquare (¤) kblack ddiamond () wwhite vtriangle (down) () ^triangle (up) () <triangle (left) () >triangle (right) () ppentragram star hhexagram star Rplotting speciﬁcations 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 characters, but see ’.’ below for an exception ppoints ’green’ Green 0open square llines ’red’ Red 1open circle bboth ’cyan’ Cyan 2triangle point-up clines part only of “b ’magenta’ Magenta 3+ (plus) olines, points overplotted ’yellow’ Yellow 4×(cross) hhistogram-like lines ’black’ Black 5diamond ssteps ’#RRGGBB’ hexadecimal speciﬁca- tion of Red, Green, Blue 6triangle point-down Sanother kind of steps (Other names) See colors() for list of available color names. ’.’ rectangle of size 0.01 inch, 1 pixel, or 1 point (1/72 inch) depending on device nno plotting (can be use- ful for setting up axis ranges, etc.) (See table on next page for more) D. Hiebeler, Matlab /RReference 33 Rplotting speciﬁcations 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 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 AAb b . # # Rplotting characters, i.e. values for pch argument (from the book RGraphics, by Paul Murrell, Chapman & Hall / CRC, 2006) D. Hiebeler, Matlab /RReference 34 No. Description Matlab R 273 Divide up a ﬁgure window into smaller sub-ﬁgures subplot(m,n,k) divides the current ﬁgure window into an m×nar- ray of subplots, and draws in sub- plot number kas numbered in “read- ing order,” i.e. left-to-right, top-to- bottom. E.g. subplot(2,3,4) se- lects the ﬁrst sub-ﬁgure in the second row of a 2 ×3 array of sub-ﬁgures. You can do more complex things, e.g. subplot(5,5,[1 2 6 7]) se- lects the ﬁrst two subplots in the ﬁrst row, and ﬁrst two subplots in the second row, i.e. gives you a bigger subplot within a 5 ×5 array of sub- plots. (If you that command followed by e.g. subplot(5,5,3) you’ll see what’s meant by that.) There are several ways to do this, e.g. using layout or split.screen, al- though they aren’t quite as friendly as Matlab ’s. E.g. if you let A= 1 1 2 1 1 3 4 5 6 , then layout(A) will divide the ﬁgure into 6 sub-ﬁgures: you can imagine the ﬁgure divide into a 3 ×3 matrix of smaller blocks; sub- ﬁgure 1 will take up the upper-left 2×2 portion, and sub-ﬁgures 2–6 will take up smaller portions, according to the positions of those numbers in the matrix A. Consecutive plotting com- mands will draw into successive sub- ﬁgures; there doesn’t seem to be a way to explicitly specify which sub-ﬁgure 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 sub- ﬁgures (numbered 1 and 2). Then split.screen(c(1,3),2) splits sub- ﬁgure 2 into a 1 ×3 matrix of smaller sub-ﬁgures (numbered 3, 4, and 5). screen(4) will then select sub-ﬁgure 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 ﬁgure win- dow, and par(mfg=) to select which sub-ﬁgure to draw into. Note that the above methods are all incompatible with each other. 274 Force graphics windows to update drawnow (Matlab normally only updates ﬁgure windows when a script/function ﬁnishes and returns control to the Matlab prompt, or under a couple of other circum- stances. This forces it to update ﬁgure windows to reﬂect any recent plotting commands.) Rautomatically updates graphics windows even before functions/scripts ﬁnish executing, so it’s not neces- sary to explictly request it. But note that some graphics functions (partic- ularly 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 func- tions will automatically display their plots when called interactively from the command prompt. D. Hiebeler, Matlab /RReference 35 7.2 Printing/saving graphics No. Description Matlab R 275 To print/save to a PDF ﬁle named fname.pdf print -dpdf fname saves the con- tents of currently active ﬁgure win- dow First do pdf(’fname.pdf’). Then, do various plotting commands to make your image, as if you were plotting in a window. Fi- nally, do dev.off() to close/save the PDF ﬁle. To print the con- tents of the active ﬁgure win- dow, do dev.copy(device=pdf, file=’fname.pdf’); dev.off(). (But this will not work if you’ve turned oﬀ the display list via dev.control(displaylist= ’inhibit’).) You can also simply use dev.copy2pdf(file=’fname.pdf’). 276 To print/save to a PostScript ﬁle 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 Encapsu- lated PostScript. The ﬁrst two save to fname.ps, while the latter two save to fname.eps. postscript(’fname.eps’), followed by your plotting commands, fol- lowed by dev.off() to close/save the ﬁle. Note: you may want to use postscript(’fname.eps’, horizontal=FALSE) to save your ﬁg- ure in portrait mode rather than the default landscape mode. To print the contents of the active ﬁgure window, do dev.copy(device=postscript, file=’fname.eps’); dev.off(). (But this will not work if you’ve turned oﬀ 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. 277 To print/save to a JPEG ﬁle fname.jpg with jpeg qual- ity = 90 (higher quality looks better but makes the ﬁle larger) print -djpeg90 fname jpeg(’fname.jpg’,quality=90), followed by your plotting commands, followed by dev.off() to close/save the ﬁle. D. Hiebeler, Matlab /RReference 36 7.3 Animating cellular automata / lattice simulations No. Description Matlab R 278 To display images of cellu- lar automata or other lattice simulations while running in real time Repeatedly use either pcolor or image to display the data. Don’t forget to call drawnow as well, oth- erwise the ﬁgure window will not be updated with each image. If you simply call image repeatedly, there is a great deal of ﬂicker- ing/ﬂashing. To avoid this, after drawing the image for the ﬁrst time using e.g. image(A), from then on only use image(A,add=TRUE), which avoids redrawing the entire image (and the associated ﬂicker). However, this will soon consume a great deal of memory, as all drawn images are saved in the image buﬀer. There are two solutions to that problem: (1) every ktime steps, leave oﬀ the “add=TRUE” argument to ﬂush the image buﬀer (and get occasional ﬂickering), where you choose kto balance the ﬂickering vs. memory-usage tradeoﬀ; or (2) after drawing the ﬁrst image, do dev.control(displaylist= ’inhibit’) to prohibit retaining the data. However, the latter solution means that after the simulation is done, the ﬁgure 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 ﬁnal image(A) at the end of the sim- ulation will re-enable re-drawing after resizing or obscuring, without consuming extra memory.) D. Hiebeler, Matlab /RReference 37 8 Working with ﬁles No. Description Matlab R 279 Create a folder (also known as a “directory”) mkdir dirname dir.create(’dirname’) 280 Set/change working directory cd dirname setwd(’dirname’) 281 See list of ﬁles in current working directory dir dir() 282 Run commands in ﬁle ‘foo.m’ or ‘foo.R’ respectively foo source(’foo.R’) 283 Read data from text ﬁle “data.txt” into matrix A A=load(’data.txt’) or A=importdata(’data.txt’) Note that both routines will ignore com- ments (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 ig- nore comments indicated by “%”, do A=as.matrix(read.table( ’data.txt’, comment.char=’%’)) 284 Read data from text ﬁle “data.txt” into matrix A, skipping the ﬁrst slines of the ﬁle tmp=importdata(’data.txt’, ’ ’,s); a=tmp.data A=as.matrix(read.table( ’data.txt’, skip=s)) 285 Write data from matrix A into text ﬁle “data.txt” save data.txt A -ascii write(t(A), file=’data.txt’, ncolumn=dim(A)[2]) D. Hiebeler, Matlab /RReference 38 9 Miscellaneous 9.1 Variables No. Description Matlab R 286 Assigning to variables x = 5 x <- 5 or x=5Note: for compati- bility with S-plus, many people prefer the ﬁrst form. 287 From within a function, as- sign a value to variable y in the base environment (i.e. the command prompt envi- ronment) assignin(’base’, ’y’, 7) y <<- 7 288 From within a function, ac- cess the value of variable y in the base environment (i.e. the command prompt envi- ronment) evalin(’base’, ’y’) get(’y’, envir=globalenv()) Though note that inside a function, if there isn’t a local variable y, then just the expression ywill look for one in the base environment, but if there is a local ythen that one will be used instead. 289 Short list of deﬁned variables who ls() 290 Long list of deﬁned variables whos ls.str() 291 See detailed info about the variable ab whos ab str(ab) 292 See detailed info about all variables with “ab” in their name whos *ab* ls.str(pattern=’ab’) 293 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) openvar(A), or double-click on the variable in the Workspace pane (if it’s being displayed) of your Mat- labdesktop fix(A) 294 Clear one variable clear x rm(x) 295 Clear two variables clear x y rm(x,y) 296 Clear all variables clear all rm(list=ls()) 297 See what type of object xis class(x) class(x) and typeof(x) give diﬀer- ent aspects of the “type” of x 298 (Variable names) Variable names must begin with a letter, but after that they may con- tain any combination of letters, dig- its, and the underscore character. Names are case-sensitive. 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 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. .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. D. Hiebeler, Matlab /RReference 39 9.2 Strings and Misc. No. Description Matlab R 300 Line continuation 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 In R, you can spread commands out over multiple lines, and nothing ex- tra is necessary. Rwill continue read- ing input until the command is com- plete. However, this only works when the syntax makes it clear that the ﬁrst line was not complete. E.g.: x = 3 + 4 works, but x = 3 + 4 does not treat the second line as a con- tinuation of the ﬁrst. 301 Controlling formatting of output format short g and format long g are handy; see help format options(digits=6) tells Ryou’d like to use 6 digits of precision in values it displays (it is only a suggestion, not strictly followed) 302 Exit the program quit or exit q() or quit() 303 Comments % this is a comment # this is a comment 304 Display a string disp(’hi there’) or to omit trailing newline use fprintf(’hi there’) print(’hi there’) Note: to avoid having double-quotes around the displayed string, do print(’hi there’, quote=FALSE) or print(noquote(’hi there’)). 305 Display a string containing single quotes disp(’It’’s nice’) or to omit trailing newline fprintf(’It’’s nice’) print(’It\’s nice’) or print("It’s nice") 306 Give prompt and read numer- ical input from user x = input(’Enter data:’) 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. 307 Give prompt and read char- acter (string) input from user x = input(’Enter string:’,’s’) x = readline(’Enter string:’) 308 Concatenate strings [’two hal’ ’ves’] paste(’two hal’, ’ves’, sep=’’) 309 Concatenate strings stored in a vector v={’two ’, ’halves’}; strcat(v{:}) But note that this drops trailing spaces on strings. To avoid that, instead do strcat([v{:}]) v=c(’two ’, ’halves’); paste(v, collapse=’’) 310 Extract substring of a string text1=’hi there’; text2=text(2:6) text1=’hi there’; text2=substr(text1,2,6) 311 Determine whether elements of a vector are in a set, and give positions of correspond- ing elements in the set. 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. x = c(’a’, ’aa’, ’bc’, ’c’); y = c(’da’, ’a’, ’bc’, ’a’, ’bc’, ’aa’); loc=match(x,y) Then loc contains the locations of ﬁrst oc- curences of elements of xin the set y, and NA for unmatched elements. D. Hiebeler, Matlab /RReference 40 No. Description Matlab R 312 Find indices of regular ex- pression pattern pin string s v=regexp(s,p) v=gregexpr(p,s)[[1]] (The returned vector also has a “match.length” attribute giv- ing lengths of the matches; this attribute can be removed via attributes(v)=NULL.) 313 Perform some commands only if the regular expression pis contained in the string sif (regexp(s,p) ...commands... end if (grepl(p,s)) { ...commands... } 314 Convert number to string num2str(x) as.character(x) 315 Use sprintf to create a formatted string. Use %d for integers (“d” stands for “dec- imal”, i.e. base 10), %f for ﬂoating-point numbers, %e for scientiﬁc-notation ﬂoating point, %g to automatically choose %e or %f based on the value. You can spec- ify ﬁeld-widths/precisions, e.g. %5d for integers with padding to 5 spaces, or %.7f for ﬂoating-point with 7 digits of precision. There are many other options too; see the docs. 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) 316 Machine epsilon ǫmach, i.e. diﬀerence between 1 and the next largest double-precision ﬂoating-point number eps (See help eps for various other things eps can give.) .Machine$double.eps
317 Pause for xseconds pause(x) Sys.sleep(x)
318 Wait for user to press any key pause Don’t know of a way to do this in R,
but scan(quiet=TRUE) will wait until
the user presses the Enter key
319 Produce a beep (or possibly
a visual signal, depending on
preferences set)
beep alarm()
320 Measure CPU time used to
do some commands
t1=cputime; ...commands... ;
cputime-t1
t1=proc.time(); ...commands...
; (proc.time()-t1)[1]
321 Measure elapsed (“wall-
clock”) time used to do some
commands
tic; ...commands... ; toc or
t1=clock; ...commands... ;
etime(clock,t1)
t1=proc.time(); ...commands...
; (proc.time()-t1)[3]
322 Print an error message an in-
terrupt execution
error(’Problem!’) stop(’Problem!’)
323 Print a warning message warning(’Smaller problem!’) warning(’Smaller problem!’)
324 Putting multiple statements
on one line
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.
Separate statements by semicolons.
D. Hiebeler, Matlab /RReference 41
No. Description Matlab R
325 Evaluate contents of a string
sas command(s).
eval(s) eval(parse(text=s))
326 Get a command prompt for
debugging, while executing a
script or function. While at
that prompt, you can type ex-
pressions to see the values of
variables, etc.
Insert the command keyboard in
change to K>>. When you are done
debugging and want to continue ex-
ecuting the ﬁle, type return.
Insert the command browser() in
change to Browse[1]>. When you are
done debugging and want to continue
executing the ﬁle, either type cor just
press return (i.e. enter a blank line).
Note, if you type n, you enter the step
debugger.
327 Show where a command is which sqrt shows you where the ﬁle
deﬁning the sqrt function is (but
note that many basic functions are
“built in,” so the Matlab func-
tion ﬁle is really just a stub con-
taining documentation). This is use-
ful if a command is doing something
strange, e.g. sqrt isn’t working. If
you’ve accidentally deﬁned 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.
Rdoes not execute commands directly
from ﬁles, so there is no equivalent
command.
328 Query/set the search path. 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
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)
Rdoes not use a search path to look
for ﬁles.
329 Startup sequence If a ﬁle startup.m exists in the
startup directory for Matlab, its
contents are executed. (See the
Matlab docs for how to change the
startup directory.)
If a ﬁle .Rproﬁle exists in the cur-
rent directory or the user’s home di-
rectory (in that order), its contents
are sourced; saved data from the ﬁle
.RData (if it exists) are then loaded.
If a function .First() has been de-
ﬁned, it is then called (so the obvious
place to deﬁne this function is in your
.Rproﬁle ﬁle).
330 Shutdown sequence Upon typing quit or exit,Matlab
will run the script ﬁnish.m if present
somewhere in the search path.
Upon typing q() or quit(),Rwill call
the function .Last() if it has been de-
ﬁned (one obvious place to deﬁne it
would be in the .Rproﬁle ﬁle)
D. Hiebeler, Matlab /RReference 42
No. Description Matlab R
331 Install and load a package. Matlab does not have packages. It
has toolboxes, which you can pur-
chase and install. “Contributed”
code (written by end users) can sim-
rectory which you then add to Mat-
lab’s path (see item 328 for how to
To install e.g. the deSolve pack-
age, 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.
10 Spatial Modeling
No. Description Matlab R
332 Take an L×L matrix Aof
0s and 1s, and “seed” frac-
tion pof the 0s (turn them
into 1s), not changing entries
A = (A | (rand(L) < p))*1; A = (A | (matrix(runif(L^2),L)
< p))*1
333 Take an L×Lmatrix Aof 0s
and 1s, and “kill” fraction p
of the 1s (turn them into 0s),
not changing the rest of the
entries
A = (A & (rand(L) < 1-p))*1; A = (A & (matrix(runif(L^2),L)
< 1-p))*1
334 Do “wraparound” on a coor-
dinate newx that you’ve al-
replace newx with x+dx if
you want to do wraparound
on an oﬀset xcoordinate.
mod(newx-1,L)+1 Note: for porta-
bility with other languages such as
C which handle MOD of negative
values diﬀerently, you may want to
get in the habit of instead doing
mod(newx-1+L,L)+1
((newx-1) %% L) + 1 Note: for
portability with other languages such
as C which handle MOD of nega-
tive values diﬀerently, you may want
to get in the habit of instead doing
((newx-1+L)%%L) + 1
335 Randomly initialize a portion
of an array: set fraction pof
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.
dx=ix2-ix1+1; dy=iy2-iy1+1;
A(iy1:iy2,ix1:ix2) = ...
(rand(dy,dx) < p0)*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
diﬀerential equations, see ode45
dir, 281
disp, 304, 305
doc, 4
dot, 79
INDEX OF MATLAB COMMANDS AND CONCEPTS 44
drawnow, 274, 278
echelon form, see matrix
eig, 96
element-by-element matrix operations, see ma-
trix
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
ﬁle
running commands in, 282
text
saving data to, 285
find, 160–162
ﬁnish.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 ﬁrst 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
INDEX OF MATLAB COMMANDS AND CONCEPTS 45
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 speciﬁed 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
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 ﬁtted, 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 46
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
kunique 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
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 func-
tion, 287
evaluating from base environment within func-
tion, 288
names, 298
variance, see var
INDEX OF MATLAB COMMANDS AND CONCEPTS 47
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
diﬀerences between consecutive elements of,
137
dot product, 79
minimum of values of, 139
norm, 102
position of ﬁrst 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
INDEX OF RCOMMANDS AND CONCEPTS 48
Index of Rcommands 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
diﬀerential equations, see lsoda
dim, 43, 149, 152
dir, 281
dir.create, 279
INDEX OF RCOMMANDS AND CONCEPTS 49
dmultinom, 228
dnorm, 225
dpois, 223
dunif, 226
echelon form, see matrix
eig, 96
element-by-element matrix operations, see ma-
trix
else, 185
errbar, 248, 249
eval, 325
exp, 56
expand, 97
expand.grid, 254
expm, 130
ﬁle
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 ﬁrst 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
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 RCOMMANDS AND CONCEPTS 50
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 speciﬁed 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
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 ﬁtted, 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 RCOMMANDS AND CONCEPTS 51
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
kunique 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
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 RCOMMANDS AND CONCEPTS 52
variables
assigning, 286
assigning in base environment from func-
tion, 287
evaluating from base environment within func-
tion, 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
diﬀerences between consecutive elements of,
137
dot product, 79
minimum of values of, 139
norm, 102
position of ﬁrst 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