3

我正在尝试对一些看起来像这样并且大小约为 2GB 的文件进行 fread:

head file.bed
chr1    19922471        19924471        +       NM_001204088    tss     1       0
chr1    19922471        19924471        +       NM_001204088    tss     2       0
chr1    19922471        19924471        +       NM_001204088    tss     3       0
chr1    19922471        19924471        +       NM_001204088    tss     4       0
chr1    19922471        19924471        +       NM_001204088    tss     5       0
chr1    19922471        19924471        +       NM_001204088    tss     6       0
chr1    19922471        19924471        +       NM_001204088    tss     7       0
chr1    19922471        19924471        +       NM_001204088    tss     8       0
chr1    19922471        19924471        +       NM_001204088    tss     9       0
chr1    19922471        19924471        +       NM_001204088    tss     10      0

第 4 列也有类似数量的“-”。在 R 中读取 +/- 变为 0:

cov.data <- fread(file)
head(cov.data)
     V1       V2       V3 V4           V5  V6 V7 V8
1: chr1 19922471 19924471  0 NM_001204088 tss  1  1
2: chr1 19922471 19924471  0 NM_001204088 tss  2  1
3: chr1 19922471 19924471  0 NM_001204088 tss  3  1
4: chr1 19922471 19924471  0 NM_001204088 tss  4  1
5: chr1 19922471 19924471  0 NM_001204088 tss  5  1
6: chr1 19922471 19924471  0 NM_001204088 tss  6  0

我查看了文档,但不知道为什么。有什么建议么?由于 fread 仍在开发中,这可能是一个错误吗?

4

2 回答 2

4

两件事情:

首先,如果您的文件带有引号,也就是说,如果您的列strand"+"or "-",那么freaddata.table版本 1.8.8 开始将正确读取。

其次,这已在data.table1.8.9 版本中得到纠正,您可以使用以下方式安装:

install.packages("data.table",repos="http://R-Forge.R-project.org", type="source")

如有必要,您可以安装devtools然后使用dev_mode(TRUE)进入开发模式,然后data.table在那里安装,这样就不会妨碍您正常运行data.table1.8.8。

从 1.8.9 复制/粘贴相关变更日志:

NEW FEATURES
o  fread :
   * If some column names are blank they are now given default names rather than causing
       the header row to be read as a data row. Thanks to Simon Judes for suggesting.

   * "+" and "-" are now read as character rather than integer 0. Thanks to Alvaro Gonzalez for reporting.
   https://stackoverflow.com/questions/15388714/reading-strand-column-with-fread-data-table-package

....
于 2013-06-02T16:32:59.097 回答
3

似乎(在1.8.8 源代码Strtoll中)中的静态函数扫描前导or ,并且还确保已消耗至少一个字符以确定它是否已扫描整数。fread.cdata.table+-

然后逻辑从累加器 0 开始,并将其乘以 10 并添加每个数字。没有找到非数字,所以函数返回 TRUE。

看起来像一个错误。

于 2013-06-02T16:24:26.783 回答