最近对data.table版本1.11.0(2018年5月1日)fread
的更改似乎无法识别带引号字符列的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