Использование 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.
Задание
ЛегкоВы получите одну строку входных данных, содержащую числа, разделенные запятыми (например, 10,20,30,40,50).
Используя seq_along() для итерации по вектору с индексами:
- Создайте вектор из входных данных, разделенных запятыми
- Выполните цикл по вектору, используя
seq_along(), чтобы получить как индекс, так и значение - Для каждого элемента выведите индекс, значение и кумулятивную сумму до этой точки (сумму всех элементов от позиции 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В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
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)Функции для работы со строками