Форматированный вывод с помощью sprintf()
Управляйте количеством знаков после запятой, заполнением и выравниванием с помощью строк формата sprintf.
«Форматированный вывод с помощью sprintf()» — бесплатный урок R Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения R Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс R Academy содержит 4 уроков всего.
Основы sprintf()
sprintf() форматирует строки с помощью строки формата и заполнителей. Она работает точно так же, как printf в C. Первый аргумент — шаблон формата, а последующие аргументы последовательно подставляются вместо заполнителей.
sprintf('There are %d items', 5)
sprintf('Hello, %s!', 'Alice')
sprintf('Price: %.2f', 9.999)Заполнители для целых чисел и строк
%d форматирует целое число, %s — строку, а %f — число с плавающей точкой. Каждый заполнитель последовательно заменяется соответствующим аргументом.
name <- 'Bob'
age <- 34
score <- 88.5
sprintf('%s is %d years old with score %.1f', name, age, score)Управление количеством знаков после запятой
%.2f означает: форматировать как число с плавающей точкой ровно с 2 знаками после запятой. Число между . и f задаёт точность. Это удобно для денежных сумм, процентов и научных значений.
pi_val <- 3.14159265
sprintf('%.0f', pi_val)
sprintf('%.2f', pi_val)
sprintf('%.5f', pi_val)
sprintf('$%.2f', 1234.5)Ширина поля и заполнение
Число перед буквой формата задаёт минимальную ширину поля. По умолчанию значения выравниваются по правому краю, а свободное место слева заполняется пробелами. Это удобно для выравнивания столбцов в текстовых отчётах.
items <- c('Pen', 'Notebook', 'Stapler')
prices <- c(1.5, 4.99, 7.25)
for (i in seq_along(items)) {
cat(sprintf('%-10s $%6.2f\n', items[i], prices[i]))
}Выравнивание по левому краю с флагом -
Добавьте - перед числом ширины, чтобы выровнять текст по левому краю поля. Это стандартный способ создавать выровненные по левому краю столбцы в текстовом выводе фиксированной ширины.
# Right-aligned (default)
sprintf('%10s', 'hi')
# Left-aligned
sprintf('%-10s', 'hi')
# Practical: side-by-side
cat(sprintf('%-8s %5d\n', 'Alice', 42))
cat(sprintf('%-8s %5d\n', 'Bob', 7))Экспоненциальная запись с %e и %g
%e принудительно использует экспоненциальную запись (например, 1.23e+04). %g автоматически выбирает более короткий вариант между %f и %e — это удобно, когда значения охватывают много порядков величины.
x <- 0.000123456
y <- 123456789
sprintf('%e', x)
sprintf('%e', y)
sprintf('%g', x)
sprintf('%g', y)Заполнение нулями с флагом 0
Добавьте 0 перед шириной поля, чтобы заполнять числа ведущими нулями, а не пробелами. Это часто используют для идентификаторов, дат и нумерации файлов с ведущими нулями.
ids <- c(1, 12, 123, 1234)
sprintf('ID_%05d', ids)
# Date parts
sprintf('%04d-%02d-%02d', 2024, 5, 7)Форматирование процентов
Чтобы отобразить отношение в виде процента, умножьте его на 100 и используйте %.1f%%. Двойной символ %% вставляет в результат буквальный знак процента (одиночный % интерпретировался бы как начало заполнителя).
pass_rate <- 0.8743
sprintf('Pass rate: %.1f%%', pass_rate * 100)
growth <- 0.0523
sprintf('Growth: +%.2f%%', growth * 100)sprintf() является векторизованной функцией
Если передать вектор в качестве аргумента sprintf(), функция автоматически обработает его элементы и вернёт по одной отформатированной строке для каждого элемента. Сама строка формата повторяется при необходимости.
products <- c('Apple', 'Banana', 'Cherry')
prices <- c(0.99, 0.59, 2.49)
sprintf('%-8s costs $%.2f', products, prices)Несколько заполнителей и аргументов
Каждый заполнитель использует один аргумент по порядку. В одной строке формата можно свободно сочетать %d, %f и %s, а все векторные аргументы повторяются до длины самого длинного.
months <- c('Jan', 'Feb', 'Mar')
revenue <- c(12500, 9800, 15300)
growth <- c(0.05, -0.12, 0.18)
sprintf('%s: $%d (growth: %+.1f%%)',
months, revenue, growth * 100)sprintf() и paste(): когда что использовать
Используйте paste()/paste0() для простого объединения строк, а sprintf() — когда требуется точное форматирование чисел (количество знаков после запятой, ширина поля, заполнение). sprintf() более многословна, но даёт полный контроль над видом чисел.
val <- 1234567.891
# paste: no formatting control
paste('Total:', val)
# sprintf: formatted as currency
sprintf('Total: $%,.2f', val)
# With manual formatting
sprintf('Total: $%15.2f', val)Быстрая проверка
Какой код формата в sprintf() вставляет в результат буквальный знак процента %?
Основные выводы о sprintf()
Основные выводы о sprintf():
%d— целое число,%f— число с плавающей точкой,%s— строка,%e— экспоненциальная запись,%g— автоматический выбор%.2f= 2 знака после запятой;%10.2f= ширина 10, 2 знака после запятой%-10s= выравнивание по левому краю в поле шириной 10 символов;%05d= заполнение нулями до 5 цифр%%= буквальный знак процента в результатеsprintf()векторизована по своим аргументам- Выбирайте
sprintf()вместоpaste(), когда важна точность числового форматирования
x <- 0.87654
cat(sprintf('Default f : %f\n', x))
cat(sprintf('2 decimals : %.2f\n', x))
cat(sprintf('Percentage : %.1f%%\n', x * 100))
cat(sprintf('Scientific : %e\n', x))
cat(sprintf('Auto : %g\n', x))Часто задаваемые вопросы
Урок «Форматированный вывод с помощью sprintf()» бесплатный?
Да — полный текст урока «Форматированный вывод с помощью sprintf()» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс R Academy, подпишись на CoddyKit PRO. Курс R Academy содержит 4 уроков всего.
Чему я научусь в уроке «Форматированный вывод с помощью sprintf()»?
Управляйте количеством знаков после запятой, заполнением и выравниванием с помощью строк формата sprintf. Ты практикуешь R Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать R Academy?
Предыдущий опыт не требуется. R Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Форматированный вывод с помощью sprintf()»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке R Academy?
Да. Каждый урок R Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Создание строк с помощью paste() и paste0()
- Форматированный вывод с помощью sprintf()
- Вывод с помощью cat() и print()
- Заполнение и выравнивание строк