Menu
Coddy logo textTech

Сортировка векторов

Часть раздела Логика и потоки выполнения путешествия по R на Coddy. Урок 37 из 64.

sort(x) возвращает значения x в порядке возрастания, а decreasing = TRUE меняет его на обратный. Исходный вектор не изменяется:

scores <- c(72, 95, 60, 88)
print(sort(scores))
print(sort(scores, decreasing = TRUE))
print(scores)

Результат:

[1] 60 72 88 95
[1] 95 88 72 60
[1] 72 95 60 88

Текст сортируется в алфавитном порядке. Точный порядок зависит от языковых настроек системы: на Coddy, как и на многих серверах, заглавные буквы идут перед строчными, поэтому "Zed" сортируется перед "ada". Используйте tolower(), если регистр не должен иметь значения:

names <- c("cy", "Zed", "ada")
print(sort(names))
print(sort(tolower(names)))

Результат:

[1] "Zed" "ada" "cy" 
[1] "ada" "cy"  "zed"

rev(x) меняет текущий порядок на обратный без сортировки, а head(x, n) сохраняет первые n элементов, что вместе с sort() позволяет получить список лучших результатов:

scores <- c(72, 95, 60, 88)
print(rev(scores))
print(head(sort(scores, decreasing = TRUE), 2))

Результат:

[1] 88 60 95 72
[1] 95 88

Отсортированный именованный вектор сохраняет каждое имя вместе со своим значением, поэтому имена выводятся в порядке значений:

stock <- c(tea = 12, jam = 3, oil = 7)
low_first <- sort(stock)
print(names(low_first))
print(low_first[["jam"]])

Вывод:

[1] "jam" "oil" "tea"
[1] 3
challenge icon

Задание

Легко

Завершите top_scores(scores, n). Верните n самых высоких результатов от большего к меньшему, объединённых с помощью , . Если результатов меньше, чем n, верните их все.

Предоставленный код считывает результаты в виде строки, разделённой запятыми, и n, а затем выводит возвращённое значение.

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

top_scores <- function(scores, n) {
  # Напишите свой код здесь
  ""
}

# Предоставленный код ввода/вывода: оставьте его как есть
input <- suppressWarnings(readLines(file("stdin")))
cat(top_scores(as.numeric(strsplit(input[1], ",")[[1]]), as.numeric(input[2])), sep = "\n")
quiz iconПроверьте себя

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

Все уроки раздела Логика и потоки выполнения

Потренируйтесь самостоятельно: Онлайн-компилятор R