Menu
Coddy logo textTech

Срезы и индексация векторов

Часть раздела Основы путешествия по 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)].

challenge icon

Задание

Легко

Вы получите две строки входных данных:

  1. Список чисел, разделенных запятыми (например, 100,200,300,400,500,600,700)
  2. Два индекса, разделенных запятой, представляющих диапазон для исключения (например, 2,5)

Выполните следующие операции:

  1. Создайте числовой вектор из чисел, разделенных запятыми
  2. Выведите элементы на позициях 1, 3 и 5, используя вектор индексов
  3. Выведите элементы с позиции 2 по позицию 4, используя оператор двоеточия
  4. Выведите вектор, исключив элемент по первому заданному индексу (используя отрицательную индексацию)
  5. Выведите вектор, исключив элементы от первого до второго индекса включительно (используя отрицательную индексацию с диапазоном)

Например, если входные данные:

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 (отрицательная индексация с диапазоном)
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы