R data.table fread如何处理嵌入的^ @字符?

时间:2019-04-17 10:44:09

标签: r data.table

我无法通过fread读取此csv:

abstract class APICallback<T> implements Callback<T> {

    abstract void onSuccess(Call<T> call, T result);

    @Override
    public void onResponse(Call<T> call, Response<T> response) {
        if (response.body() != null) {

            if (response.body() instanceof APIError) {
                // this is not working
            } else {
                onSuccess(call, response.body());
            }
        } else {
            apiError = new APIError("Unknown error");
            bus.post(new APIErrorEvent(apiError));
        }
    }

    @Override
    public void onFailure(@NonNull Call<T> call, @NonNull Throwable t) {
        String message = t.getLocalizedMessage() != null ? t.getLocalizedMessage() : "Unknown error";
        apiError = new APIError(message);
        bus.post(new APIErrorEvent(apiError, source));
    }
}

我认为是因为在vim中我看到了这些字符:

➜  Downloads cat t2.csv 
47616412|76-398-12||||7639812
47616413|53-1696-18||||53169618

fread在第4列放了一个换行符。如何处理?

修改1

请注意,标准控制台输出不显示这些字符:

47616412|76-398-12||^@||7639812

我只在vim中看到它们:

➜  Downloads cat t2.csv 
47616412|76-398-12||||7639812
47616413|53-1696-18||||53169618

修改2

进一步注意47616412|76-398-12||^@||7639812 47616413|53-1696-18||^@||53169618 read.csv的工作原理:

skipNul

修改3

这是文件! dropbox download

1 个答案:

答案 0 :(得分:4)

这已在dev 1.12.3中修复(请参见NEWS):

  
      
  1. fread()现在跳过嵌入式NUL(\ 0)#3400。感谢Marcus Davy提供的示例报告,以及Roy Storey的初始PR。
  2.   

我检查了您附加到该问题的文件,在CRAN上的1.12.2确实失败了,但是可以在dev中使用。

> library(data.table)   # v1.12.2 on CRAN 07 Apr 2019
> fread("~/Downloads/t2.csv")
Empty data.table (0 rows and 1 cols): 47616412|76-398-12||
Warning message:
In fread("~/Downloads/t2.csv") :
  Stopped early on line 2. Expected 1 fields but found 1. Consider fill=TRUE
  and comment.char=. First discarded non-empty line: <<>>

但是在dev 1.12.3中它现在可以工作了:

> library(data.table)   # v1.12.3 in development as of 17 Apr 2019
> fread("~/Downloads/t2.csv")
         V1         V2     V3     V4     V5       V6
      <int>     <char> <lgcl> <lgcl> <lgcl>    <int>
1: 47616412  76-398-12     NA     NA     NA  7639812
2: 47616413 53-1696-18     NA     NA     NA 53169618
>