Срезы и индексация векторов
Часть раздела Основы путешествия по R на Coddy — урок 67 из 78.
Вы узнали, как обращаться к отдельным элементам и перебирать векторы. Теперь давайте изучим, как извлекать несколько элементов одновременно с помощью срезов (slicing). Этот метод позволяет получить подмножество вектора за одну операцию.
Чтобы извлечь несколько элементов, передайте вектор индексов внутри квадратных скобок:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[c(1, 3, 5)])Вывод:
[1] 10 30 50Вы также можете использовать оператор двоеточия для выбора диапазона последовательных элементов:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[2:4])Вывод:
[1] 20 30 40Отрицательные индексы в R — это мощный инструмент. Они исключают элементы вместо того, чтобы выбирать их:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-2])Вывод:
[1] 10 30 40 50Вы можете исключить несколько элементов, передав вектор отрицательных индексов:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-c(1, 5)])Вывод:
[1] 20 30 40Помните: вы не можете смешивать положительные и отрицательные индексы в одной выборке. R выдаст ошибку, если вы попробуете numbers[c(1, -2)].
Задание
ЛегкоВы получите две строки входных данных:
- Список чисел, разделенных запятыми (например,
100,200,300,400,500,600,700) - Два индекса, разделенных запятой, представляющих диапазон для исключения (например,
2,5)
Выполните следующие операции:
- Создайте числовой вектор из чисел, разделенных запятыми
- Выведите элементы на позициях 1, 3 и 5, используя вектор индексов
- Выведите элементы с позиции 2 по позицию 4, используя оператор двоеточия
- Выведите вектор, исключив элемент по первому заданному индексу (используя отрицательную индексацию)
- Выведите вектор, исключив элементы от первого до второго индекса включительно (используя отрицательную индексацию с диапазоном)
Например, если входные данные:
10,20,30,40,50,60,70
3,5Выходные данные должны быть:
[1] 10 30 50
[1] 20 30 40
[1] 10 20 40 50 60 70
[1] 10 20 60 70Объяснение:
- Элементы на позициях 1, 3, 5: 10, 30, 50
- Элементы с позиции 2 по 4: 20, 30, 40
- Исключение позиции 3 дает: 10, 20, 40, 50, 60, 70
- Исключение позиций с 3 по 5 дает: 10, 20, 60, 70
Шпаргалка
Чтобы извлечь несколько элементов из вектора, передайте вектор индексов внутри квадратных скобок:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[c(1, 3, 5)]) # [1] 10 30 50Используйте оператор двоеточия для выбора диапазона последовательных элементов:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[2:4]) # [1] 20 30 40Отрицательные индексы исключают элементы вместо того, чтобы выбирать их:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-2]) # [1] 10 30 40 50Исключите несколько элементов, передав вектор отрицательных индексов:
numbers <- c(10, 20, 30, 40, 50)
print(numbers[-c(1, 5)]) # [1] 20 30 40Важно: Вы не можете смешивать положительные и отрицательные индексы в одном выборе.
Попробуйте сами
# Чтение входных данных
con <- file("stdin", "r")
numbers_input <- suppressWarnings(readLines(con, n = 1))
indices_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# Преобразование чисел, разделенных запятыми, в числовой вектор
numbers <- as.numeric(strsplit(numbers_input, ",")[[1]])
# Разбор двух индексов
indices <- as.numeric(strsplit(indices_input, ",")[[1]])
idx1 <- indices[1]
idx2 <- indices[2]
# TODO: Напишите свой код ниже
# 1. Выведите элементы на позициях 1, 3 и 5, используя вектор индексов
# 2. Выведите элементы с позиции 2 по позицию 4, используя оператор двоеточия
# 3. Выведите вектор, исключив элемент на позиции idx1 (отрицательная индексация)
# 4. Выведите вектор, исключив элементы с idx1 по idx2 (отрицательная индексация с диапазоном)В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Операторы. Часть 2
Логические операторы (AND, OR)Логические операторы. Часть 2 (NOT)Повторение: простая логикаВекторизованная логика. Часть 1Векторизованная логика. Часть 27Калькулятор разделения счета
Приветственное сообщениеПолучение пользовательского ввода13Векторы: продвинутый уровень
Срезы и индексация векторовЛогическая индексацияАрифметика и ресайклинг векторовОператор %in%2Переменные и типы данных
Числовой тип данныхЦелочисленный тип данныхСимвольный тип данныхЛогический тип данныхПроверка типов данныхПравила именованияПропущенные значения: NAИтоги — создание переменных5Принятие решений
Оператор ifКонструкция if - elseПовторение: Простой калькуляторВложенные конструкции if - else8Циклы
Цикл ForЦикл WhileBreakNext (Continue)Повторение: ФакториалГенерация последовательностей (seq, :)Вложенные циклыПовторение: Динамический ввод3Операторы. Часть 1
Арифметические операторыЦелочисленное деление и остаток от деленияОператоры присваиванияПовторение: простая математикаОператоры сравнения6Основы ввода-вывода
Вывод через printКоманда cat для выводаВывод с переменнымиЧтение ввода через readline()Основы преобразования типовПовторение — Калькулятор возрастаПовторение — Истина или ложь9Функции
Объявление функцииАргументы функцииВозвращаемые значенияПовторение — функция SigmaПовторение — функция валидацииЗначения параметров по умолчанию12Итерация по последовательностям
Итерация по элементам вектораИспользование seq_along()Итерация по символам (strsplit)Функции для работы со строками