понедельник, 3 июня 2013 г.

Функции в R

Блог переехал. Актуальная версия поста находится по адресу: http://aakinshin.net/ru/blog/r/functions/.


В R очень много разных полезных функций. И многие большие вещи можно сделать весьма быстро, написав очень мало кода. На официальном сайте есть замечательная шпаргалка на английском языке: R reference card. В сети есть несколько вольных урезанных переводов, но они не очень удобные. Ниже вашему вниманию представляется русифицированная модифицированная версия обзора основных функций R. Команды снабжены ссылками на online-мануал.

Помощь

help(topic), ?topic — справка про topic
help.search("pattern"), ??pattern — глобальный поиск pattern
help(package = ) — справка о заданном пакете
help.start() — запустить помощь в браузере
apropos(what) — имена объектов, которые соответствуют what
args(name) — аргументы команды name
example(topic) — примеры использования topic

Текущее окружение

ls() — список всех объектов
rm(x) — удалить объект
dir() — показать все файлы в текущей директории
getwd() — получить текущую директорию
setwd(dir) — поменять текущую директорию на dir

Общая работа с объектами

str(object) — внутренняя структура объекта object
summary(object) — общая информация об объекте object
dput(x) — получить представление объекта в R-синтаксисе
head(x) — посмотреть начальные строки объекта
tail(x) — посмотреть последние строки объекта

Ввод и вывод

library(package) — подключить пакет package
save(file, ...) — сохраняет указанные объекты в двочином XDR-формате, который не зависит от платформы
load() — загружает данные, сохранённые ранее с помощью команды save()
read.table — считывает таблицу данных и создаёт по ним data.frame
write.table — печатает объект, конвертируя его в data.frame
read.csv — считывает csv-файл
read.delim — считывание данных, разделённых знаками табуляции
save.image — сохраняет все объекты в файл
cat(..., file= , sep= ) — сохраняет аргументы, конкатенируя их через sep
sink(file) — выводит результаты выполнения других команд в файл в режиме реального времени до момента вызова этой же команды без аргументов

Создание объектов

from:to — генерирует последовательность чисел от from до to с шагом 1, например 1:3
с(...) — объединяет аргументы в вектор, например c(1, 2, 3)
seq(from, to, by = ) — генерирует последовательность числел от from до to с шагом by
seq(from, to, len = ) — генерирует последовательность числел от from до to длины len
rep(x, times) — повторяет x ровно times раз
list(...) — создаёт список объектов
data.frame(...) — создаёт фрейм данных
array(data, dims) — создаёт из data многомерные массив размерностей dim
matrix(data, nrow = , ncol = , byrow = ) — создаёт из data матрицу nrow на ncol, порядок заполнения определяется byrow
factor(x, levels = ) — создаёт из x фактор с уровнями levels
gl(n, k, length = n*k, labels = 1:n) — создаёт фактор из n уровней, каждый из которых повторяется k раз длины length с именами labels
rbind(...) — объединяет аргументы по строкам
cbind(...) — объединяет аргументы по столбцам

Индексирование

Векторы

x[n] n-ый элемент
x[-n] все элементы, кроме n-го
x[1:n] первые n элементов
x[-(1:n)] все элементы, кроме первых n
x[c(1,4,2)] элементы с заданными индексами
x["name"] элемент с заданным именем
x[x > 3] все элементы, большие 3
x[x > 3 & x < 5] все элементы между 3 и 5
x[x %in% c("a","and","the")]все элементы из заданного множества

Списки

x[n] список, состоящий из элемента n
x[[n]] n-ый элемент списка
x[["name"]] элемент списка с именем name
x$name элемент списка с именем name

Матрицы

x[i, j] элемент на пересечении i-ой строки и j-го столбца
x[i,] i-ая строка
x[,j] j-ый столбец
x[,c(1,3)] заданное подмножество столбцов
x["name", ] строка с именем name

Фреймы

x[["name"]] столбец с именем name
x$name столбец с именем name

Работа с переменными

