0Pricing
R Academy · Урок

Вывод с помощью cat() и print()

Различайте cat() для вывода в консоль и print() для объектов.

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

print() — функция вывода по умолчанию

print() — стандартный метод R для отображения объектов. Он использует класс объекта, чтобы выбрать подходящий метод форматирования. В интерактивных сеансах ввод имени переменной эквивалентен вызову для неё print().

x <- c(1, 2, 3, 4, 5)
print(x)
# Equivalent to:
x

cat() — вывод необработанного текста

cat() объединяет аргументы и выводит их как необработанный текст: без окружающих кавычек, без маркеров индексов вроде [1] и по умолчанию без перевода строки в конце. Эта функция предназначена для вывода форматированного текста, а не для отображения объектов R.

name <- 'Alice'
age  <- 30
cat('Name:', name, '\n')
cat('Age:', age, '\n')
cat('Score:', 92.5, '\n')

Главное различие: кавычки и [1]

Наиболее заметное различие состоит в том, как отображаются строки. print() заключает строки в кавычки и добавляет [1], а cat() выводит необработанные символы без каких-либо дополнительных обозначений.

msg <- 'Hello World'
print(msg)
cat(msg, '\n')

cat() с аргументом sep

cat() принимает аргумент sep, который вставляется между каждым элементом вывода. По умолчанию используется один пробел. Укажите sep = '', чтобы не использовать разделитель, или любую другую строку для точного форматирования вывода.

cat('a', 'b', 'c', sep = '')
cat('a', 'b', 'c', sep = '-')
cat(1:5, sep = ', ')
cat('x =', 42, sep = '')

cat() с аргументом fill

Аргумент fill добавляет перевод строки, когда вывод превышает заданную ширину в символах. При значении fill = TRUE используется текущая настройка width. Это удобно для переноса длинных последовательностей слов.

words <- c('The', 'quick', 'brown', 'fox', 'jumps',
           'over', 'the', 'lazy', 'dog')
cat(words, fill = 30)

Диспетчеризация методов print()

print() — это обобщённая функция: она выбирает метод, предназначенный для конкретного класса. Например, print.data.frame удобно форматирует таблицы данных, а print.factor отображает уровни и т. д. Поэтому один и тот же вызов выглядит по-разному для разных объектов.

# print dispatches differently per class
print(42L)                        # integer
print(factor(c('a', 'b', 'a')))   # factor with levels
print(list(x = 1, y = 'hi'))      # list

invisible() — отключение автоматического вывода

invisible(x) возвращает свой аргумент, но отключает автоматический вывод, когда значение возвращается из функции или выражения. Эта функция используется в функциях, которые должны молча возвращать значения, например в операторах присваивания.

# Explicit print shows the value
f <- function(x) invisible(x * 2)
result <- f(5)
# Nothing printed automatically
f(5)
# But print() forces it
print(f(5))

message() — вывод в stderr

message() записывает данные в stderr, а не в stdout. Она автоматически добавляет перевод строки. В отличие от cat() и print(), сообщения можно подавить с помощью suppressMessages() и перехватить с помощью tryCatch().

message('This goes to stderr')
cat('This goes to stdout\n')
# Suppress messages:
suppressMessages(message('hidden'))
cat('Still visible\n')

Когда использовать cat(), а когда print()

Используйте cat(), когда нужно вывести понятный человеку текст — строки журнала, сообщения о ходе выполнения или форматированные отчёты. Используйте print(), когда нужно достоверно исследовать объекты R, сохранив сведения об их типах и структуре.

# cat() for formatted output
cat(sprintf('Processing %d records...\n', 500))
cat('Done.\n')

# print() to inspect objects
result <- list(n = 500, mean = 4.2, sd = 1.1)
print(result)

print() для таблиц данных

print.data.frame форматирует таблицы данных, добавляя номера строк, заголовки столбцов и выровненные значения. Управлять количеством отображаемых строк можно с помощью конструкции вида print(df, n = k) или вызвав head() перед выводом.

df <- data.frame(
  name  = c('Alice', 'Bob', 'Carol'),
  score = c(88, 95, 72)
)
print(df)

cat() для отображения хода цикла

Одно из практических применений cat() — вывод хода выполнения цикла. Поскольку cat() не добавляет переводы строк автоматически, можно постепенно формировать строку, а затем завершить её с помощью '\n'.

for (i in 1:5) {
  cat(sprintf('Processing file %d of 5...\n', i))
}
cat('All files processed.\n')

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

Какая функция вывода записывает данные в stderr, автоматически добавляет перевод строки и может быть подавлена с помощью suppressMessages()?

Функции вывода: основные выводы

Основные выводы о функциях вывода в R:

  • print(x) — исследование объектов R; использует форматирование для конкретного класса; добавляет [1] и кавычки
  • cat(...) — вывод необработанного текста; без кавычек и автоматического перевода строки; используйте '\n' явно
  • cat() принимает sep и fill для управления форматированием
  • invisible(x) — возвращает x без автоматического вывода
  • message() — выводит данные в stderr и автоматически добавляет перевод строки; подавляется с помощью suppressMessages()
  • Используйте cat() вместе с sprintf() для форматированных отчётов и журналов
x <- 'result'
print(x)              # shows: [1] "result"
cat(x, '\n')          # shows: result
message('info: ', x)  # goes to stderr
f <- function() invisible(42)
f()                   # nothing printed
print(f())            # forces print: [1] 42

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

Урок «Вывод с помощью cat() и print()» бесплатный?

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

Чему я научусь в уроке «Вывод с помощью cat() и print()»?

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

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

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

Сколько времени занимает урок «Вывод с помощью cat() и print()»?

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

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

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

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

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