- Объекты, предназначенные для хранения данных («data objects») – это векторы, матрицы и массивы, списки, факторы, таблицы данных;
- Функции («function objects») – это поименованные программы, предназначенные для выполнения определенных действий над другими объектами.
В этом сообщении расмотрены векторы, способы их создания в R, а также основные операции над ними.
Вектор представляет собой поименованный одномерный объект, содержащий набор однотипных элементов (числовые, логические, либо текстовые значения - никакие сочетания не допускаются). Для создания векторов небольшой длины в R используется т.н. функция конкатенации c() (от "concatenate" – объединять, связывать). В качестве аргументов этой функции через запятую перечисляют объединяемые в вектор значения, например:
my.vector <- c(1, 2, 3, 4, 5) my.vector [1] 1 2 3 4 5
Вектор можно создать также при помощи функции scan(), которая "считывает" последовательно вводимые с клавиатуры значения:
X <- scan() 1: 2.9 # после каждого нового значения нажать клавишу "Ввод" 2: 3.1 3: 3.4 4: 3.4 5: 3.7 6: 3.7 7: 2.8 8: 2.5 9: # выполнение команды scan завершают введением пустой строки Read 8 items # программа сообщает о считывании 8 значений X [1] 2.9 3.1 3.4 3.4 3.7 3.7 2.8 2.5
Один из недостатков создания векторов при помощи функции scan() состоит в том, что если при вводе значений с клавиатуры допущена ошибка, то придется либо начать ввод заново, либо воспользоваться специальными инструментами корректировки (например, функцией fix(); здесь эти способы не рассматриваются).
Для создания векторов, содержащих совокупность последовательных чисел, удобна функция seq() (от "sequence" – последовательность). Так, вектор с именем S, содержащий совокупность целых чисел от 1 до 7, можно создать следующим образом:
S <- seq(1,7) S [1] 1 2 3 4 5 6 7
Идентичный результат будет получен при помощи команды
S <- 1:7 S [1] 1 2 3 4 5 6 7
В качестве дополнительного аргумента функции seq() можно задать шаг приращения чисел:
Векторы, содержащие одинаковые значения, создают при помощи функции rep() (от "repeat" – повторять). Например, для формирования текстового вектора Text, содержащего пять значений "test", следует выполнить команду
Text <- rep("test", 5)
Text <- rep("test", 5)
Text [1] "test" "test" "test" "test" "test"
Система R способна выполнять самые разнообразные операции над векторами. Так, несколько векторов можно объединить в один, используя уже рассмотренную выше функцию конкатенации
Если попытаться объединить, например, текстовый вектор с числовым, сообщение об ошибке не появится – программа просто преобразует все значения в текстовые:
# создаем текстовый вектор text.vect: text.vect <- c("a", "b", "c") # объединяем числовой вектор v1 (см. выше) с текстовым вектором text.vect: # new.vect <- c(v1, text.vect) # просмотр содержимого нового вектора new.vect: new.vect [1] "1" "2" "3" "a" "b" "c" # все значения нового вектора взяты в кавычки, # что указывает на их текстовую природу; # для подтверждения этого воспользуемся командой mode(): mode(new.vect) [1] "character" # все верно: "character" значит "текстовый"
Для работы c определенным элементом вектора необходимо уметь отличать его от других похожих элементов. Для этого при создании вектора всем его компонентам автоматически присваиваются индексные номера, начиная с 1. Чтобы обратится к конкретному элементу необходимо указать имя вектора и индекс этого элемента в квадратных скобках:
# создадим числовой вектор y, содержащий 5 числовых значений: y <- c(5, 3, 2, 6, 1) # проверим, чему равен третий элемент вектора y: y[3] [1] 2
Используя индексные номера, можно выполнять различные операции с избранными элементами разных векторов:
# создадим еще один числовой вектор z, содержащий 3 значения: z <- c(0.5, 0.1, 0.6) # умножим первый элемент вектора y на третий элемент вектора z (т.е. 5*0.6): y[1]*z[3] [1] 3
Индексирование является мощным инструментом, позволяющим создавать совокупности значений в соответствии с определенными критериями. Например, для вывода на экран 3-го, 4-го и 5-го значений вектора y необходимо выполнить команду
y[3:5] [1] 2 6 1
Из этого же вектора мы можем выбрать, например, только первое и четвертое значения, используя уже известную нам функцию конкатенации с():
y[с(1, 4)] [1] 5 6
Похожим образом мы можем удалить первое и четвертое значения из вектора y, применив знак "минус" перед функцией конкатенации:
В качестве критерия для выбора значений может служить логическое выражение. Для примера выберем из вектора y все значения >2:
y[-с(1, 4)] [1] 3 2 1
В качестве критерия для выбора значений может служить логическое выражение. Для примера выберем из вектора y все значения >2:
y[y>2] [1] 5 3 6
Ниже перечислены все используемые в R логические операторы:
- "Равно" ==
- "Не равно" !=
- "Меньше" <
- "Больше" >
- "Меньше либо равно" <=
- "Больше либо равно" >=
- "Логическое И" &
- "Логическое ИЛИ" |
- "Логическое НЕ" !
Индексирование является также удобным инструментом для внесения исправлений в имеющихся векторах. Например, так можно исправить второе значение созданного нами ранее вектора z с 0.1 на 0.3:
z[2] <- 0.3 z [1] 0.5 0.3 0.6
Для упорядочения значений вектора по возрастанию или убыванию используют функцию sort() в сочетании с аргументом decreasing = FALSE или decreasing = TRUE соответственно ("decreasing" значит «убывающий»):
Отправить комментарий