# The shortest introduction to R

Wednesday January 1, 2014

R is a curly brace language. It uses "`<-`" for assignment. Dots are allowed in names and don't indicate structure. Arguments are both positional and named and can be defaulted.

``````subtract <- function(first.arg, second.arg = 3) {
return(first.arg - second.arg)
}``````

Now `subtract(5, 1)` returns `4`, as does `subtract(second.arg=1, first.arg=5)`, and `subtract(5)` returns `2`.

This prints the numbers 1 to 10, inclusive:

``````for (i in 1:10) {
print(i)
}``````

Data lives in vectors - lists of values of the same type. The types are logical (`TRUE` or `FALSE`), numeric, and character (string). Vectors are put together with the function `c()`, which coerces and collapses things, so these two character vectors are the same:

``````c(1, 2, "three", 4, 5)
c(1, c(2, "three", c(4, 5)))``````

Just about everything in R happens element-wise on vectors. Shorter vectors are recycled (repeated) to provide enough elements when needed. So `subtract(c(10, 100))` will return `c(7, 97)`.

The heavily used data frame is essentially a list of vectors.

``````x <- data.frame(col.one=c(1, 1, 2, 3, 5), col.two=6:10)
x``````
```  col.one col.two
1       1       6
2       1       7
3       2       8
4       3       9
5       5      10```

You can get the first row of `x` with `x[1, ]`. You can get the second column of `x` with `x[, 2]`, `x[]` or `x\$col.two`.

You can select elements from vectors with logicals or index numbers. These both return `c(9, 10)`:

``````x\$col.two[x\$col.two > 8]
x\$col.two[c(4, 5)]``````

You can get help with `help()` or the shortcut, `?`. For example, `?read.csv` or `help(plot)`. There's also search functionality, but I recommend using the internet instead.

This introduction is designed to maximize utility over length, and does so by leaving some things out. I recommend John Cook's online R programming for those coming from other languages for a slightly expanded view, and Norman Matloff's book The Art of R Programming for a proper introduction with examples and applications.

This post was originally hosted elsewhere.