Summer 2010 — R: Functions
<- R: Summarization and Aggregation | Home | R: Reshaping -> |
Contents
Intro
If you have a series of commands that you intend to run many times on many pieces of similar data (say, in combination with the
function()
You define a new function with the
foo <- function(x){ x <- x*10 return(x) }
Run
Here are some more useful functions, of the sort you're more likely to write.
zscore <- function(x){ ## Returns z-scored values x.mean <- mean(x) x.sd <- sd(x) x.z <- (x-x.mean)/x.sd return(x.z) }
x <- rnorm(100, mean = -1)
mean(x)
mean(zscore(x))
zscoreByGroup <- function(x, groups){ #Compute zscores within groups out <- rep(NA, length(x)) for(i in unique(groups)){ out[groups == i] <- zscore(x[groups == i]) } return(out) }
x <- c(rnorm(100, mean = -1), rnorm(100, mean = 1))
groups <- c(rep("A",100), rep("B",100))
tapply(x, groups, mean)
tapply(zscore(x), groups, mean)
tapply(zscoreByGroup(x, groups), groups, mean)
Argument Interpretation
R is pretty clever in its interpretation of arguments passed to functions. By default, it will assume that the first argument matches the first defined argment, and the second the second, etc.
bar <- function(a,b,c){ return(c(a = a, b = b, c = c)) }
bar(1,2,3)
bar(4,1,9)
You can also explicitly declare which values get passed to which arguments.
bar(a = 1, c = 3, b = 2)
bar(c = 3, b = 2, a = 1)
Defaults
You can also define default values for arguments.
bar <- function(a=1,b=2,c=3){ return(c(a = a, b = b, c = c)) }
bar()
bar(5)
bar(b = 4)