0Pricing
R Academy · Урок

Заполнение и выравнивание строк

Используйте formatC() и format() для вывода текста фиксированной ширины и с выравниванием.

«Заполнение и выравнивание строк» — бесплатный урок R Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения R Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс R Academy содержит 4 уроков всего.

Зачем нужно выравнивание строк по ширине

Вывод фиксированной ширины необходим для таблиц в обычном тексте, файлов журналов и отчётов. R предоставляет formatC() и format() для дополнения значений до фиксированной ширины, благодаря чему столбцы правильно выравниваются в моноширинном отображении.

# Unformatted: columns misalign
cat('Alice 85\n')
cat('Bob 9200\n')
# Padded: columns align
cat(formatC('Alice', width = 10), formatC(85,   width = 6), '\n')
cat(formatC('Bob',   width = 10), formatC(9200, width = 6), '\n')

formatC() — выравнивание по правому краю

formatC(x, width = n) дополняет значение как минимум до n символов, по умолчанию выравнивая его по правому краю. Пробелы добавляются слева. Это работает и для чисел, и для строк.

formatC('hi',   width = 10)
formatC(42,     width = 10)
formatC(3.14,   width = 10)

Выравнивание formatC() по левому краю с помощью flag

Аргумент flag = '-' переключает выравнивание по левому краю, добавляя пробелы справа. Это идеально подходит для строковых меток в столбцах таблицы, когда значения должны начинаться у левого края.

items <- c('Pen', 'Notebook', 'Stapler')
prices <- c(1.5, 4.99, 7.25)
for (i in seq_along(items)) {
  cat(formatC(items[i], width = 12, flag = '-'),
      formatC(prices[i], format = 'f', digits = 2, width = 8),
      '\n')
}

formatC() с числовыми форматами

formatC() поддерживает коды формата: 'f' для фиксированного числа знаков после запятой, 'e' для экспоненциальной записи, 'g' для выбора более короткого из этих двух представлений и 'd' для целых чисел. Аргумент digits задаёт точность.

x <- 12345.6789
formatC(x, format = 'f', digits = 2)
formatC(x, format = 'e', digits = 3)
formatC(x, format = 'g', digits = 5)
formatC(42L, format = 'd', width = 8)

format() — выравнивание средствами базового R

format(x, width = n, justify = 'left'/'right'/'centre') — обобщённая функция выравнивания. Она работает с любым объектом R и возвращает вектор строк одинаковой ширины. По умолчанию числа выравниваются по правому краю, а строки — по левому.

words <- c('cat', 'elephant', 'ox')
format(words, width = 10)
format(words, width = 10, justify = 'right')

format() для задания точности чисел

format() также управляет количеством знаков после запятой с помощью nsmall (минимальное число знаков после запятой) и разделителями тысяч с помощью big.mark. Эти возможности особенно удобны для отображения финансовых показателей.

format(1234567.8,  big.mark = ',', nsmall = 2)
format(0.1,        nsmall = 4)
format(c(1.5, 100, 0.005), nsmall = 3)

strrep() — повторение строк

strrep(x, times) повторяет строку заданное число раз. Используйте её для создания разделительных линий, строк отступов или визуальных элементов без ручного объединения символов.

strrep('-', 40)
strrep('=-', 20)
strrep(c('ab', 'cd'), c(3, 2))
# Draw a simple table border
cat(strrep('=', 30), '\n')

Создание текстовой таблицы фиксированной ширины

Объедините formatC(), cat() и strrep(), чтобы создать аккуратную таблицу в обычном тексте. Такой подход часто используется в инструментах CLI и файлах журналов.

header <- paste0(formatC('Name',  width=12,flag='-'),
                 formatC('Score', width=8,flag='-'),
                 formatC('Grade', width=8,flag='-'))
cat(header, '\n')
cat(strrep('-', 28), '\n')
row1 <- paste0(formatC('Alice',  width=12,flag='-'),
               formatC(92,width=8),formatC('A',width=8,flag='-'))
cat(row1, '\n')

formatC() и sprintf() для дополнения до ширины

И formatC(), и sprintf() могут создавать дополненный вывод. sprintf() лаконичнее в простых случаях, а formatC() предоставляет больше возможностей при применении одного и того же форматирования ко всему вектору.

x <- 42
# sprintf approach
sprintf('%10d', x)
sprintf('%-10s', 'hello')
# formatC approach
formatC(x,       width = 10)
formatC('hello', width = 10, flag = '-')

Управление экспоненциальной записью

formatC(x, format='e', digits=n) или options(scipen=999) управляет моментом перехода R к экспоненциальной записи. Настройка scipen задаёт штраф: чем больше её значение, тем дольше подавляется экспоненциальная запись перед переходом к ней.

# Default scipen
print(0.0001234)
print(1234567890)
# Force scientific
formatC(0.0001234, format = 'e', digits = 3)
# Suppress scientific globally
old <- options(scipen = 999)
print(0.0001234)
options(old)

Практика: дополнение идентификаторов и меток

Частая задача — добавлять нули к идентификаторам или пробелы слева от меток в отчётах. formatC() справляется с обеими задачами: используйте flag = '0' для дополнения чисел нулями и flag = '-' для выравнивания строк по левому краю.

ids    <- c(1, 12, 123)
names  <- c('Alice', 'Bob', 'Carol')
scores <- c(88.5, 91.0, 76.25)
for (i in seq_along(ids)) {
  cat(formatC(ids[i], width=5, format='d', flag='0'),
      formatC(names[i], width=10, flag='-'),
      formatC(scores[i], width=8, format='f', digits=2),
      '\n')
}

Быстрая проверка

Какой аргумент formatC() выравнивает вывод по левому краю в пределах заданной ширины?

Дополнение и выравнивание: основные выводы

Основные выводы о дополнении строк и выравнивании:

  • formatC(x, width=n) дополняет справа до ширины n; flag='-' выравнивает по левому краю
  • formatC(x, format='f', digits=2) используется для фиксированного числа знаков после запятой; 'e' — для экспоненциальной записи
  • format(x, justify='left'/'right'/'centre') используется для общего выравнивания
  • format(x, big.mark=',', nsmall=2) используется для разделителей тысяч и завершающих знаков после запятой
  • strrep(s, n) повторяет строку n раз — отлично подходит для разделительных линий
  • Объединяйте эти функции с cat() для вывода таблиц в обычном тексте
cat(strrep('=', 30), '\n')
cat(formatC('Item', width=12, flag='-'),
    formatC('Price', width=10), '\n')
cat(strrep('-', 30), '\n')
cat(formatC('Apple', width=12, flag='-'),
    formatC(1.99, width=10, format='f', digits=2), '\n')

Часто задаваемые вопросы

Урок «Заполнение и выравнивание строк» бесплатный?

Да — полный текст урока «Заполнение и выравнивание строк» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс R Academy, подпишись на CoddyKit PRO. Курс R Academy содержит 4 уроков всего.

Чему я научусь в уроке «Заполнение и выравнивание строк»?

Используйте formatC() и format() для вывода текста фиксированной ширины и с выравниванием. Ты практикуешь R Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать R Academy?

Предыдущий опыт не требуется. R Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Заполнение и выравнивание строк»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке R Academy?

Да. Каждый урок R Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

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

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