Menu
Coddy logo textTech

Использование seq_along()

Часть раздела Основы путешествия по R на Coddy — урок 64 из 78.

Иногда вам нужны как значение элемента, так и его позиция в векторе. Хотя прямая итерация по элементам выглядит лаконично, она не дает доступа к индексу. Функция seq_along() решает эту проблему, генерируя последовательность индексов для любого вектора.

Функция seq_along() возвращает последовательность от 1 до длины вектора:

fruits <- c("apple", "banana", "cherry")
print(seq_along(fruits))

Вывод:

[1] 1 2 3

Итерируя по этим индексам, вы можете получить доступ как к позиции, так и к значению:

fruits <- c("apple", "banana", "cherry")
for (i in seq_along(fruits)) {
  cat(i, ":", fruits[i], "\n")
}

Вывод:

1 : apple 
2 : banana 
3 : cherry

Этот подход особенно полезен, когда вам нужно изменить элементы в определенных позициях или сравнить элементы с их соседями. Использование seq_along() безопаснее, чем 1:length(vec), потому что оно корректно обрабатывает пустые векторы, возвращая пустую последовательность вместо 1:0.

challenge icon

Задание

Легко

Вы получите одну строку входных данных, содержащую числа, разделенные запятыми (например, 10,20,30,40,50).

Используя seq_along() для итерации по вектору с индексами:

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

Используйте cat() в формате: Position X: VALUE (Running total: TOTAL), за которым следует символ новой строки.

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

5,10,15,20

Выходные данные должны быть:

Position 1: 5 (Running total: 5)
Position 2: 10 (Running total: 15)
Position 3: 15 (Running total: 30)
Position 4: 20 (Running total: 50)

Объяснение: В позиции 1 значение равно 5, а текущая сумма — 5. В позиции 2 значение равно 10, а текущая сумма — 5+10=15. В позиции 3 значение равно 15, а текущая сумма — 5+10+15=30 и так далее.

Подсказка: Используйте sum(vector[1:i]) для вычисления кумулятивной суммы до позиции i.

Шпаргалка

Функция seq_along() генерирует последовательность индексов от 1 до длины вектора:

fruits <- c("apple", "banana", "cherry")
print(seq_along(fruits))
# Вывод: [1] 1 2 3

Используйте seq_along() в цикле для доступа как к индексу, так и к значению:

fruits <- c("apple", "banana", "cherry")
for (i in seq_along(fruits)) {
  cat(i, ":", fruits[i], "\n")
}
# Вывод:
# 1 : apple 
# 2 : banana 
# 3 : cherry

Использование seq_along() безопаснее, чем 1:length(vec), потому что она корректно обрабатывает пустые векторы, возвращая пустую последовательность вместо 1:0.

Попробуйте сами

# Чтение входных данных
con <- file("stdin", "r")
input_line <- suppressWarnings(readLines(con, n = 1))
close(con)

# Преобразование строки, разделенной запятыми, в числовой вектор
numbers <- as.numeric(strsplit(input_line, ",")[[1]])

# TODO: Напишите свой код ниже
# Используйте seq_along() для циклического обхода вектора
# Для каждой позиции выведите индекс, значение и текущую сумму
# Используйте cat() с форматом: Position X: VALUE (Running total: TOTAL)\n
quiz iconПроверьте себя

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

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