fwrite(,append = TRUE)以错误的方式追加

时间:2018-06-10 04:11:53

标签: r data.table fwrite

我在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),则会出现以错误方式附加的问题。 有人知道出了什么问题吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

当我运行您的示例代码时,我对该行为没有任何问题 - 该文件根据需要出现。根据您关于手动更改文件内容以及不需要的输出内容的注释,以下是我认为正在发生的事情。当fwrite()(和许多其他类似的IO函数)写入文件时,每行在其末尾都有一个换行符(在R中,这通常表示为\n)。这是所希望的,以便随后的数据行确实出现在文件的后续行上。通常这也意味着当您在文本编辑器中打开文件时,最后会有一个空行,因为这反映了写入的最后一行中的换行符。 (不同的编辑器虽然处理方式不同)。因此,我怀疑发生的事情是当你进入并在编辑器中手动编辑文件时,你在某种程度上会丢失最后一个换行符。这意味着当你再次使用append写入时,文件末尾没有换行符,因此你会在文件的一行上得到两行数据的不良行为。

因此,解决方案是找到如何防止手动编辑删除最后一个换行符。除此之外,有一些方法可以使用R.将单个换行符写入文件。使用cat()函数。

相关问题