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

    1. Группирующие выражения

R - язык выражения в том смысле, что его единственный тип команды - функция или выражение, которое возвращает результат. Даже присвоение - выражение, результат которого присвоенное значение, и это может использоваться везде, где любое выражение может использоваться; в особенности при множественных присвоениях.

Команды могут группироваться в фигурных скобках, {expr_1;...; expr_m},когда значение группы - результат последнего выражения в оцененной группе. Так как такая группа - также выражение, то она может быть, например, включена в круглые скобки и использоваться как часть еще большего выражения и так далее.

    1. Проверка утверждения

      1. Условное выполнение: операторы if

В языке доступны условные конструкции в виде: > if (expr_1) expr_2 else expr_3

где expr 1оценивается к единственному логическому значению, и результат всего выражения тогда очевиден.

Операторы "короткого цикла" &&и || часто используются в качестве части условия в оператореif. Примем во внимание, что&и | применяются поэлементно к векторам,&& и || применяются к векторам длины один, и оценивают лишь их второй параметр в случае необходимости.

Есть векторная версия конструкция if/else, функцияifelse.Имеется форма ifelse(condition, a, b), которая возвращает вектор длины его самого длинного параметра, с элементамиa[i],еслиcondition[i]является истиной, иначеb[i].

      1. Повторное выполнение: for, loops, repeat и while

Также имеется конструкция цикла for, у которой есть форма:> for (name in expr_1) expr_2

где name- переменная цикла.expr_1является векторным выражением (часто последовательность как 1:20), иexpr_2часто является сгруппированным выражением со своими подвыражениями, записанными с точки зрения фиктивного имени.expr_2неоднократно оценивается, посколькуnameимеет значение в пределах векторного результатаexpr_1.

Как пример, предположим, что ind- вектор индикаторов класса, и мы хотим произвести отдельные рисункиyпротивx в пределах классов. Одна возможность здесь состоит в том, чтобы использоватьcoplot(),который произведет массив рисунков, соответствующих каждому уровню фактора. Другой способ сделать это - поместить все рисунки в один вывод следующими операторами:

> xc <- split(x, ind)

> yc <- split(y, ind) > for (i in 1:length(yc)) { plot(xc[[i]], yc[[i]]) abline(lsfit(xc[[i]], yc[[i]])) }

Заметим, что функция split(), которая производит список векторов, полученных разделением большого вектора согласно классам, указанным фактором. Это полезная функция, главным образом используемая в соединении сboxplots. См. справочное средство для получения дальнейшей информации.

Предупреждение: циклы for()используются в коде R намного менее часто, чем на языках компилирующего типа. Код, который получает ‘целый объект’ представление ‘целый объект’, вероятно, будет и более четким и быстрее в R . Другие средства цикличного выполнения включают оператор: > repeat expr и оператор

> while (condition) expr

Оператор breakможет использоваться для завершения любого цикла, возможно неправильно. Это - единственный способ завершить зацикливание.

Оператор nextможет использоваться, чтобы прекратить один определенный цикл и перейти к "следующему".

Управляющие утверждения чаще всего используются в соединении с функциями, которые обсуждаются в Главе 10 [Написание собственных функций], и где имеется больше примеров.

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