Заполнение и выравнивание строк
Используйте 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 — локальная установка не требуется.
Все уроки этого курса
- Создание строк с помощью paste() и paste0()
- Форматированный вывод с помощью sprintf()
- Вывод с помощью cat() и print()
- Заполнение и выравнивание строк