data.table fread没有看到" ^ M"再作为新行

时间:2018-06-19 00:05:40

标签: r data.table

data.table问题报告网站对于无聊的报告持谨慎态度。运行1.11.4版本的人可以在我报告t之前为我确认这个问题吗?

我们有一个较旧的脚本,无需复杂地导入从Qualtrics分发的一些CSV文件。这些Qualtrics文件,我现在不允许向您展示,它们具有大量复杂的字符串,在前100行中有嵌入式回车符。但是,我有一个最小可重复的例子。 R&s的read.csv失败了,不知何故,data.table fread一直是冠军。 Qualtrics文件在row1中有变量名,然后问题本身被输入到下一行。在问题中间随机放置回车(可能是从MS Word文件粘贴)。

今天我们注意到fread不再有效。我刚刚测试了几次,安装了data.table 1.10.4-3(没有遇到麻烦)和当前的1.11.4确实导致了问题。我的最小可重复示例的问题的症状是

> library(data.table)
data.table 1.11.4  Latest news: http://r-datatable.com
> fread("dt-test.csv")
   id,y,x1,x2\rRespondentidentification,      "An
1:                            variable", "Working
2:                               input",    "more
                                  outcome
1:                                     on
2: input"\rResp1,33,22,33\rResp2,31,19,32
Warning message:
In fread("dt-test.csv") :
  Found and resolved improper quoting in first 100 rows. If the fields are not quoted (e.g. field separator does not appear within any field), try quote="" to avoid this warning.

当您检查麻烦的CSV文件时,您会看到Qualtrics提供了第2行,它在引用的字符串中间嵌入了回车符。这些事情导致R的read.csv失败,为什么我开始首先使用fread。但是,在故障文件中有Windows回车符号," ^ M"我们期望实际的新线路。如果我用" ^ M"回车,然后问题解决了。

现在,关于我的MRE。当我尝试将其粘贴在这里时," ^ M"新的线条符号变成了新的线条!所以我放入" ^ M"符号应该是文字。这模仿了Qualtrics文件的错误结构:

id,y,x1,x2^MRespondentidentification, "An outcome 
variable", "Working on
input", "more input"^MResp1,33,22,33^MResp2,31,19,32

我在这里放了一份最小测试文件的副本:http://pj.freefaculty.org/scraps/dt-test.csv 如果你们其中一个勇敢的灵魂愿意测试确认

我刚注意到LibreOffice打开了该文件,它识别出" ^ M"作为新线,它保护第2行中间的回车。

会话信息:

> sessionInfo()
R version 3.4.4 (2018-03-15)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04 LTS

Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C
 [9] LC_ADDRESS=C               LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C

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

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

loaded via a namespace (and not attached):
[1] compiler_3.4.4

0 个答案:

没有答案