Transcript Lecture 7

Introduction to R Functions, Packages
Andrew Jaffe
10/18/10
Overview
Functions
 Packages
 Questions

Functions
Everything you use in R is a built-in
function
 You can download new functions
(packages – next section)
 You can add your own to a script

Functions

Built in functions (note the lack of
parenthesis – this is also why you don’t
want to name variables as functions):
> rep
function (x, ...) .Primitive("rep")
>c
function (..., recursive = FALSE)
.Primitive("c")
Functions
Syntax: functionName <- function(inputs) {
body of the function which returns
something}
 You must run/submit the function before
you can use it
 Note that variable naming within a function
is protected, and not altered by whatever
your script is doing

Functions
Input
# tests if a number if positive
pos = function(x) {
if(x >= 0) out = 1
if(x < 0) out = 0
return(out)
}
Output
Functions
Run the
function
first
> pos = function(x) {
+ if(x >= 0) out = 1
+ if(x < 0) out = 0
+ return(out)
+ }
> pos(5)
[1] 1
> pos(-5)
[1] 0
Functions

The value that the function returns can be
stored as a new variable
> y = pos(4)
> y
[1] 1
Functions
> # protected – x is the
# input to pos
> x = 3
> pos(6)
[1] 1
> x
[1] 3
Functions
Using return() explicitly tells the function
what to return – safe
 Otherwise, the function will return the last
value that it works with or assigns
 This can be an issue if you use a lot of
logical statements

Functions

Adding a ‘verbose’ logical variable gives
the user some feedback
> pos = function(x,verbose=TRUE) {
+ if(x >= 0) out = 1
+ if(x < 0) out = 0
+
+ if(verbose) cat("finished running","\n")
+ return(out)
+ }
> y = pos(5)
finished running
> y
[1] 1
Functions
You can change the input into functions
when you run them
 You can name each input, or just put their
values in order

> y = pos(5, verbose = FALSE)
> y = pos(5, FALSE) # same thing
> y
[1] 1
Functions
Here, we set verbose to be TRUE by
default, ie that that function says what its
doing
 Using verbose statements throughout your
functions makes it easier to use
(especially if other people are going to use
your function)

Functions
Note: really long ‘for’ loops also benefit
from using verbose statements
 %%: mod, the remainder of the first
number divided by the second
 Print a period every 10,000 iterations

for(i in 1:1e5) {
if(i %% 10000 == 0) cat(".")
# do other stuff
}
Functions
Why do functions?
 Provides modularity to your code

 You
can solve small problems using functions
 Keeps your actual analysis script cleaner
 You can distribute your code script to other
people
Functions
For example, download the lecture notes,
and type source(“lecture_notes.R”)
 The ‘pos’ function should be added into
your working directory
 Another function, ‘mypar’ was added, but
requires a …package!

Functions
Make a function that takes two numbers
as inputs, and returns their sum
 Make a function that takes three inputs as
inputs and returns their product

Functions
summ <- function(a,b) {
out = a+b
return(out)
}
prodd <- function(a,b,c) {
out = a*b*c
return(out)
}
Overview
Functions
 Packages
 Questions

Packages
R can access and install a huge library of
packages
 The full list is here: http://cran.rproject.org/web/packages/
 You only need to install a package once,
then you can use it whenever you want

Packages
?install.packages
 Let’s try downloading “RColorBrewer”
 install.packages(“RColorBrewer”)
 A list of repository directories should popup  select USA (basically any of them
will work)

I
think the Maryland one is Hopkins…
Packages
Some installation popups occurs and the
package should be installed on your
computer
 Then, library(package_name)
 library(RColorBrewer) – quotes are
optional

Packages
?RColorBrewer: “Creates nice looking
color palettes especially for thematic
maps”
 Top left corner: “RColorBrewer
{RColorBrewer}“
 Top left in mean: “mean {base}”
 The thing in {} is the package

Packages
Now, resource the lecture 7 notes so that
the mypar() function gets read in correctly
 This function will alter the plot parameters
to make the color palette more divergent,
changes the margin sizes, and can allow
you to plot multi-panel plots

Packages
mypar() # default is 1 x 1 plot space
 mypar(2,2) # 2 rows, 2 columns

> data(cars)
> mypar()
> plot(cars, type = "b", col = 5)
Packages
I usually google “R + [something I’m trying
to do]” and sometimes links can direct you
to existing packages
 The full list is on the CRAN website
 Some Epi ones are “survival” – survival
analysis, “lme4” – longitudinal data
analysis, “Epi” – some epi functions

Packages
Try installing those packages now
 Remember, to use a package, you must
invoke the library(package) command

Packages
library(survival)
 ?survival
 ??survival – “fuzzy search”
 ?Surv

Overview
Functions
 Packages
 Questions

Questions?

Any burning R questions? Open floor…