我在R中的DataTable包中遇到了fwrite函数的问题。实际上它以错误的方式添加,我最终得到的结果如下:
**user ref version status Type DataExtraction**
user1 2.02E+11 1 Pending 1 No
user2 2.02E+11 1 Saved 2 No"user3" 2.01806E+11 1 Saved NB No
我使用的功能如下:
library(data.table)
fwrite(Save, "~/Downloads/Register.csv", append = TRUE, sep = ",", quote = TRUE)
可重复的例子:
fwrite(data.table(user="user3",
ref="204094093",
version="2",
status="Pending",
Type="1",DataExtraction="No"),
"~/Downloads/test.csv", sep = ",", append = FALSE)
fwrite(data.table(user="user3",
ref="204094093",
version="2",
status="Pending",
Type="1",DataExtraction="No"),
"~/Downloads/test.csv", sep = ",", append = TRUE)
我不确定它是否隔离了问题,但似乎如果我手动更改.csv文件中的某些内容(例如将DataExtraction重命名为Extraction),则会出现以错误方式附加的问题。 有人知道出了什么问题吗?
谢谢!
答案 0 :(得分:1)
当我运行您的示例代码时,我对该行为没有任何问题 - 该文件根据需要出现。根据您关于手动更改文件内容以及不需要的输出内容的注释,以下是我认为正在发生的事情。当fwrite()
(和许多其他类似的IO函数)写入文件时,每行在其末尾都有一个换行符(在R中,这通常表示为\n
)。这是所希望的,以便随后的数据行确实出现在文件的后续行上。通常这也意味着当您在文本编辑器中打开文件时,最后会有一个空行,因为这反映了写入的最后一行中的换行符。 (不同的编辑器虽然处理方式不同)。因此,我怀疑发生的事情是当你进入并在编辑器中手动编辑文件时,你在某种程度上会丢失最后一个换行符。这意味着当你再次使用append写入时,文件末尾没有换行符,因此你会在文件的一行上得到两行数据的不良行为。
因此,解决方案是找到如何防止手动编辑删除最后一个换行符。除此之外,有一些方法可以使用R.将单个换行符写入文件。使用cat()
函数。