書式付き print     Last modified: Apr 13, 2004

 数値を,ある出力幅に納めたり,小数点以下の表示桁数を指定したいときがある。
 sprintf という関数があり,? sprintf で表示されるオンラインヘルプに例もあるが,二重引用符でくくられているのが情けない。

例
> sprintf("%5.1f", pi)	# 全体で 5 桁の幅をとり,小数点以下 1 桁でπの値を表示する
[1] "  3.1"
 sprintf で出力される文字列を cat で表示すると,二重引用符はつかない。
 しかし,cat は改行をしてくれないので,改行したいとき(行の終わりなど)には,自分で改行コード(\n)の出力を指定する必要がある。
例
> cat(sprintf("%5.1f\n", pi))	# 全体で 5 桁の幅をとり,小数点以下 1 桁でπの値を表示する
  3.1
 毎回このように cat と sprintf を使うのは面倒くさいというものぐさには,以下のような関数を定義しておくことをおすすめする。
 関数を定義後,ワークスペースに保存しておくと,R を始める前に毎回これを読んでくれるので以後は関数の定義をすることなくいつでも使える。
printf 関数の定義

インストールは,以下の 1 行をコピーし,R コンソールにペーストする
source("http://aoki2.si.gunma-u.ac.jp/R/src/printf.R", encoding="euc-jp")

# C 言語の printf をシミュレートする
printf <- function(fmt, ...)
{
        cat(sprintf(fmt, ...))
}

 関数定義を見てもわかるが,この関数は C 言語などでの printf 関数と全く同じように記述し,同じ出力を生み出す。
 書式の中の % で始まる部分が対応する数値などをどのように出力するかの指定。それ以外の部分はそのまま出力される。
 大まかには以下の通り。
書式   意味
%i    整数値を出力する
%5i    5 桁の幅を取り,右詰で整数値を出力する
%f    実数値を出力する
%7.2f   7 桁の幅を取り,小数点以下 2 桁で,右詰で実数値を出力する
%7.2g   7 桁の幅を取り,有効数字 2 桁で,右詰で実数値を出力する
%7.2e   7 桁の幅を取り,有効数字 2 桁の科学的表記法により,右詰で実数値を出力する
%s    文字列を出力する
%8s    8 桁の幅を取り,右詰で文字列を出力する
その他  略
例
> printf("pi = %.5f(%.10e)\n", pi, pi)
pi = 3.14159(3.1415926536e+00)
> printf("integer = %i, real = %f, %g\n", as.integer(12.0), 3.456, 7890123.4)
integer = 12, real = 3.456000, 7.89012e+06
> printf("%7.5g %7.5e\n", 12.34567, 12.34567)	# %g と %e の違い
 12.346 1.23457e+01


・ 直前のページへ戻る  ・ E-mail to Shigenobu AOKI

Made with Macintosh