0

write.zoo()を使用して動物園オブジェクトをCSVファイルに書き出すとき、実際には小数点以下の精度をデフォルトの14から3に下げたいと思います。ただし、options()でscipenとdigitsを設定しても、出力の精度を落とすことができました。

これは、問題を説明するためのサンプルコードです。

blah <- zoo(cbind(c(1.590833333333335, NA), c(NA, 21.590833333333337)))
index(blah) <- c("Dec 1985", "Dec 1986")
colnames(blah) <- c("FooHeader", "BarHeader")
options(scipen = 3, digits = 3)
write.zoo(blah, file = "blah.csv", sep = ",")

blah.csvファイルを開くと、

"Index","FooHeader","BarHeader"
"Dec 1985",1.59083333333334,NA
"Dec 1986",NA,21.5908333333333

しかし、私が本当に見たいのは

"Index","FooHeader","BarHeader"
"Dec 1985",1.591,NA
"Dec 1986",NA,21.591

これを実現するにはどうすればよいですか?よろしくお願いします!

注:精度を落とすことにより、データをRに再度読み込むと、精度が失われることを認識しています。それはいいです。私はそれと一緒に暮らすことができます。

4

3 に答える 3

6

これを試して

write.zoo(round(blah, 3), sep = ",")
## "Index","FooHeader","BarHeader"
## "Dec 1985",1.591,NA
## "Dec 1986",NA,21.591
于 2012-11-02T16:04:23.253 に答える
2

write.table述べています:

ほとんどすべての場合、数値の変換はオプション " scipen"(を参照options)によって制御されますが、内部的には。と同等ですdigits=15。より細かく制御するには、を使用formatして文字マトリックス/データフレームを作成し、それを呼び出しますwrite.table

残念ながらformat、出力はオブジェクトmatrixに戻すために少し整理する必要があります。zoo

write.zoo(`index<-`(zoo(format(blah,digits=4)),index(blah)))
"Index" "FooHeader" "BarHeader"
"Dec 1985" " 1.591" "    NA"
"Dec 1986" "    NA" "21.591"
于 2012-11-02T14:53:46.927 に答える
2

私は数値を正しい精度に強制するためcoredata<-に andを使用していたでしょう。roundas.character

 coredata(blah) <- as.character(round(coredata(blah), 3))
 write.zoo(blah, file="testzoo.csv", sep= ",")
#----file------
"Index","FooHeader","BarHeader"
"Dec 1985","1.591",NA
"Dec 1986",NA,"21.591"
于 2012-11-02T15:19:47.340 に答える