pau*_*rer 20 r data.table
我想在data.table中向csv文件写入数字时禁用科学记数法.我可以write.csv使用options(scipen = 999)但不能使用fwrite.例:
require(data.table)
dt <- data.table("ID" = c("A", "B", "C", "D"), VALUE = c(0.0000001, 0.1234567, 1000000, 1234567))
options(scipen = 999)
write.csv(dt, row.names = FALSE)
# "ID","VALUE"
# "A",0.0000001
# "B",0.1234567
# "C",1000000
# "D",1234567
fwrite(dt, row.names = FALSE)
# ID,VALUE
# A,1e-07
# B,0.1234567
# C,1e+06
# D,1234567
Run Code Online (Sandbox Code Playgroud)
我希望fwrite中的A行和C行写在write.csv中.我正在使用data.table版本1.10.0.你知道怎么做吗?
这现在在 data.table v1.12.4 中得到修复。功能fwrite获得选项scipen。引自 data.table github 站点:https : //github.com/Rdatatable/data.table/blob/master/NEWS.md
"获得 scipen #2020,第 1 号最需要的功能 #3189。默认是getOption("scipen")这样,fwrite现在它将以base::write.csv与和相同的方式尊重 R 的选项base::format,正如预期的那样。参数和选项名称与 base R 的 scipen 保持一致,以保持一致性并帮助在线搜索。它代表“科学惩罚”;即,添加到宽度的字符数,如果它适合使用非科学数字格式。高惩罚基本上关闭了科学格式。我们认为通常的做法是使用 999 的值,但是,如果您确实使用 999,因为您的数据可能包含非常长的数字,例如 10^300,fwrite 需要在其每个缓冲区分配中考虑最坏情况下的字段宽度线。这可能会影响空间或时间。如果您遇到减速或不可接受的内存使用情况,请将verbose=TRUE 传递给fwrite,检查输出并报告问题。在我们确定最佳策略之前,一种解决方法可能是将较小的值传递给 scipen,fwrite(DT, scipen=50)似乎准确地写了 10^50,不像基础 R。然而,这可能是一个快乐的意外,并不普遍适用。这方面可能需要进一步的工作。”