Поведение фреда для столбцов в кавычках в версии 1.11.0 - PullRequest
0 голосов
/ 08 мая 2018

С недавними изменениями в fread в data.table Версия 1.11.0 (1 мая 2018 г.), похоже, испытывает затруднения при распознавании правильных значений na.strings в столбцах с кавычками.

Поведение по умолчанию в сочетании с fwrite прекрасно работает, как описано в NEWS и показано в рабочем примере ниже (fread(fwrite(DT))==DT).

Однако, если файлы записываются с использованием fwrite(DT, quote = TRUE), имитирующим поведение write.csv или при записи файлов напрямую с использованием write.csv, fread, похоже, испытывает проблемы с обнаружением правильных строк, указанных в na.strings (показано в нерабочий пример ниже).

рабочий пример

dt <- data.table(A = c(1, 2, 3), B = c("a", "b", NA))
fwrite(dt, "testfile.csv")

# expected output
str(fread("testfile.csv", na.strings = c("a", "")))

Classes ‘data.table’ and 'data.frame':  3 obs. of  2 variables:
 $ A: int  1 2 3
 $ B: chr  NA "b" NA
 - attr(*, ".internal.selfref")=<externalptr> 

Спецификация na.strings, кажется, прекрасно работает в этом примере, используя символы без кавычек.

нерабочий пример

Использование data.table dt из приведенного выше примера:

fwrite(dt, "testfile_quoted.csv", quote = TRUE)  # mimicing write.csv

Здесь указание na.strings = "" также дает ожидаемый результат

str(fread("testfile_quoted.csv", na.strings = ""))

Classes ‘data.table’ and 'data.frame':  3 obs. of  2 variables:
 $ A: int  1 2 3
 $ B: chr  "a" "b" NA
 - attr(*, ".internal.selfref")=<externalptr> 

Однако попытка указать na.strings = c("a", ""), как в примере выше, дает неожиданный результат:

str(fread("testfile_quoted.csv", na.strings = c("a", "")))

Classes ‘data.table’ and 'data.frame':  3 obs. of  2 variables:
 $ A: int  1 2 3
 $ B: chr  "a" "b" NA
 - attr(*, ".internal.selfref")=<externalptr> 

Ожидаемый результат для столбца B должен быть c(NA, "b", NA), как в рабочем примере выше.

Указание кавычек в na.strings напрямую также не меняет результат для меня.

str(fread("testfile_quoted.csv", na.strings = c("\"a\"", "")))

Classes ‘data.table’ and 'data.frame':  3 obs. of  2 variables:
 $ A: int  1 2 3
 $ B: chr  "a" "b" NA
 - attr(*, ".internal.selfref")=<externalptr> 

Я что-то здесь упускаю?

До версии 1.11.0 у меня не было этих проблем. Есть ли способ восстановить старое поведение fread таким образом, чтобы была сохранена согласованность со старыми файлами, записанными с write.csv?


Информация о сеансе

sessionInfo()

R version 3.5.0 (2018-04-23)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

Matrix products: default

locale:
[1] LC_COLLATE=German_Austria.1252  LC_CTYPE=German_Austria.1252   
[3] LC_MONETARY=German_Austria.1252 LC_NUMERIC=C                   
[5] LC_TIME=German_Austria.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] data.table_1.11.0

loaded via a namespace (and not attached):
[1] compiler_3.5.0 tools_3.5.0   
  [1]: https://github.com/Rdatatable/data.table/blob/master/NEWS.md
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...