as.array(x), as.data.frame(x), as.numeric(x), as.logical(x), as.complex(x), as.character(x) — преобразование переменной к заданному типу is.na(x), is.null(x), is.array(x), is.data.frame(x), is.numeric(x), is.complex(x), is.character(x) — проверка на то, что данный объект обладает указанным типом
length(x) — число элементов в x
dim(x) — размерности объекта x
dimnames(x) — имена размерностей объекта x
nrow(x) — число строк x
ncol(x) — число столбцов x
class(x) — класс объекта x
unclass(x) — удаляет атрибут класса у объекта x
attr(x,which) — атрибут which объекта x
attributes(obj) — список атрибутов объекта obj

Манипуляция данными

which.max(x) — индекс элемента с максимальным значением
which.min(x) — индекс элемента с минимальным значением
rev(x) — реверсирует порядок элементов
sort(x) — сортирует элементы объекта по возрастанию
cut(x,breaks) — делит вектор на равные интервалы
match(x, y) — ищет элементы x, которые есть в y
which(x == a) — возвращает порядковые элементы x, которые равны a
na.omit(x) — исключает отсутствующие значения объекта
na.fail(x) — бросает исключение, если объект содержит отсутствующие значения
unique(x) — исключает из объекта повторяющиеся элементы
table(x) — создаёт таблицу с количеством повторений каждого уникального элемента
subset(x, ...) — возвращает подмножество элемента, которое соответствует заданному условию
sample(x, size) — возвращает случайный набор размера size из элементов x

Математика

sin(x), cos(x), tan(x), asin(x), acos(x), atan(x), atan2(y, x), log(x), log(x, base), log10(x), exp(x) — элементарные математические функции
min(x), max(x) — минимальный и максимальный элементы объекта
range(x) — вектор из минимального и максимального элемента объекта
pmin(x, y), pmax(x, y) — возвращают вектор с минимальными (максимальными) для каждой пары x[i], y[i]
sum(x) — сумма элементов объекта
prod(x) — произведение элементов объекта
diff(x) — возвращает вектор из разниц между соседними элементами
mean(x) — среднее арифметическое элементов объекта
median(x) — медиана (средний элемент) объекта
weighted.mean(x, w) — средневзвешенное объекта x (w определяет веса)
round(x, n) — округляет x до n знаков после запятой
cumsum(x), cumprod(x), cummin(x), cummax(x) — кумулятивные суммы, произведения, минимумы и максимумы вектора x (i-ый элемент содержит статистику по элементам x[1:i])
union(x, y), intersect(x, y), setdiff(x,y), setequal(x,y), is.element(el,set) — операции над множествами: объединение, пересечение, разность, сравнение, принадлежность
Re(x), Im(x), Mod(x), Arg(x), Conj(x) — операции над комплексными числами: целая часть, мнимая часть, модуль, аргумент, сопряжённое число
fft(x), mvfft(x) — быстрое преобразование Фурье
choose(n, k) — количество сочетаний
rank(x) — ранжирует элементы объекта

Матрицы

%*% — матричное умножение
t(x) — транспонированная матрица
diag(x) — диагональ матрицы
solve(a, b) — решает систему уравнений a %*% x = b
solve(a) — обратная матрица
colSums, rowSums, colMeans, rowMeans — суммы и средние по столбцам и по строкам

Обработка данных

apply(X,INDEX,FUN=) — возвращает вектор, массив или список значений, полученных путем применения функции FUN к определенным элементам массива или матрицы x; подлежащие обработке элементы х указываются при помощи аргумента MARGIN;
lapply(X,FUN) — возвращает список той же длины, что и х; при этом значения в новом списке будут результатом применения функции FUN к элементам исходного объекта х
tapply(X,INDEX,FUN=) — применяет функцию FUN к каждой совокупности значений х, созданной в соответствии с уровнями определенного фактора; перечень факторов указывается при помощи аргумента INDEX
by(data,INDEX,FUN) — аналог tapply(), применяемый к таблицам данных
merge(a,b) — объединяет две таблицы данных (а и b) по общим столбцами или строкам
aggregate(x,by,FUN) — разбивает таблицу данных х на отдельные наборы данных, применяет к этим наборам определенную функцию FUN и возвращает результат в удобном для чтения формате
stack(x, ...) — преобразует данные, представленные в объекте х в виде отдельных столбцов, в таблицу данных
unstack(x, ...) — выполняет операцию, обратную действию функции stack()
reshape(x, ...) — преобразует таблицу данных из "широкого формата" (повторные измерения какой-либо величины записаны в отдельных столбцах таблицы) в таблицу "узкого формата" (повторные измерения идут одно под одним в пределах одного столбца)

