fwrite (, append = TRUE) добавляет неправильный путь - PullRequest
0 голосов
/ 10 июня 2018

Я столкнулся с проблемой с функцией fwrite из пакета DataTable в R. На самом деле она добавляется неверно, и я получаю что-то вроде:

**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 голосов
/ 10 июня 2018

Когда я запускаю ваш пример кода, у меня нет проблем с поведением - файл выходит по желанию.Основываясь на ваших комментариях о том, как вручную изменить содержимое файла и как выглядит нежелательный результат, я думаю, что это происходит.Когда fwrite() (и многие другие подобные функции ввода-вывода) записывают в файл, каждая строка имеет в конце разрыв строки (в R это обычно представляется как \n).Это желательно, чтобы последующие строки данных действительно появлялись в последующих строках файла.Как правило, это также означает, что при открытии файла в текстовом редакторе в самом конце будет пустая строка, поскольку это отражает разрыв строки в последней написанной строке.(разные редакторы обрабатывают это по-разному).Итак, я подозреваю, что происходит, когда вы входите и вручную редактируете файл в вашем редакторе, вы как-то теряете последний разрыв строки.Это означает, что при повторной записи с использованием команды append в конце файла не возникает разрыв строки, и поэтому вы получаете нежелательное поведение двух строк данных в одной строке файла.

Таким образом, решение состоит в том, чтобы найти, как предотвратить редактирование вручную последнего символа перевода строки.За исключением этого, есть способы просто записать один символ переноса строки в файл, используя REg с функцией cat().

...