数値を,ある出力幅に納めたり,小数点以下の表示桁数を指定したいときがある。
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