Строки

print(x) — выводит на экран x
sprintf(fmt, ...) — форматирование текста в C-style (можно использовать %s, %.5f и т.п.)
format(x) — форматирует объект x так, чтобы он выглядел красиво при выводе на экран
paste(...) — конвертирует векторы в текстовые переменные и объединяет их в одно текстовое выражение
substr(x,start,stop) — получение подстроки
strsplit(x,split) — разбивает строку х на подстроки в соответствии с split
grep(pattern,x) — поиск по регулярному выражению
gsub(pattern,replacement,x) — замена по регулярному выражению
tolower(x) — привести строку к нижнему регистру
toupper(x) — привести строку к верхнему регистру
match(x,table), x %in% table — выполняет поиск элементов в векторе table, которые совпадают со значениями из вектора х
pmatch(x,table) — выполняет поиск элементов в векторе table, которые частично совпадают с элементами вектора х
nchar(x) — возвращает количество знаков в строке х

Дата и время

as.Date(s) — конвертирует вектор s в объект класса Date
as.POSIXct(s) — конвертирует вектор s в объект класса POSIXct

Рисование графиков

plot(x) — график x
plot(x, y) — график зависимости y от x
hist(x) — гистограмма
barplot(x) — столбчатая диаграмма
dotchart(x) — диаграмма Кливленда
pie(x) — круговая диаграмма
boxplot(x) — график типа "коробочки с усами"
sunflowerplot(x, y) — то же, что и plot(), однако точки с одинаковыми координатами изображаются в виде "ромашек", количество лепестков у которых пропорционально количеству таких точек
coplot(x˜y | z) — график зависимости y от x для каждого интервала значений z
interaction.plot(f1, f2, y) — если f1 и f2 — факторы, эта фукнция создаст график со средними значениями y в соответствии со значениями f1 (по оси х) и f2 (по оси у, разные кривые)
matplot(x, y) — график зависимости столбцов y от столбцов x
fourfoldplot(x) — изображает (в виде частей окружности) связь между двумя бинарными переменными в разных совокупностях
assocplot(x) — график Кохена-Френдли
mosaicplot(x) — мозаичный график остатков лог-линейной регрессии
pairs(x) — если х - матрица или таблица данных, эта функция изобразит диаграммы рассеяния для всех возможных пар переменных из х
plot.ts(x),ts.plot(x) — изображает временной ряд
qqnorm(x) — квантили
qqplot(x, y) — график зависимости квантилей y от квантилей х
contour(x, y, z) — выполняет интерполяцию данных и создает контурный график
filled.contour(x, y, z) — то же, что contour(), но заполняет области между контурами определёнными цветами
image(x, y, z) — изображает исходные данные в виде квадратов, цвет которых определяется значениями х и у
persp(x, y, z) — то же, что и image(), но в виде трехмерного графика
stars(x) — если x - матрица или таблица данных, изображает график в виде "звезд" так, что каждая строка представлена "звездой", а столбцы задают длину сегментов этих "звезд"
symbols(x, y, ...) — изображает различные символы в соответствии с координатами
termplot(mod.obj) — зображает частные эффекты переменных из регрессионной модели

Рисование графиков на низком уровне

points(x, y) — рисование точек
lines(x, y) — рисование линии
text(x, y, labels, ...) — добавление текстовой надписи
mtext(text, side=3, line=0, ...) — добавление текстовой надписи
segments(x0, y0, x1, y1) — рисование отрезка
arrows(x0, y0, x1, y1, angle= 30, code=2) — рисование стрелочки
abline(a,b) — рисование наклонной прямой
abline(h=y) — рисование вертикальной прямой
abline(v=x) — рисование горизонтальной прямой
abline(lm.obj) — рисование регрессионной прямой
rect(x1, y1, x2, y2) — рисование прямоугольника
polygon(x, y) — рисование многоугольника
legend(x, y, legend) — добавление легенды
title() — добавление заголовка
axis(side, vect) — добавление осей
rug(x) — рисование засечек на оси X
locator(n, type = "n", ...) — возвращает координаты на графике, в которые кликнул пользователь

