2012-09-28 8 views

答えて

19

数値を出力するときにのみ、具体的な表現(つまり、数値をどのようにフォーマットするか)を選択する必要があります。数値変数を "-0.34"から "-34"に変更することはできません。両方とも同じ番号の表現です。

ただし、式eを出力するときに、フォーマットする方法を選択できます。私は先頭の「0」をオフのままに任意のビルドで方法を知っていませんが、常にちょうどそれを手動で削除できます。

> sub("^(-?)0.", "\\1.", sprintf("%.2f", -0.34)) 
[1] "-.34" 

あなたは、例えば、

numformat <- function(val) { sub("^(-?)0.", "\\1.", sprintf("%.2f", val)) } 
便宜のために関数を定義することができます@のステファンさんの素敵な答えに加えて
+0

しかし、 'sub'変数を文字に変更してください... –

+0

修正:*変更 –

2

が、私は同じことを達成したが、より小数点以下を出力し、次のコードにつまずい:既存の回答に加えて

f = function(X1)gsub("0\\.","\\.", X1) 
+3

"0"を置き換えることに注意する必要があります。これは "10.12"を "1.12"に変換します。これはおそらく意図されていません。私は正規表現 '' ^( - ?)0 "'を使ってこれを解決しました。これは、ゼロが最初の文字(おそらく '-'を除く)である場合にのみ一致します。 – stefan

+0

チップのおかげで、ステファン。 @Manoel Galdino - Stefanの関数を使用した後、変数は数値のままです。 – rolando2

7

、私がいることを言及したかったですパッケージweightsには関数rd()があります。この関数を使用すると、ゼロに先行しないテキストに数値を丸めることができます。もちろん結果は数字ではなく文字です。

library("weights") 
rd(-0.341, digits=2) 
[1] "-.34" 
0

私は3桁までの数字を表示する必要がありました。 任意の小数点以下の桁数に印字したい場合、別のパッケージ(上記のパッケージweights)を追加したくない場合は、この機能(@ stefanの回答から適合)は動作しているようです:

例えば
numformat <- function(x, digits = 2) { 
    ncode <- paste0("%.", digits, "f") 
    sub("^(-?)0.", "\\1.", sprintf(ncode, x)) 
} 

ので:

> numformat(-.232, 2) 
[1] "-.23" 
> numformat(-.232, 3) 
[1] "-.232" 
> numformat(-.232, 4) 
[1] "-.2320" 
0

それはRマークダウンに報告するためなら、私は(関数APAとパッケージのMOTEを使用)、コード:apa(-0.34, 2, FALSE)これは、マイドキュメント内-.34を返します。

関連する問題