0Pricing
R Academy · レッスン

文字列のパディングと配置

formatC()とformat()を使い、固定幅で整列したテキストを出力します。

「文字列のパディングと配置」はCoddyKit上の無料R Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これは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)

flagによるformatC()の左寄せ

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'(この2つのうち短い方)、'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() — Base 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)

実践:IDとラベルのパディング

レポートでは、0埋めしたIDや左側を埋めたラベルが必要になることがよくあります。formatC()なら両方に対応できます。数値を0埋めするには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時間対応のAIチューター)、R Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 R Academyコースには全4レッスンが含まれています。

「文字列のパディングと配置」で何を学びますか?

formatC()とformat()を使い、固定幅で整列したテキストを出力します。 ブラウザで直接実行するハンズオンコードでR Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「文字列のパディングと配置」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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