Skip to content

R course, Lecture 2

esengie edited this page Oct 24, 2013 · 1 revision

Занятие 2. Основные используемые функции. Операции над векторами. Операции над матрицами.

Математические функции R.

  1. Простейшие
  • Модуль и знак числа: abs(), sign()
  1. Аналитические
  • Степенные:
    • Степень: x^n
    • exp(), log(), sqrt()
    • expm1(x) === exp(x) - 1 и log1p(x) === log(1 + x) более точны при |X| << 1.
    • Логарифмы по двоичному, десятичному и произвольному основанию: log2(), log10(), logb(x, base).
  • Тригонометрические: sin(), cos(), tan()
  • Гиперболические: sinh(), cosh(), tanh()
  • Обратные к ним: asin(), acos(), atan(), atan2(x, y), asinh(), acosh(), atanh()
  • Все данные функции векторизованы и верно работают на комплексных значениях.
  1. Комбинаторные
  • Число сочетаний из n по k: choose(n, k). При этом n не обязательно целое (в отличие от k, которое всегда целое).
  • Факториал: factorial(x). Внутри вызывает gamma(x + 1).
  • Гамма-функция: gamma(x). Подробнее про нее: Gamma function.
  • Эти функции векторизованы, но для комплексного переменного не не имеют смысла
  1. Комплексного переменного
  • Модуль и аргумент числа: Mod(z), Arg(z). Данные функции связаны следующим отношением со своим аргументом: Mod(Z) * exp(Arg(Z)) === Z.
  • Комплексное сопряжение: Conj(z).
  • Функции также векторизованы, разумеется.
  1. Полезные константы
  • Пи: pi = 3.1415...
  • .Machine$double.eps --- наименьшее положительное число, такое что 1 + .Machine$double.eps != 1. Для сравнения вещественных чисел следует использовать tolerance .Machine$double.eps^.5 (по умолчанию в all.equal() именно такой)
  • Сведения о текущей платформе: .Machine. Подробнее здесь.
  • Сведения о версии R: version

