% LaTeX source for r_refcard (less suitable than r_std_refcard)
% NOT for everyday use at York
% by Tom Short, tshort@epri-peac.com, EPRI PEAC
% granted to the public domain
\documentclass[10pt,landscape]{article}
%\documentclass[10pt,portrait]{article}
\usepackage{pslatex}
\usepackage{graphicx}
\usepackage{multicol}
\usepackage{calc}
\usepackage{color}
\usepackage{epsfig}

% Turn off header and footer
\pagestyle{empty}

%\setlength{\leftmargin}{0.75in}
\setlength{\oddsidemargin}{-0.75in}
\setlength{\evensidemargin}{-0.75in}
\setlength{\textwidth}{10.5in}


\setlength{\topmargin}{-0.2in}
\setlength{\textheight}{7.4in}
\setlength{\headheight}{0in}
\setlength{\headsep}{0in}

\pdfpageheight\paperheight
\pdfpagewidth\paperwidth

% Redefine section commands to use less space
\makeatletter
\renewcommand\section{\@startsection{section}{1}{0mm}%
                                     {-24pt}% \@plus -12pt \@minus -6pt}%
                                     {0.5ex}%
                                {\color{blue}\normalfont\large\bfseries}}
\makeatother

% Don't print section numbers
\setcounter{secnumdepth}{0}

\setlength{\parindent}{0pt}
\setlength{\parskip}{0pt}

