web-dev-qa-db-ja.com

0.00001の代わりに1e-5を書き込む数値形式

read.tableを使用して、0.00001などの数字を含むファイルを読み取りました

write.tableでそれらを書き戻すと、それらの番号は1e-5として表示されます

古い形式を保持するにはどうすればよいですか?

24
skan

これを行うには、数値を必要に応じて書式設定された文字列に変換し、引数quote = FALSEの呼び出しでwrite.table

dfr <- data.frame(x = 10^(0:15))
dfr$y <- format(dfr$x, scientific = FALSE)
write.table(dfr, file = "test.txt", quote = FALSE)

ファイル内の数値の形式を変更する必要はないことに注意してください。ほぼすべての科学ソフトウェアとすべてのスプレッドシートは、数値の科学表記法を理解し、選択した方法で表示できるように数値の書式設定オプションも備えています。

18
Richie Cotton

write.tableを呼び出す前に、scipenオプションを変更するだけです。これにより、コンソールへの印刷時の数字の表示方法も変更されることに注意してください。

options(scipen=10)
write.table(foo, "foo.txt")
options(scipen=0)  # restore the default
38
Joshua Ulrich

入力が科学表記法と明示的表記法の数字の混合である場合、数字を読み取り、どの数字がどのフォーマットであったかを追跡するための独自のパーサーを作成します。実際、これらの数値の文字列表現を保持して、書き戻すことができます正確に入力にあったもの。

ただし、一貫して明示的な表記を使用してwrite.table()のみを作成する場合は、試してください。

 write.table(format(_your_table_here_、Scientific = FALSE)、...)
5
Eric Towers

すべての行を最大限に制御し、次の形式でテキストファイルに出力する sprintf

# Find number of rows in data.frame test
nrows <- dim(test)[1]

# init a new vector
mylines  <- vector("character",dim(test)[1])

# loop over all rows in dataframe
for(i in 1:nrows){
  # Print out exactly the format you want
  mylines[i] <- sprintf("Line %d: %.2f\t%.2f",1,test[i,"x"],test[i,"y")
}

# write lines to file
writeLines(mylines,"out.txt")
1
Henrik