Шрифт
Занятие 3. Вывод сообщения на экран. Циклы. Операторы условия. Функция assign().
Play

Занятие 3. Вывод сообщения на экран. Циклы. Операторы условия. Функция assign().

В R для вывода сообщения на экран есть две команды: print() и cat() .

При желании, если используем print() , кавычки в выдаче можно убрать, скорректировав параметр quote:

Команда cat() позволяет не только выводить на экран уже “готовые” элементы, но и склеивать выдачу из нескольких:

Кавычки (внешние или внутренние) могут быть любые, но если в тексте уже встречаются кавычки, то одни кавычки должны быть одинарные, а другие двойные.

Можно выводить каждый элемент с новой строки или с отступом (табуляция):

Конкатенация (склевание) строк:

Циклы

Часто, чтобы повторять действия в R и при этом не копировать одни и те же команды много раз, используются циклы. Есть два цикла: цикл for и цикл while.

Цикл for

Пусть у нас есть вектор u:

Нам нужно вывести все элементы вектора на экран. Для этого надо пройтись по каждому элемента вектора u и выполнить команду cat() :

То, по чему итерируем (пробегаемся), указывается в круглых скобках, а то, что делаем в ходе цикла - в фигурных.

Для перебора можно задействовать не только векторы, но и просто промежутки (аналог range() в Python).

Цикл while

Цикл while устроен немного по-другому: действие повторяется до тех пор, пока выполняется некоторое условие.

Условия с if и else

Пусть у нас есть вектор w, состоящий из нулей и единиц, и мы хотим по очереди проверять каждый элемент и выводить на экран “yes”, если он равен 1 и “no”, если он равен 0.

Для этого помимо цикла нам понадобятся операторы условия if и else. Конструкция с if устроена следующим образом: после if в круглых скобках указывается условие, затем прописывается, что необходимо сделать, если это условие выполняется.

При этом необязательно, чтобы else был всегда, все зависит от задачи. Например, выведем только те элементы вектора q, которые больше 5:

Если есть более сложные, разветвленные условия, то они просто указываются друг за другом. Если необходимо использовать множественные условия (например, какие-то два условия должны выполняться одновременно), то потребуются те же символы, которые используются в логических выражениях (&, |). Рассмотрим следующий пример.

Пусть у нас есть список (вектор) оценок студентов.

И мы хотим на каждую оценку выдать какой-нибудь комментарий (“хорошо”, “плохо”, “отлично” и др.). Это можно сделать следующим образом:

Конечно, в данном примере можно было обойтись без else. Он включен в пример только для того, чтобы показать, что при использовании разветвленных условий никакого нагромождения скобок не требуется.

Функция assign()

Иногда возникает необходимость создавать переменные (векторы) с похожими названиями, например, group1, group2, group3 и так далее. Если бы названия переменных были бы обычными строками (текстом), это выглядело бы просто:

Но в случае с переменными все не так. Нужно не только создать определенное название, но и сообщить R, что это переменная, которой будет присваиваться значение. Для этого используется функция assign() . Создадим четыре переменных group1 - group4 и присвоим им значения от 1 до 4 соответственно.

Теперь можно проверить, создались ли нужные нам переменные:

Функция assign() удобна тем, что она используется для присвоения значений совсем разным объектам (переменным, векторам, матрицам и целым базам данных) и при этом тип объекта специально указывать не нужно. Если бы мы хотели создать векторы group1 - group4 и заполнить их числами от 1 до 10, то выглядело это бы почти так же, как и в примере выше:

Чтобы объединить все, что было рассмотрено на этом занятии, рассмотрим более жизненные примеры - задачи, с которыми можно столкнуться, работая с реальными данными.

Задача 1. Пусть у нас есть данные по некоторым социально-экономическим показателям в регионах за несколько лет (2000-2012 годы). Нас интересуют 25 регионов. Переменная year в базе данных, которую можно рассматривать как вектор, выглядит следующим образом:

В исследовании нам нужно сравнить социально-экономические показатели регионов до 2004 года включительно и после 2004 (например, оцениваем эффект какой-нибудь реформы и перед построением более сложных моделей хотим просто сравнить величины). Для этого нам понадобится создать переменную, которая будет выполнять роль классификатора: принимать значение 0, если год не превышает 2004, и 1 - в противном случае.

Для начала создадим вектор из пропущенных значений (NA) такой же длины, что и year:

А теперь с помощью цикла и условий будем его заполнять:

Выведем первые 26 элементов нового вектора bin и убедимся, что у нас получилось то, что нужно - бинарная переменная для года:

Задача 2. Предположим, что был проведен какой-то опрос среди молодежи. Опрашивались респонденты в возрасте от 16 до 27 лет. Есть следующее деление на возрастные группы: 16-18, 19-21, 22-24, 25-27. У нас есть список возрастов респондентов, и мы хотим понять, сколько представителей каждой возрастной группы было опрошено. При этом мы хотим не только их посчитать, но и сохранить их отдельным списком для каждой группы. Другими словами, для каждой возрастной группы мы хотим создать вектор и узнать его длину.

📎📎📎📎📎📎📎📎📎📎