我使用read.table
来读取包含数字的文件,例如0.00001
当我用write.table
写回来时,这些数字显示为1e-5
如何保留旧格式?
答案 0 :(得分:35)
我只需在调用scipen
之前更改write.table
选项。请注意,这也会更改打印到控制台时数字的显示方式。
options(scipen=10)
write.table(foo, "foo.txt")
options(scipen=0) # restore the default
答案 1 :(得分:17)
您可以根据需要将数字转换为具有格式的字符串,然后在调用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)
请注意,您无需更改文件中数字的格式。几乎所有科学软件和每个电子表格都能理解数字的科学记数法,并且还有数字格式选项,因此您可以查看它们的选择方式。
答案 2 :(得分:5)
如果输入是科学记数法和显式记法数字的混合,那么您将编写自己的解析器来读取数字并跟踪哪些格式。实际上,您需要保留这些数字的字符串表示,以便您可以回写完全输入中的内容。
但是,如果您只想使用一致的显式表示法编写write.table(),请尝试。
write.table(format(_your_table_here_, scientific=FALSE), ...)
答案 3 :(得分:1)
对于所有行的最大控制循环并将其打印到使用 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")