0Pricing
R Academy · レッスン

cat()とprint()による出力表示

コンソール出力に使うcat()と、オブジェクトに使うprint()の違いを理解します。

「cat()とprint()による出力表示」はCoddyKit上の無料R Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これは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')

sep引数を指定したcat()

cat()には、各出力項目の間に挿入されるsep引数を指定できます。デフォルトは半角スペース1つです。区切り文字をなくすにはsep = ''を使い、それ以外の文字列を指定すれば出力を正確に整形できます。

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

fill引数を指定したcat()

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()はstdoutではなくstderrに書き込みます。自動的に改行を追加します。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()を使います。Rオブジェクトの型情報や構造を保ったまま忠実に確認したい場合はprint()を使います。

# 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()の実用的な使い方の1つは、ループの進捗を表示することです。cat()は自動的に改行を追加しないため、1行を少しずつ組み立て、最後に'\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時間対応のAIチューター)、R Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 R Academyコースには全4レッスンが含まれています。

「cat()とprint()による出力表示」で何を学びますか?

コンソール出力に使うcat()と、オブジェクトに使うprint()の違いを理解します。 ブラウザで直接実行するハンズオンコードでR Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

R Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのR Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「cat()とprint()による出力表示」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このR Academyレッスンでコードを書いて実行できますか?

はい。すべてのR Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. paste()とpaste0()による文字列の作成
  2. sprintf()による整形出力
  3. cat()とprint()による出力表示
  4. 文字列のパディングと配置
← R Academyに戻る