4

かなり表にまとめられた一連のデータを表示するカスタムprint.xx関数を作成しています。列幅は 11 文字なので、次のようにします。

> format(1234.567,width=11,digits=7)
[1] "   1234.567"
> format(1234.56789,width=11,digits=7)
[1] "   1234.568"

ここまでは順調ですね。問題は、私が非常に大きい/小さい数を持っていて、科学的表記法が入ったときに起こります:

> format(1234.56789e10,width=11,digits=7)
[1] "1.234568e+13"
> format(1234.56789e-10,width=11,digits=7)
[1] "1.234568e-07"

科学表記法を使用する必要がありますが、11 文字の幅に固執する必要があります。scientificパラメータとパラメータを調べましたscipenが、それでも 11 文字の制限を超えています。オプションは、科学表記法が生成されているかどうかを確認することであり、そうであればdigitsパラメーターを減らしますが、私には安っぽく見えます。

数値が科学表記法であるかどうかに関係なく、固定長の文字列を強制的に与えるにはどうすればよいですか?

4

3 に答える 3

7

数字を適切に計算する必要があると思います..おそらく、次のようなものが機能します。

n <- 1234.567e2
prettyNum(n, digits=7-(nchar(n)-11), width=11, format="fg")
# [1] "   123456.7"

n <- 1234.567e9
prettyNum(n, digits=7-(nchar(n)-11), width=11, format="fg")
# [1] "1.23457e+12"

n <- 1234.567e100
prettyNum(n, digits=7-(nchar(n)-11), width=11, format="fg")
# [1] "1.2346e+103"

または同等にformat:

format(n, digits=7-(nchar(n)-11), width=11)
于 2013-08-06T01:50:55.373 に答える
0
> sprintf("%0.6g", 1234.56789e-10)
[1] "1.23457e-07"
> sprintf("%0.6g", 1234.56789e10)
[1] "1.23457e+13"
于 2013-08-06T01:49:27.380 に答える