\newcommand{\code}{\texttt}
\newcommand{\bcode}[1]{\texttt{\textbf{#1}}}
\newcommand\F{\code{FALSE}}
\newcommand\T{\code{TRUE}}

%\newcommand{\hangpara}[2]{\hangindent#1\hangafter#2\noindent}
%\newenvironment{hangparas}[2]{\setlength{\parindent}{\z@}\everypar={\hangpara{#1}{#2}}}

\newcommand{\describe}[1]{\begin{description}{#1}\end{description}}


% -----------------------------------------------------------------------

\begin{document}

%\raggedright
\footnotesize
\begin{multicols*}{3}

% multicol parameters
% These lengths are set only within the two main columns
%\setlength{\columnseprule}{0.25pt}
\setlength{\premulticols}{1pt}
\setlength{\postmulticols}{1pt}
\setlength{\multicolsep}{1pt}
\setlength{\columnsep}{2pt}

\begin{center}
     \Large{\textbf{\color{blue}R Reference Card}} \\
\end{center}

by Tom Short, EPRI PEAC, tshort@epri-peac.com    2004-10-21\\
Granted to the public domain. See www.Rpad.org for the source and latest version.
Includes material from \emph{R for Beginners} by Emmanuel Paradis (with permission).



\section{Getting help}
\everypar={\hangindent=9mm}

Most R functions have online documentation.

\bcode{help(topic)} documentation on \code{topic}

\bcode{?topic} id.

\bcode{help.search("topic")} search the help system 

\bcode{apropos("topic")} the names of all objects in the search list
matching the regular expression "topic"

\bcode{help.start()} start the HTML version of help

\bcode{str(a)} display the internal *str*ucture of an R object

\bcode{summary(a)} gives a ``summary'' of \code{a}, usually a
statistical summary but it is \emph{generic} meaning it has different operations for different
classes of \code{a}

\bcode{ls()} show objects in the search path; specify \code{pat="pat"}
to search on a pattern

\bcode{ls.str()} str() for each variable in the search path

\bcode{dir()} show files in the current directory

\bcode{methods(a)} shows S3 methods of \code{a}

\bcode{methods(class=class(a))} lists all the methods to handle objects
of class a




\section{Input and output}
\everypar={\hangindent=9mm}

\bcode{load()} load the datasets written with \code{save}

\bcode{data(x)} loads specified data sets

\bcode{library(x)} load add-on packages

\bcode{read.table(file)} reads a file in table format and
                creates a data frame from it; the default separator
                \code{sep=""} is any whitespace; use \code{header=TRUE}
                to read the first line as a header of column names; use \code{as.is=TRUE} to
                prevent character vectors from being converted to
                factors; use \code{comment.char=""} to prevent
                \code{"\#"} from being interpreted as a comment; use
                \code{skip=n} to skip \code{n} lines before reading data; see
                the help for options on row naming, NA treatment, and
                others

\bcode{read.csv("filename",header=TRUE)} id. but with defaults set for reading
comma-delimited files

\bcode{read.delim("filename",header=TRUE)} id. but with defaults set for reading
tab-delimited files

\bcode{read.fwf(file,widths,header=FALSE,sep="\t",as.is=FALSE)} read a table of \emph{f}ixed \emph{w}idth \emph{f}ormatted data into a
     'data.frame'; \code{widths} is an integer vector, giving the widths of the fixed-width fields

\bcode{save(file,...)} saves the specified objects (...) in the XDR
platform-independent binary format

\bcode{save.image(file)} saves all objects

\bcode{cat(..., file="", sep=" ")} prints the arguments after coercing to
character; \code{sep} is the character separator between arguments

\bcode{print(a, ...)} prints its arguments; generic, meaning it can
have different methods for different objects

\bcode{format(x,...)} format an R object for pretty printing

\bcode{write.table(x,file="",row.names=TRUE,col.names=TRUE, sep=" ")} 
prints \code{x} after converting to a data frame; if \code{quote} is
                 \code{TRUE}, character or factor columns are
                 surrounded by quotes (\code{"}); \code{sep} is the field
                 separator; \code{eol} is the end-of-line separator;
                 \code{na} is the string for missing values; use
                 \code{col.names=NA} to add a blank column header to
                 get the column headers aligned correctly for
                 spreadsheet input

\bcode{sink(file)} output to \code{file}, until \code{sink()}

\everypar={\hangindent=0mm}
Most of the I/O functions have a \code{file} argument. This can often
be a character string naming a file or a connection.  \code{file=""} means the standard input or
output. Connections can include files, pipes, zipped
files, and R variables. 

On windows, the file connection can also be used with \code{description =
"clipboard"}. To read a table copied from Excel, use \\
\code{x <- read.delim("clipboard")}\\
To write a table to the clipboard for Excel, use \\
\code{write.table(x,"clipboard",sep="\textbackslash t",col.names=NA)}

For database interaction, see packages \code{RODBC}, \code{DBI},
\code{RMySQL}, \code{RPgSQL}, and \code{ROracle}. See packages \code{XML}, \code{hdf5}, \code{netCDF} for reading
other file formats.





\section{Data creation}
\everypar={\hangindent=9mm}

\bcode{c(...)} generic function to combine arguments with the default
forming a vector;
with \code{recursive=TRUE} descends through lists combining all elements
into one vector

\bcode{from:to} generates a sequence; ``:'' has operator priority; 1:4
+ 1 is ``2,3,4,5''

\bcode{seq(from,to)} generates a sequence
\code{by=} specifies increment; \code{length=} specifies desired length

\bcode{seq(along=x)} generates \code{1, 2, ..., length(along)}; useful for
\code{for} loops

\bcode{rep(x,times)} replicate \code{x} \code{times}; use \code{each=}
to repeat ``each'' element of \code{x} \code{each} times;
\code{rep(c(1,2,3),2)} is 1 2 3 1 2 3; \code{rep(c(1,2,3),each=2)} is 1 1 2 2 3 3 

\bcode{data.frame(...)} create a data frame of the named or unnamed arguments;
  \code{data.frame(v=1:4,ch=c("a","B","c","d"),n=10)}; shorter vectors
  are recycled to the length of the longest 

\bcode{list(...)} create a list of the named or unnamed arguments;
  \code{list(a=c(1,2),b="hi",c=3i)}; 

\bcode{array(x,dim=)} array with data \code{x}; specify
dimensions like \code{dim=c(3,4,2)}; elements of \code{x} recycle if \code{x}
is not long enough

\bcode{matrix(x,nrow=,ncol=)} matrix; elements of \code{x} recycle

\bcode{factor(x,levels=)} encodes a vector \code{x} as a factor

\bcode{gl(n,k,length=n*k,labels=1:n)} generate levels (factors) by specifying
the pattern of their levels; \code{k} is the number of levels, and \code{n} is the
number of replications

\bcode{expand.grid()} a data frame from all combinations of the supplied vectors
     or factors

\bcode{rbind(...)} combine arguments by rows for matrices, data frames, and
others

\bcode{cbind(...)} id. by columns





\section{Slicing and extracting data}

Indexing vectors

\begin{tabular}{@{}l@{\ }l}
\code{x[n]} & \code{n}$^{th}$ element\\
\code{x[-n]} & all \emph{but} the \code{n}$^{th}$ element\\
\code{x[1:n]} & first \code{n} elements\\
\code{x[-(1:n)]} & elements from \code{n+1} to the end\\
\code{x[c(1,4,2)]} & specific elements\\
\code{x["name"]} & element named \code{"name"}\\
\code{x[x > 3]} & all elements greater than 3\\
\code{x[x > 3 \& x < 5]} & all elements between 3 and 5\\
\code{x[x \%in\% c("a","and","the")]} & elements in the given set\\
\end{tabular}

Indexing lists\\*
\samepage\begin{tabular}{@{}l@{\ }l}
\code{x[n]} & list with elements \code{n}\\
\code{x[[n]]} & \code{n}$^{th}$ element of the list\\
\code{x[["name"]]} & element of the list named \code{"name"}\\
\code{x\$name} & id.\\
\end{tabular}

Indexing matrices

\begin{tabular}{@{}l@{\ }l}
\code{x[i,j]} & element at row \code{i}, column \code{j}\\
\code{x[i,]} & row \code{i}\\
\code{x[,j]} & column \code{j}\\
\code{x[,c(1,3)]} & columns 1 and 3\\
\code{x["name",]} & row named \code{"name"}\\
\end{tabular}

Indexing data frames (matrix indexing plus the following)

\begin{tabular}{@{}l@{\ }l}
\code{x[["name"]]} & column named \code{"name"}\\
\code{x\$name} & id.\\
\end{tabular}





\section{Variable conversion} 
\everypar={\hangindent=9mm}

\bcode{as.array(x), as.data.frame(x), as.numeric(x), as.logical(x),
  as.complex(x), as.character(x), ...} convert type; for a complete list,
  use \code{methods(as)}




\section{Variable information} 
\everypar={\hangindent=9mm}

\bcode{is.na(x), is.null(x), is.array(x), is.data.frame(x), is.numeric(x),
  is.complex(x), is.character(x), ...} test for type; for a complete list,
  use \code{methods(is)}

\bcode{length(x)}  number of elements in \code{x}

\bcode{dim(x)} Retrieve or set the dimension of an object;
\code{dim(x) <- c(3,2)}

\bcode{dimnames(x)} Retrieve or set the dimension names of an object

\bcode{nrow(x)} number of rows; \code{NROW(x)} is the same but treats
a vector as a one-row matrix

\bcode{ncol(x)} and \bcode{NCOL(x)} id. for columns

\bcode{class(x)} get or set the class of \code{x}; \code{class(x) <- "myclass"}

\bcode{unclass(x)} remove the class attribute of \code{x}

\bcode{attr(x,which)} get or set the attribute \code{which} of \code{x}

\bcode{attributes(obj)} get or set the list of attributes of \code{obj}





\section{Data selection and manipulation}
\everypar={\hangindent=9mm}

\bcode{which.max(x)}  returns the index of the greatest element of
\bcode{x}

\bcode{which.min(x)}  returns the index of the smallest element of
\bcode{x}

\bcode{rev(x)}  reverses the elements of \code{x}

\bcode{sort(x)}  sorts the elements of \code{x} in increasing order; to sort in decreasing order: \code{rev(sort(x))}

\bcode{cut(x,breaks)}  divides \code{x} into intervals (factors);
\code{breaks} is the number of cut intervals or a vector of cut points

\bcode{match(x, y)}  returns a vector of the same length than \code{x} with the elements of \code{x} which are in \code{y} (\code{NA} otherwise)

\bcode{which(x == a)}  returns a vector of the indices of \code{x} if the comparison operation is true (\T), in this example the values of \code{i} for which \code{x[i] == a} (the argument of this function must be a variable of mode logical)

\bcode{choose(n, k)}  computes the combinations of $k$ events among $n$ repetitions = $n!/[(n-k)!k!]$

\bcode{na.omit(x)}  suppresses the observations with missing data (\code{NA}) (suppresses the corresponding line if \code{x} is a matrix or a data frame)

\bcode{na.fail(x)}  returns an error message if \code{x} contains at least one \code{NA}

\bcode{unique(x)}  if \code{x} is a vector or a data frame, returns a similar object but with the duplicate elements suppressed

\bcode{table(x)}  returns a table with the numbers of the differents values of \code{x} (typically for integers or factors)

\bcode{subset(x, ...)}  returns a selection of \code{x} with respect to criteria (\code{...}, typically comparisons: \code{x\$V1 < 10}); if \code{x} is a data frame, the option \code{select} gives the variables to be kept or dropped using a minus sign

\bcode{sample(x, size)}  resample randomly and without replacement \code{size} elements in the vector \code{x}, the option \code{replace = TRUE} allows to resample with replacement

\bcode{prop.table(x,margin=)} table entries as fraction of marginal table 




\section{Math}
\everypar={\hangindent=9mm}

\bcode{sin,cos,tan,asin,acos,atan,atan2,log,log10,exp}

\bcode{max(x)}  maximum of the elements of \code{x}

\bcode{min(x)}  minimum of the elements of \code{x}

\bcode{range(x)}  id. then \code{c(min(x), max(x))}

\bcode{sum(x)}  sum of the elements of \code{x}

\bcode{diff(x)}  lagged and iterated differences of vector \code{x}

\bcode{prod(x)}  product of the elements of \code{x}

\bcode{mean(x)}  mean of the elements of \code{x}

\bcode{median(x)}  median of the elements of \code{x}

\bcode{quantile(x,probs=)} sample quantiles
     corresponding to the given probabilities (defaults to 0,.25,.5,.75,1)

\bcode{weighted.mean(x, w)} mean of \code{x} with weights \code{w}

\bcode{rank(x)}  ranks of the elements of \code{x}

\bcode{var(x)} or \code{cov(x)}  variance of the elements of \code{x}
(calculated on $n-1$); if \code{x} is a matrix or a data frame, the
variance-covariance matrix is calculated

\bcode{sd(x)} standard deviation of \code{x}

\bcode{cor(x)}  correlation matrix of \code{x} if it is a matrix or a
data frame (1 if \code{x} is a vector)

\bcode{var(x, y)} or \code{cov(x, y)}  covariance between \code{x} and \code{y}, or between the columns of \code{x} and those of \code{y} if they are matrices or data frames

\bcode{cor(x, y)}  linear correlation between \code{x} and \code{y}, or correlation matrix if they are matrices or data frames

\bcode{round(x, n)}  rounds the elements of \code{x} to \code{n}
decimals

\bcode{log(x, base)}  computes the logarithm of \code{x} with base \code{base}

\bcode{scale(x)}  if \code{x} is a matrix, centers and reduces the data; to center only use the option \code{center=FALSE}, to reduce only \code{scale=FALSE} (by default \code{center=TRUE, scale=TRUE})

\bcode{pmin(x,y,...)}  a vector which $i$th element is the minimum of \code{x[i]}, \code{y[i]}, \ldots

\bcode{pmax(x,y,...)}  id. for the maximum

\bcode{cumsum(x)}  a vector which $i$th element is the sum from \code{x[1]} to \code{x[i]}

\bcode{cumprod(x)}  id. for the product

\bcode{cummin(x)}  id. for the minimum

\bcode{cummax(x)}  id. for the maximum

\bcode{union(x,y)},~\bcode{intersect(x,y)},~\bcode{setdiff(x,y)},~\bcode{setequal(x,y)}, \bcode{is.element(el,set)} ``set'' functions

\bcode{Re(x)} real part of a complex number

\bcode{Im(x)} imaginary part

\bcode{Mod(x)} modulus; \code{abs(x)} is the same

\bcode{Arg(x)} angle in radians of the complex number

\bcode{Conj(x)} complex conjugate

\bcode{convolve(x,y)} compute the several kinds of
     convolutions of two sequences

\bcode{fft(x)} Fast Fourier Transform of an array

\bcode{mvfft(x)} FFT of each column of a matrix

\bcode{filter(x,filter)} applies linear filtering to a univariate time series or to each
     series separately of a multivariate time series

\everypar={\hangindent=0mm}
Many math functions have a logical parameter \code{na.rm=FALSE} to
specify missing data (NA) removal.




\section{Matrices}
\everypar={\hangindent=9mm}

\bcode{t(x)} transpose

\bcode{diag(x)} diagonal

\bcode{\%*\%} matrix multiplication

\bcode{solve(a,b)} solves \code{a \%*\% x = b} for \code{x}

\bcode{solve(a)} matrix inverse of \code{a}

\bcode{rowsum(x)} sum of rows for a matrix-like object;
\bcode{rowSums(x)} is a faster version

\bcode{colsum(x)}, \bcode{colSums(x)} id. for columns

\bcode{rowMeans(x)} fast version of row means

\bcode{colMeans(x)} id. for columns





\section{Advanced data processing}
\everypar={\hangindent=9mm}

\bcode{apply(X,INDEX,FUN=)} a vector or array or list of values obtained by applying a
     function \code{FUN} to margins (\code{INDEX}) of \code{X}

\bcode{lapply(X,FUN)} apply \code{FUN} to each element of the list \code{X}

\bcode{tapply(X,INDEX,FUN=)} apply \code{FUN} to each cell
of a ragged array given by \code{X} with indexes \code{INDEX}

\bcode{by(data,INDEX,FUN)} apply \code{FUN} to data frame \code{data}
subsetted by \code{INDEX}

\bcode{merge(a,b)} merge two data frames by common columns or row names

\bcode{xtabs(a~b,data=x)} a contingency table from cross-classifying factors

\bcode{aggregate(x,by,FUN)} splits the data frame \code{x} into subsets, computes summary statistics for
     each, and returns the result in a convenient form; \code{by} is a
     list of grouping elements, each as long as the variables in \code{x}

\bcode{stack(x, ...)} transform data available as
     separate columns in a data frame or list into a single column

\bcode{unstack(x, ...)} inverse of \code{stack()}

\bcode{reshape(x, ...)} reshapes a data frame between 'wide' format with
     repeated measurements in separate columns of the same record and
     'long' format with the repeated measurements in separate records;
     use \code(direction="wide") or \code(direction="long")





\section{Strings}
\everypar={\hangindent=9mm}

\bcode{paste(...)} concatenate vectors after converting to character;
\code{sep=} is the string to separate terms (a single space is the default);
\code{collapse=} is an optional string to separate ``collapsed'' results

\bcode{substr(x,start,stop)} substrings in a character vector; can also assign, as \code{substr(x, start, stop) <- value}

\bcode{strsplit(x,split)} split \code{x} according to the substring \code{split}

\bcode{grep(pattern,x)} searches for matches to \code{pattern}
     within \code{x}; see \code{?regex}

\bcode{gsub(pattern,replacement,x)} replacement of matches determined by
regular expression matching \code{sub()} is the same but only
replaces the first occurrence. 

\bcode{tolower(x)} convert to lowercase

\bcode{toupper(x)} convert to uppercase

\bcode{match(x,table)} a vector of the positions of first matches for the elements of \code{x} among \code{table}

\bcode{x \%in\% table} id. but returns a logical vector 

\bcode{pmatch(x,table)} partial matches for the elements of \code{x} among \code{table}

\bcode{nchar(x)} number of characters


\section{\color{blue}Dates and Times}

The class \code{Date} has dates without times.  \code{POSIXct} has
dates and times, including time zones. Comparisons (e.g. $>$),
\code{seq()}, and \code{difftime()} are useful. \code{Date} also allows
$+$ and $-$. \code{?DateTimeClasses} gives more information. See also package
\code{chron}.

\everypar={\hangindent=9mm}

\bcode{as.Date(s)} and \bcode{as.POSIXct(s)} convert to the respective
class; \code{format(dt)} converts to a string representation. The
default string format is ``2001-02-21''. These accept a second argument
to specify a format for conversion. Some common formats are:

  \describe{
\itemsep=0pt\parskip=0pt
    \item{\code{\%a}, \code{\%A}} {Abbreviated and full weekday name.}
    \item{\code{\%b}, \code{\%B}} {Abbreviated and full month name.}
    \item{\code{\%d}} {Day of the month (01--31).}
    \item{\code{\%H}} {Hours (00--23).}
    \item{\code{\%I}} {Hours (01--12).}
    \item{\code{\%j}} {Day of year (001--366).}
    \item{\code{\%m}} {Month (01--12).}
    \item{\code{\%M}} {Minute (00--59).}
    \item{\code{\%p}} {AM/PM indicator. }
    \item{\code{\%S}} {Second as decimal number (00--61).}
    \item{\code{\%U}} {Week (00--53); the first Sunday as day 1 of week 1.}
    \item{\code{\%w}} {Weekday (0--6, Sunday is 0).}
    \item{\code{\%W}} {Week (00--53); the first Monday as day 1 of week 1.}
    \item{\code{\%y}} {Year without century (00--99). Don't use.}
    \item{\code{\%Y}} {Year with century.}
    \item{\code{\%z}} {(output only.) Offset from Greenwich; \code{-0800} is 8 hours west of.}
    \item{\code{\%Z}} {(output only.) Time zone as a character
      string (empty if not available).}
  }

Where leading zeros are shown they will be used on output but are
optional on input. See \code{?strftime}.  





\section{Plotting}

\everypar={\hangindent=9mm}

\bcode{plot(x)}  plot of the values of \code{x} (on the $y$-axis) ordered on the $x$-axis

\bcode{plot(x, y)}  bivariate plot of \code{x} (on the $x$-axis) and \code{y} (on the $y$-axis)

\bcode{hist(x)}  histogram of the frequencies of \code{x}

\bcode{barplot(x)}  histogram of the values of \code{x}; use
\code{horiz=FALSE} for horizontal bars

\bcode{dotchart(x)}  if \code{x} is a data frame, plots a Cleveland dot plot (stacked plots line-by-line and column-by-column)

\bcode{pie(x)}  circular pie-chart

\bcode{boxplot(x)}  ``box-and-whiskers'' plot

\bcode{sunflowerplot(x, y)}  id. than \code{plot()} but the points with similar coordinates are drawn as flowers which petal number represents the number of points

\bcode{stripplot(x)}  plot of the values of \code{x} on a line (an alternative to \code{boxplot()} for small sample sizes)

\bcode{coplot(x\~{}y $\mid$ z)}  bivariate plot of \code{x} and \code{y} for each value or interval of values of \code{z}

\bcode{interaction.plot (f1, f2, y)}  if \code{f1} and \code{f2} are factors, plots the means of \code{y} (on the $y$-axis) with respect to the values of \code{f1} (on the $x$-axis) and of \code{f2} (different curves); the option \code{fun} allows to choose the summary statistic of \code{y} (by default \code{fun=mean})

\bcode{matplot(x,y)}  bivariate plot of the first column of \code{x} {\it vs.} the first one of \code{y}, the second one of \code{x} {\it vs.} the second one of \code{y}, etc.

\bcode{fourfoldplot(x)}  visualizes, with quarters of circles, the association between two dichotomous variables for different populations (\code{x} must be an array with \code{dim=c(2, 2, k)}, or a matrix with \code{dim=c(2, 2)} if $k=1$)

\bcode{assocplot(x)}  Cohen--Friendly graph showing the deviations  from independence of rows and columns in a two dimensional contingency table

\bcode{mosaicplot(x)}  `mosaic' graph of the residuals from a log-linear regression of a contingency table

\bcode{pairs(x)}  if \code{x} is a matrix or a data frame, draws all possible bivariate plots between the columns of \code{x}

\bcode{plot.ts(x)}  if \code{x} is an object of class \code{"ts"}, plot of \code{x} with respect to time, \code{x}  may be multivariate but the series must have the same frequency and dates

\bcode{ts.plot(x)}  id. but if \code{x} is multivariate the series may have different dates and must have the same frequency

\bcode{qqnorm(x)}  quantiles of \code{x} with respect to the values expected under a normal law

\bcode{qqplot(x, y)}  quantiles of \code{y} with respect to the quantiles of \code{x}

\bcode{contour(x, y, z)}  contour plot (data are interpolated to draw the curves), \code{x} and \code{y} must be vectors and \code{z} must be a matrix so that \code{dim(z)=c(length(x), length(y))} (\code{x} and \code{y} may be omitted)

\bcode{filled.contour(x, y, z)}  id. but the areas between the contours are coloured, and a legend of the colours is drawn as well

\bcode{image(x, y, z)}  id. but with colours (actual data are plotted)

\bcode{persp(x, y, z)}  id. but in perspective (actual data are plotted)

\bcode{stars(x)}  if \code{x} is a matrix or a data frame, draws a graph with segments or a star where each row of \code{x} is represented by a star and the columns are the lengths of the segments

\bcode{symbols(x, y, ...)}  draws, at the coordinates given by \code{x} and \code{y}, symbols (circles, squares, rectangles, stars, thermometres or ``boxplots'') which sizes, colours \ldots{} are specified by supplementary arguments

\bcode{termplot(mod.obj)}  plot of the (partial) effects of a regression model (\code{mod.obj})

The following parameters are common to many plotting functions:

\bcode{add=FALSE}  if \T{} superposes the plot on the previous one (if it exists)

\bcode{axes=TRUE}  if \F{} does not draw the axes and the box

\bcode{type="p"}  specifies the type of plot, \code{"p"}: points, \code{"l"}: lines, \code{"b"}: points connected by lines, \code{"o"}: id. but the lines are over the points, \code{"h"}: vertical lines, \code{"s"}: steps, the data are represented by the top of the vertical lines, \code{"S"}: id. but the data are represented by the bottom of the vertical lines

\bcode{xlim=, ylim=}  specifies the lower and upper limits of the axes, for example with \code{xlim=c(1, 10)} or \code{xlim=range(x)}

\bcode{xlab=, ylab=}  annotates the axes, must be variables of mode character

\bcode{main=}  main title, must be a variable of mode character

\bcode{sub=}  sub-title (written in a smaller font)




\section{Low-level plotting commands}
\everypar={\hangindent=9mm}

\bcode{points(x, y)}  adds points (the option \code{type=} can be used)

\bcode{lines(x, y)}  id. but with lines

\bcode{text(x, y, \mbox{labels}, ...)}  adds text given by \code{labels} at coordinates (\code{x},\code{y}); a typical use is: \code{plot(x, y, type="n"); text(x, y, names)}

\bcode{mtext(text, side=3, line=0, ...)}  adds text given by \code{text} in the margin specified by \code{side} (see \code{axis()} below); \code{line} specifies the line from the plotting area

\bcode{segments(x0, y0, x1, y1)}  draws lines from points (\code{x0},\code{y0}) to points (\code{x1},\code{y1})

\bcode{arrows(x0, y0, x1, y1, angle= 30, code=2)}  id. with arrows at points (\code{x0},\code{y0}) if \code{code=2}, at points (\code{x1},\code{y1}) if \code{code=1}, or both if \code{code=3}; \code{angle} controls the angle from the shaft of the arrow to the edge of the arrow head

\bcode{abline(a,b)}  draws a line of slope \code{b} and intercept \code{a}

\bcode{abline(h=y)}  draws a horizontal line at ordinate \code{y}

\bcode{abline(v=x)}  draws a vertical line at abcissa \code{x}

\bcode{abline(lm.obj)}  draws the regression line given by \code{lm.obj}

\bcode{rect(x1, y1, x2, y2)}  draws a rectangle which left, right, bottom, and top limits are \code{x1}, \code{x2}, \code{y1}, and \code{y2}, respectively

\bcode{polygon(x, y)}  draws a polygon linking the points with coordinates given by \code{x} and \code{y}

\bcode{legend(x, y, legend)}  adds the legend at the point (\code{x},\code{y}) with the symbols given by \code{legend}

\bcode{title()}  adds a title and optionally a sub-title

\bcode{axis(side, vect)}  adds an axis at the bottom (\code{side=1}), on the left (\code{2}), at the top (\code{3}), or on the right (\code{4}); \code{vect} (optional) gives the abcissa (or ordinates) where tick-marks are drawn

\bcode{rug(x)}  draws the data \code{x} on the $x$-axis as small vertical lines

\bcode{locator(n, type="n", ...)}  returns the coordinates ($x,y$) after the user has clicked \code{n} times on the plot with the mouse; also draws symbols (\code{type="p"}) or lines (\code{type="l"}) with respect to optional graphic parameters (\code{...}); by default nothing is drawn (\code{type="n"})




\section{Graphical parameters}

These can be set globally with \bcode{par(...)}; many can be passed as
parameters to plotting commands.

\everypar={\hangindent=9mm}

\bcode{adj}  controls text justification (\code{0} left-justified, \code{0.5} centred, \code{1} right-justified)

\bcode{bg}  specifies the colour of the background (ex. : \code{bg="red"}, \code{bg="blue"}, \ldots{} the list of the 657 available colours is displayed with \code{colors()})

\bcode{bty}  controls the type of box drawn around the plot, allowed values are: \code{"o"}, \code{"l"}, \code{"7"}, \code{"c"}, \code{"u"} ou \code{"]"} (the box looks like the corresponding character); if \code{bty="n"} the box is not drawn

\bcode{cex}  a value controlling the size of texts and symbols with respect to the default; the following parameters have the same control for numbers on the axes, \code{cex.axis}, the axis labels, \code{cex.lab}, the title, \code{cex.main}, and the sub-title, \code{cex.sub}

\bcode{col}  controls the color of symbols and lines; use color names:
\code{"red"}, \code{"blue"} see \code{colors()} or as \code{"\#RRGGBB"};
see \code{rgb()}, \code{hsv()}, \code{gray()}, and \code{rainbow()}; as for \code{cex} there are: \code{col.axis}, \code{col.lab}, \code{col.main}, \code{col.sub}

\bcode{font}  an integer which controls the style of text (\code{1}: normal, \code{2}: italics, \code{3}: bold, \code{4}: bold italics); as for \code{cex} there are: \code{font.axis}, \code{font.lab}, \code{font.main}, \code{font.sub}

\bcode{las}  an integer which controls the orientation of the axis labels (\code{0}: parallel to the axes, \code{1}: horizontal, \code{2}: perpendicular to the axes, \code{3}: vertical)

\bcode{lty}  controls the type of lines, can be an integer or string (\code{1}: \code{"solid"}, \code{2}: \code{"dashed"}, \code{3}: \code{"dotted"}, \code{4}: \code{"dotdash"}, \code{5}: \code{"longdash"}, \code{6}: \code{"twodash"}, or a string of up to eight characters (between \code{"0"} and \code{"9"}) which specifies alternatively the length, in points or pixels, of the drawn elements and the blanks, for example \code{lty="44"} will have the same effect than \code{lty=2}

\bcode{lwd}  a numeric which controls the width of lines, default \code{1}

\bcode{mar}  a vector of 4 numeric values which control the space between the axes and the border of the graph of the form \code{c(bottom, left, top, right)}, the default values are \code{c(5.1, 4.1, 4.1, 2.1)}

\bcode{mfcol}  a vector of the form \code{c(nr,nc)} which partitions the graphic window as a matrix of \code{nr} lines and \code{nc} columns, the plots are then drawn in columns

\bcode{mfrow}  id. but the plots are drawn by row

\bcode{pch}  controls the type of symbol, either an integer between 1
and 25, or any single character within \code{""}

\epsfig{file=pch_symbol.ps,width=8.5cm}

\bcode{ps}  an integer which controls the size in points of texts and symbols

\bcode{pty}  a character which specifies the type of the plotting region, \code{"s"}: square, \code{"m"}: maximal

\bcode{tck}  a value which specifies the length of tick-marks on the axes as a fraction of the smallest of the width or height of the plot; if \code{tck=1} a grid is drawn

\bcode{tcl}  a value which specifies the length of tick-marks on the axes as a fraction of the height of a line of text (by default \code{tcl=-0.5})

\bcode{xaxt}  if \code{xaxt="n"} the $x$-axis is set but not drawn (useful in conjonction with \code{axis(side=1, ...)})

\bcode{yaxt}  if \code{yaxt="n"} the $y$-axis is set but not drawn (useful in conjonction with \code{axis(side=2, ...)})





\section{Lattice (Trellis) graphics}
\everypar={\hangindent=9mm}

\bcode{xyplot(y\~{}x)}  bivariate plots (with many functionalities)

\bcode{barchart(y\~{}x)}  histogram of the values of \code{y} with
respect to those of \code{x}

\bcode{dotplot(y\~{}x)}  Cleveland dot plot (stacked plots line-by-line
and column-by-column)

\bcode{densityplot(\~{}x)}  density functions plot

\bcode{histogram(\~{}x)}  histogram of the frequencies of \code{x}

\bcode{bwplot(y\~{}x)}  ``box-and-whiskers'' plot

\bcode{qqmath(\~{}x)}  quantiles of \code{x} with respect to the values expected under a theoretical distribution

\bcode{stripplot(y\~{}x)}  single dimension plot, \code{x} must be numeric, \code{y} may be a factor

\bcode{qq(y\~{}x)}  quantiles to compare two distributions, \code{x} must be numeric, \code{y} may be numeric, character, or factor but must have two `levels'

\bcode{splom(\~{}x)}  matrix of bivariate plots

\bcode{parallel(\~{}x)}  parallel coordinates plot

\bcode{levelplot(z\~{}x*y|g1*g2)}  coloured plot of the values of \code{z} at the coordinates given by \code{x} and \code{y} (\code{x}, \code{y} and \code{z} are all of the same length)

\bcode{wireframe(z\~{}x*y|g1*g2)}  3d surface plot

\bcode{cloud(z\~{}x*y|g1*g2)}  3d scatter plot

\everypar={\hangindent=0mm}
In the normal Lattice formula, \code{y~x|g1*g2} has
combinations of optional conditioning variables \code{g1}
and \code{g2} plotted on separate panels. Lattice functions 
take many of the same arguments as base
graphics plus also \code{data=} the data frame for the formula
variables and \code{subset=} for subsetting. Use \code{panel=} to
define a custom panel function (see \code{apropos("panel")}
and \code{?llines}). Lattice functions return an object of class
trellis and have to be \code{print}-ed to produce the graph. Use
\code{print(xyplot(...))} inside functions where automatic
printing doesn't work. Use \code{lattice.theme} and \code{lset} to
change Lattice defaults.



\section{Optimization and model fitting}
\everypar={\hangindent=9mm}

\bcode{optim(par, fn, method = c("Nelder-Mead", "BFGS", "CG",
  "L-BFGS-B", "SANN")} general-purpose optimization; \code{par} is
  initial values, \code{fn} is function to optimize (normally minimize)

\bcode{nlm(f,p)} minimize function \code{f} using a Newton-type
algorithm with starting values \code{p}

\bcode{lm(formula)} fit linear models; \code{formula} is typically of
     the form \code{response ~ termA + termB + ...}; use \code{I(x*y)
     + I(x\^{}2)} for terms made of nonlinear components

\bcode{glm(formula,family=)} fit generalized linear models, specified by
     giving a symbolic description of the linear predictor and a
     description of the error distribution; \code{family} is a
     description of the error distribution and link function to
          be used in the model; see \code{?family}

\bcode{nls(formula)} nonlinear least-squares estimates of the nonlinear
     model parameters

\bcode{approx(x,y=)} linearly interpolate given data points; \code{x} can be an
xy plotting structure

\bcode{spline(x,y=)} cubic spline interpolation

\bcode{loess(formula)} fit a polynomial surface using local fitting

\everypar={\hangindent=0mm}
Many of the formula-based modeling functions have several common
arguments: \code{data=} the data frame for the formula variables,
\code{subset=} a subset of variables used in the fit,
\code{na.action=} action for missing values: \code{"na.fail"}, \code{"na.omit"}, or
a function. The following generics often apply to model fitting functions: 

\everypar={\hangindent=9mm}
\bcode{predict(fit,...)}  predictions from \code{fit} based on input data

\bcode{df.residual(fit)}  returns the number of residual degrees of freedom

\bcode{coef(fit)}  returns the estimated coefficients (sometimes with their standard-errors)

\bcode{residuals(fit)}  returns the residuals

\bcode{deviance(fit)}  returns the deviance

\bcode{fitted(fit)}  returns the fitted values

\bcode{logLik(fit)}  computes the logarithm of the likelihood and the number of parameters

\bcode{AIC(fit)}  computes the Akaike information criterion or AIC


\section{Statistics}
\everypar={\hangindent=9mm}

\bcode{aov(formula)} analysis of variance model

\bcode{anova(fit,...)} analysis of variance (or deviance) tables for one or more
     fitted model objects

\bcode{density(x)} kernel density estimates of \code{x}

\bcode{binom.test()}, \bcode{pairwise.t.test()}, \bcode{power.t.test()},
\bcode{prop.test()}, \bcode{t.test()}, ... use
\code{help.search("test")} 





\section{Distributions}

\bcode{rnorm(n, mean=0, sd=1)} Gaussian (normal)  

\bcode{rexp(n, rate=1)} exponential

\bcode{rgamma(n, shape, scale=1)} gamma  

\bcode{rpois(n, lambda)} Poisson

\bcode{rweibull(n, shape, scale=1)} Weibull

\bcode{rcauchy(n, location=0, scale=1)} Cauchy  

\bcode{rbeta(n, shape1, shape2)} beta

\bcode{rt(n, df)} `Student' ($t$)  

\bcode{rf(n, df1, df2)} Fisher--Snedecor ($F$)  ($\chi^2$)  

\bcode{rchisq(n, df)} Pearson 

\bcode{rbinom(n, size, prob)} binomial  

\bcode{rgeom(n, prob)} geometric  

\bcode{rhyper(nn, m, n, k)} hypergeometric  

\bcode{rlogis(n, location=0, scale=1)} logistic  

\bcode{rlnorm(n, meanlog=0, sdlog=1)} lognormal  

\bcode{rnbinom(n, size, prob)} negative binomial  

\bcode{runif(n, min=0, max=1)} uniform  

\bcode{rwilcox(nn, m, n)}, \code{rsignrank(nn, n)} Wilcoxon's statistics  

All these functions can be used by replacing the letter \code{r} with
\code{d}, \code{p} or \code{q} to get, respectively, the probability
density (\code{d\textsl{func}(x, ...)}), the cumulative probability
density (\code{p\textsl{func}(x, ...)}), and the value of quantile
(\code{q\textsl{func}(p, ...)}, with 0 $<$ \code{p} $<$ 1).





\section{Programming}
\everypar={\hangindent=9mm}

\bcode{function( arglist ) expr} function definition

\bcode{return(value)}

\everypar={\hangindent=0mm}
\bcode{if(cond) expr\\
if(cond) cons.expr  else  alt.expr\\
for(var in seq) expr\\
while(cond) expr\\
repeat expr\\
break\\
next}

Use braces \{\} around statements


\everypar={\hangindent=9mm}
\bcode{ifelse(test, yes, no)} a value with the same shape as \code{test} filled with elements
from either \code{yes} or \code{no} 

\bcode{do.call(funname, args)} executes a function call from the name of
  the function and a list of arguments to be passed to it

\end{multicols*}
\end{document}
%