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

fwrite(, append = TRUE) appends wrong way

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

谢谢!

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

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