Функции над векторами.

  1. Общие сведения
  • Большинство приведённых функций обладает аргументом na.rm, указывающим, отбрасывать NA (na.rm = TRUE), или учитывать его (na.rm = FALSE, по умолчанию).
  • Проверка значений в векторе на адекватность: is.finite(x) вернёт TRUE на позиции числа, если число адекватное (не является ничем из -Inf, Inf, NA, NaN, 1i*Inf).
  • Выкинуть из вектора все неконечные значения: v <- v[is.finite[v].
  1. Основные скалярнозначные функции
  • Длина вектора: length(v), работает на присваивание.
  • Максимум, минимум, сумма, произведение: max(), min(), sum(), prod(). Если передано несколько векторов, то они объединяются и по объединенным считается функция.
  • range() возвращает вектор из минимума и максимума, то есть range(v) === c(min(v), max(v)).
  • Индекс первого максимального элемента:which.max(v). Минимального: which.min(v).
  1. Основные векторнозначные функции
  • rev() переворачивает вектор задом наперёд.
  • sort() сортирует элементы вектора. По умолчанию элементы сортируются по возрастанию. Параметр decreasing = TRUE задает сортировку по убыванию.
  • order() возвращает перестановку, которая упорядочивает вектор. Сортировка стабильная.
  • rank() возвращает ранг (номер в переупорядоченном ряду) каждого элемента в векторе. Отличается от order() тем, что позволяет задавать реакцию на совпадающие элементы.
  • unique() выбросит все повторы, оставив первые вхождения.
  • sample() перемешивает элементы вектора в случайном порядке.
  • which() принимает на вход логический вектор, возвращает вектор, содержащий индексы истинных аргументов.
  • pmin(v1, v2, v3,...), pmax(v1, v2, v3, ...) параллельное покомпонентное вычисление максимумов или минимумов для нескольких векторов.
  • diff(v) возвращает вектор из разностей соседних элементов. diff(v) === v[-1] - v[-length(v)].
  • Накопленные суммы, произведения, минимумы и максимумы: cumsum(), cumprod(), cummin(), cummax().
  1. Статистические функции.
  • Среднее, дисперсия, стандартное отклонение: mean(), var(), sd(). Подробнее: Дисперсия случайной величины, Среднеквадратичное отклонение.
  • Медиана, медианное абсолютное отклонение: median(), mad().
  • quantile(h, levels) возвращает вектор из квантилей уровней levels для выборки h.
  • summary(v) для вектора выводит min(v), max(v), mean(v), quantile(v, c(0.25, 0.5, 0.75)).
  • В пакете e1071 асимметрия и эксцесс: skewness(), kurtosis(). Подробнее: Skewness, Kurtosis.
  • table(h) возвращает именованный вектор частот. Имена --- СТРОКОВОЕ представление соответствующих элементов.
    Пример:
    tbl <- table(c(0, 1, 2, 3, 3, 2, 2, 2, 2, 0))
    tbl[3] --- частота третьего по величине элемента (т.е. количество двоек, 5)
    tbl["3"] --- частота троек (т.е. количество троек, 2)
    Если вы хотите найти количество вхождений числового значения, заданного переменной, используйте as.character()

Матрицы (продолжение)

  1. Содание матрицы:
  • mx <- matrix(data, nrow, ncol, byrow = FALSE). Параметр byrow определяет способ укладки вектора data в матрицу, по умолчанию развертка развёртка по столбцам.
  1. Способы доступа к элементам матрицы, экзотические:
  • mx[логическая матрица] вернет вектор из элементов, значение в логической матрице для которых TRUE. Работает на присваивание.
  • mx[матрица из двух столбцов] элементы строки подаваемой матрицы являются парами индексов выбираемых элементов. Работает на присваивание.
  1. Основные функции:
  • dim(mx) получает размерность матрицы, работает на присваивание. При изменении матрица "переразвернется" из вектора, вытянутого по столбцам.
  • Транспонирование матрицы: t(mx).
  • Определитель матрицы: det(mx).
  • Обратная матрица: solve(mx).
  • Решение системы ЛУ A %*% x = y: solve(A, y), y может быть матрицей.
  • Поэлементное умножение матриц: mx1 * mx2.
  • Алгебраическое умножение матриц: mx1 %*% mx2. Вектор считается вектором-столбцом, но при умножении вектора на матрицу справа вектор транспонируется автоматически. Перемножение векторов как матриц интерпретируется как умножение строки на столбец, и результат --- число.
  • crossprod(mx1, mx2) эквивалентно t(mx1) %*% mx2, но немного быстрее. Если второй аргумент упущен, то он считается равным первому.
  • tcrossprod(mx1, mx2) эквивалентно mx1 %*% t(mx2), аналогично предыдущему.
  • outer(v1, v2) интерпретирует умножение векторов, как умножение столбца на строку, и результат --- матрица. Аналогично (но немного быстрее) работает tcrossprod(v1, v2) для двух векторов.
  • diag ведет себя по-разному в зависимости от типа аргумента:
    • diag(N) единичная матрица N-ого порядка.
    • diag(v) диагональная матрица с элементами вектора v на диагонали.
    • diag(mx) диагональ матрицы mx, работает на присваивание. След матрицы: sum(diag(mx)). trace() --- это вообще про другое.
  • rbind(), cbind() склеивание матриц по строкам или по столбцам. Если какая-то из матриц недостаточной длины, то будет использоваться переписывание. Вектор будет автоматически повернут вдоль направления склейки. На примитивном восприятии, rbind() склеивает матрицы, прилепливая вторую снизу, cbind() склеивает матрицы, прилепливая вторую справа. Можно склеивать и несколько матриц, не обязательно строго две.
  • Средние и суммы по столбцам и строкам: colSums() colMeans() rowSums() rowMeans().
  1. Матричные разложения Для понимания следующих функций стоит прочесть это или здесь, по-русски и проще.
  • EVD-разложение матрицы: eigen(mx). Матрица должна быть квадратной. Для симметричной матрицы решается symmetric EVD problem, собственные вектора и собственные числа будут вещественными. Для несимметричной результат будет в общем случае комплексный. Возвращает список из вектора собственных чисел (values) и матрицы собственных векторов (vectors). Параметр symmetric = TRUE (по умолчанию, FALSE) заставляет решать симметричную задачу без проверки входной матрицы на симметричность. С установленным параметром only.values = TRUE функция работает чуть быстрее, но возвращает только собственные значения.
  • QR-разложение QR decomposition: qr(mx). Матрица должна быть квадратной. На выходе --- QR-разложение в запакованном виде, если нужно получить отдельно Q или R: qr.dec <- qr(A); qr.Q(qr.dec); qr.R(qr.dec)
  • SVD-разложение Singular value decomposition: svd(mx).
  • Разложение Холецкого: Cholesky decomposition: chol(mx). Матрица должна быть квадратной и симметричной.