2

を使用して有効数字 2 桁の数値をフォーマットしたいformatC。しかし、それは奇妙な振る舞いをしています。数値は次のとおりです。

(x <- data.frame(  cil = c(1.234, 0.444, 0.712, 0.999, 1.999)
                 , ciu = c(1.812, 1.234, 0.999, 1.199, 2.690)
                 )
 )

x$ci <- with(x,paste("("
              , formatC(cil, format="g", digits=2, flag="#")
              , "-"
              , formatC(ciu, format="g", digits=2, flag="#")
              ,")"
                      )
              )
x

結果は次のとおりです。

      cil   ciu         ci
1     1.234 1.812  ( 1.2 - 1.8 )
2     0.444 1.234 ( 0.44 - 1.2 )
3     0.712 0.999 ( 0.71 - 1.0 )
4     0.999 1.199  ( 1.0 - 1.2 )
5     1.999 2.690  (  2. - 2.7 )

ケース 5 では、 2ではなく2.0を期待していました。これについての説明はありますか?パラメータの定義に何か問題がありましたか?

4

2 に答える 2

1

コメントで私が言ったことを説明するために、次のことができます。

x$ci<-with(x,paste("(",
                   format(cil,digits=2,nsmall=2),
                   "-",
                   format(ciu,digits=2,nsmall=2),")"))
> x
  case   cil   ciu              ci
1    A 1.234 1.812 ( 1.23 - 1.81 )
2    B 0.444 1.234 ( 0.44 - 1.23 )
3    C 0.712 0.999 ( 0.71 - 1.00 )
4    D 0.999 1.199 ( 1.00 - 1.20 )
5    E 1.999 2.690 ( 2.00 - 2.69 )

または次のように、角かっこの前後のスペースを抑制します。

x$ci<-with(x,paste0("(",
                    format(cil,digits=2,nsmall=2),
                    " - ",
                    format(ciu,digits=2,nsmall=2),")"))
> x
  case   cil   ciu          ci
1    A 1.234 1.812 (1.23 - 1.81)
2    B 0.444 1.234 (0.44 - 1.23)
3    C 0.712 0.999 (0.71 - 1.00)
4    D 0.999 1.199 (1.00 - 1.20)
5    E 1.999 2.690 (2.00 - 2.69)

注意: 実際には function を使用して同じ結果を得ることができますformatCが、format="f"代わりに を使用します"g"

アップデート :

0後で印刷されないという事実は2.、一部の R バージョンの単なるバグだと思います (奇妙なこと: の2.01代わりに を使用して行を試すと、...1.999が得られ"2.0"ます)。

あなたのラインで動作させ、あなたが望むものを正確に得るには、roundfunction を追加するだけです:

x$ci<-with(x,paste("(",
                    formatC(round(cil,2), format="g", digits=2, flag="#"),
                   "-",
                   formatC(round(ciu,2), format="g", digits=2, flag="#"),")"))

> x
  case   cil   ciu             ci
1    A 1.234 1.812  ( 1.2 - 1.8 )
2    B 0.444 1.234 ( 0.44 - 1.2 )
3    C 0.712 0.999 ( 0.71 - 1.0 )
4    D 0.999 1.199  ( 1.0 - 1.2 )
5    E 1.999 2.690  ( 2.0 - 2.7 )
于 2014-12-19T10:09:53.897 に答える