数値を,ある出力幅に納めたり,小数点以下の表示桁数を指定したいときがある。
sprintf という関数があり,? sprintf で表示されるオンラインヘルプに例もあるが,二重引用符でくくられているのが情けない。
例
> sprintf("%5.1f", pi) # 全体で 5 桁の幅をとり,小数点以下 1 桁でπの値を表示する
[1] " 3.1"
sprintf で出力される文字列を cat で表示すると,二重引用符はつかない。例
> cat(sprintf("%5.1f\n", pi)) # 全体で 5 桁の幅をとり,小数点以下 1 桁でπの値を表示する
3.1
毎回このように cat と sprintf を使うのは面倒くさいというものぐさには,以下のような関数を定義しておくことをおすすめする。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