【发布时间】:2014-06-23 22:52:00
【问题描述】:
我在 fread() 使用“\”作为目录分隔符读取一列目录路径时遇到问题。问题是尾随目录分隔符在 fread() 中引发错误。
对于以下示例 csv 文件,
file,size
"windows\user",123
fread() 和 read.csv() 都同意并且都将 \ 转换为 \\
> fread("example.csv")
file size
1: windows\\user 123
但是,对于以下示例,fread() 会出错,而 read.csv() 很好。
file,size
"windows\user\",123
read.csv() 给出
> read.csv("example.csv")
file size
1 windows\\user\\ 123
虽然 fread() 错误看起来像这样
> fread("example.csv",verbose=TRUE)
Input contains no \n. Taking this to be a filename to open
File opened, filesize is 0.000 GB
File is opened and mapped ok
Detected eol as \r\n (CRLF) in that order, the Windows standard.
Using line 2 to detect sep (the last non blank line in the first 'autostart') ... sep=','
Found 2 columns
First row with 2 fields occurs on line 1 (either column names or first row of data)
All the fields on line 1 are character fields. Treating as the column names.
Count of eol after first data row: 2
Subtracted 1 for last eol and any trailing empty lines, leaving 1 data rows
Error in fread("example.csv", verbose = TRUE) :
' ends field 1 on line 1 when detecting types: "windows\user\",123
我真的很想避免这样做
DT = data.table(read.csv("example.csv"))
如果可能的话。
【问题讨论】:
-
碰巧的是,我刚刚在引用字段中与
\n一起修复了这个问题。准备好从GitHub尝试时添加答案。 -
它确实让人想知道什么是“正确的”修复,因为它是由于
scan的有据可查的行为,并且与这个提问者的说法相反,这个例子不适合阅读。 .csv()。 'file,size "windows\user\",123` 抛出错误。 -
@BondedDust
read.csv似乎对我来说读得很好,同意提问者的观点。我查看了?scan- 你是什么意思? -
scan将 '\user' 解释为 ctrl-u 后跟 'ser'。read.csv(text="windows\user\",123", sep=",")返回:错误:在“windows\u”开头的字符串中使用了没有十六进制数字的“\u”。Mac 10.8.5,R 3.1.0 -
@BondedDust 那不是
read.csv,那是解析器。尝试在控制台自己输入"windows\user\",123",你会得到同样的错误。要解析,您需要将 \ 加倍。从询问者显示的内容读取文件时,read.csv(filename)有效。
标签: r data.table