Lattice-графика

xyplot(y˜x) — график зависимости у от х
barchart(y˜x) — столбчатая диаграмма
dotplot(y˜x) — диаграмма Кливленда
densityplot(˜x) — график плотности распределения значений х
histogram(˜x) — гистограмма значений х
bwplot(y˜x) — график типа "коробочки с усами"
qqmath(˜x) — аналог функции qqnorm()
stripplot(y˜x) — аналог функции stripplot(x)
qq(y˜x) — изображает квантили распределений х и у для визуального сравнения этих распределений; переменная х должна быть числовой, переменная у - числовой, текстовой, или фактором с двумя уровнями
splom(˜x) — матрица диаграмм рассеяния (аналог функции pairs())
levelplot(z˜x*y|g1*g2) — цветной график значений z, координаты которых заданы переменными х и у (очевидно, что x, y и z должны иметь одинаковую длину); g1, g2... (если присутствуют) — факторы или числовые переменные, чьи значения автоматически разбиваются на равномерные отрезки
wireframe(z˜x*y|g1*g2) — функция для построения трехмерных диаграмм рассеяния и плоскостей; z, x и у - числовые векторы; g1, g2... (если присутствуют) - факторы или числовые переменные, чьи значения автоматически разбиваются на равномерные отрезки
cloud(z˜x*y|g1*g2) — трёхмерная диаграмма рассеяния

Оптимизация и подбор параметров

optim(par, fn, method = ) — оптимизация общего назначения
nlm(f,p) — минимизация функции f алгоритмом Ньютона
lm(formula) — подгонка линейной модели
glm(formula,family=) — подгонка обобщённой линейной модели
nls(formula) — нелинейный метод наименьших квадратов
approx(x,y=) — линейная интерполяция
spline(x,y=) — интерполяция кубическими сплайнами
loess(formula) — подгонка полиномиальной поверхности
predict(fit,...) — построение прогнозов
coef(fit) — расчётные коэффициенты

Статистика

sd(x) — стандартное отклонение
var(x) — дисперсия
cor(x) — корреляционная матрица
var(x, y) — ковариация между x и y
cor(x, y) — линейная корреляция между x и y
aov(formula) — дисперсионный анализ
anova(fit,...) — дисперсионный анализ для подогнанных моделей fit
density(x) — ядерные плотности вероятностей
binom.test() — точный тест простой гипотезы о вероятности успеха в испытаниях Бернулли
pairwise.t.test() — попарные сравнения нескольки независимых или зависимых выборок
prop.test() — проверка гипотезы о том, что частоты какого-либо признака равны во всех анализируемых группах
t.test() — тест Стьюдента

Распределения

rnorm(n, mean=0, sd=1) — нормальное распределение
rexp(n, rate=1) — экспоненциальное распределение
rgamma(n, shape, scale=1) — гамма-распределение
rpois(n, lambda) — распределение Пуассона
rweibull(n, shape, scale=1) — распределение Вейбулла
rcauchy(n, location=0, scale=1) — распределение Коши
rbeta(n, shape1, shape2) — бета-распределение
rt(n, df) — распределение Стьюдента
rf(n, df1, df2) — распределение Фишера
rchisq(n, df) — распределение Пирсона
rbinom(n, size, prob) — биномиальное распределение
rgeom(n, prob) — геометрическое распределение
rhyper(nn, m, n, k) — гипергеометрическое распределение
rlogis(n, location=0, scale=1) — логистическое распределение
rlnorm(n, meanlog=0, sdlog=1) — логнормальное распределение
rnbinom(n, size, prob) — отрицательное биномиальное распределение
runif(n, min=0, max=1) — равномерное распределение

Программирование

Работа с функциями:
   function(arglist) { expr } — создание пользовательской функции
   return(value) — возвращение значения
   do.call(funname, args) — вызывает функцию по имени
Условные операторы:    if(cond) expr
   if(cond) cons.expr else alt.expr
   ifelse(test, yes, no)
Циклы:    for(var in seq) expr
   while(cond) expr
   repeat expr
   break — остановка цикла
   next — переход к следующей итерации