# 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[[2]]`

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.*