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…