Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
RCoreTeam2014.docx
Скачиваний:
46
Добавлен:
08.10.2015
Размер:
539.13 Кб
Скачать
    1. Именованные параметры и умолчания

Как сначала отмечено в Разделе 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) в котором изменяется один из параметров на умолчания.

Важно отметить, что по умолчанию могут быть произвольными выражениями, даже вовлеченные другими аргументами той же самой функции; они не ограничены быть константами как здесь в нашем простом примере.

    1. Параметр ‘...’

Другое частое требование состоит в предоставлении одной функции передавать установки аргументов другой. Например, много графических функций используют функцию 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-гоне сопоставленного параметра.

    1. Присвоения в пределах функций

Заметим, что любые обычные присвоения, сделанные в пределах функции, являются локальными и временными и теряются после выхода из функции. Таким образом, присвоение X <-qr (X) не влияет на значение аргумента в вызывающей программе.

Чтобы понять полностью правила, управляющие контекстом присвоений R,читателю необходимо ознакомится с понятием вычисления фрейма. Это несколько углубленное знание, хотя вряд ли сложное, однако тема в дальнейшем не будет здесь рассматриваться.

Если требуются глобальные и постоянные присвоения в пределах функции, то может быть использован или оператор "суперприсвоения" <<-, или функция assign(). Подробнее смотри документацию. Пользователи S-Plus должны знать, что <<- имеет отличающуюся семантику в R . Эти вопросы обсуждаются далее вРазделе 10.7 [Контекст].

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]