- •1.Написание собственных функций 3
- •2.Статистические модели в r 18
- •3.Список використаної літератури 41
- •Написание собственных функций
- •Простые примеры
- •Определение новых бинарных операторов
- •Именованные параметры и умолчания
- •Параметр ‘...’
- •Присвоения в пределах функций
- •Более сложные примеры
- •Фактор эффективности при проектировании блоков
- •Отбрасывание всех имен при печатании массива
- •Рекурсивное числовое интегрирование
- •Область действия
- •Настройка окружения
- •Классы, универсальные функции и объектно-ориентированное программирование
- •Статистические модели в r
- •Определение статистических моделей; формулы
- •Примеры
- •Противопоставления
- •Линейные модели
- •Универсальные функции для извлечения информации о модели
- •Vcov(object)
- •Дисперсионный анализ и сравнение модели
- •Таблицы anova
- •Обновление подогнанных моделей
- •Обобщенные линейные модели
- •Семейства
- •Функция glm()
- •Гауссовское семейство
- •Нелинейные наименьшие квадраты и модели наибольшего правдоподобия
- •Наименьшие квадраты
- •Метод максимального правдоподобия
- •Некоторые нестандартные модели
- •Список використаної літератури
Определение новых бинарных операторов
Если дать функции bslash() другое имя, а именно одной из форм: %anything%
то это, возможно, использовалось бы в качестве бинарного оператора в выражениях, а не в форме функции. Предположим, например, мы выбираем ! для внутреннего символа. Определение функции тогда бы начиналось как:
> "%!%" <- function(X, y) { ... }
Заметим использование двойных кавычек. Затем функцию можно использовать как X%!%y. Символ самой наклонной черты влево не удобный выбор, поскольку он представляет специальные проблемы в этом контексте. Оператор умножения матриц %*%, и внешний оператор матрицы произведения %o% являются другими примерами бинарных операторов, определенных таким образом.
Именованные параметры и умолчания
Как сначала отмечено в Разделе 2.3 [Генерация последовательности Коши], если параметры вызванным функциям переданы в форме “name=object”, то их можно передать в любом порядке. Кроме того, последовательность параметров может начинаться без имен, в позиционной форме, и указывать параметры, передаваемые по имени после позиционных параметров.
Таким образом, если существует функция fun1, определенная как:
> fun1 <- function(data, data.frame, graph, limit) {
[тело функции опущено]
}
то функция может быть вызвана несколькими эквивалентными способами, например:
> ans <- fun1(d, df, TRUE, 20)
> ans <- fun1(d, df, graph=TRUE, limit=20)
> ans <- fun1(data=d, limit=20, graph=TRUE, data.frame=df)
Во многих случаях параметрам можно дать обычно соответствующие значения по умолчанию, тогда они могут быть опущены в целом от вызова, когда соответствуют умолчанию. Например, если fun1 была определена как:
> fun1 <- function(data, data.frame, graph=TRUE, limit=20) { ... } то можно было вызвать как: > ans <- fun1(d, df) что эквивалентно трем предыдущим случаям или как:
> ans <- fun1(d, df, limit=10) в котором изменяется один из параметров на умолчания.
Важно отметить, что по умолчанию могут быть произвольными выражениями, даже вовлеченные другими аргументами той же самой функции; они не ограничены быть константами как здесь в нашем простом примере.
Параметр ‘...’
Другое частое требование состоит в предоставлении одной функции передавать установки аргументов другой. Например, много графических функций используют функцию par(), и функции подобную plot(), позволяя пользователю передавать графические параметры par(), чтобы управлять графическим выводом. См. Раздел 12.4.1 [Par() функция], для большего количества деталей о функции par(). Это может быть сделано включением дополнительного параметра функции буквально ‘...’, которая может затем может быть передана. Пример схемы дан ниже.
fun1 <- function(data, data.frame, graph=TRUE, limit=20, ...) {
[пропущенный оператор] if (graph) par(pch="*", ...)
[дальнейшие пропуски]
}
Реже функции необходимо сослаться на компонент ‘…’. Выражение list(….) оценивает все такие параметры и возвращает их в именованном списке, хотя …1, …2, и т.д. оценивает их один раз с возвращением “…n’ для n-го не сопоставленного параметра.
Присвоения в пределах функций
Заметим, что любые обычные присвоения, сделанные в пределах функции, являются локальными и временными и теряются после выхода из функции. Таким образом, присвоение X <-qr (X) не влияет на значение аргумента в вызывающей программе.
Чтобы понять полностью правила, управляющие контекстом присвоений R, читателю необходимо ознакомится с понятием вычисления фрейма. Это несколько углубленное знание, хотя вряд ли сложное, однако тема в дальнейшем не будет здесь рассматриваться.
Если требуются глобальные и постоянные присвоения в пределах функции, то может быть использован или оператор "суперприсвоения" <<-, или функция assign(). Подробнее смотри документацию. Пользователи S-Plus должны знать, что <<- имеет отличающуюся семантику в R . Эти вопросы обсуждаются далее в Разделе 10.7 [Контекст].