0Pricing
R Academy · Урок

Форматированный вывод с помощью 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 — локальная установка не требуется.

Все уроки этого курса

  1. Создание строк с помощью paste() и paste0()
  2. Форматированный вывод с помощью sprintf()
  3. Вывод с помощью cat() и print()
  4. Заполнение и выравнивание строк
← Назад к R Academy