【问题标题】:fread not recognizing a bare + or - as a character fieldfread 无法将裸 + 或 - 识别为字符字段
【发布时间】:2013-05-28 21:18:54
【问题描述】:

我正在尝试对一些看起来像这样且大小约为 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 仍在开发中,这可能是一个错误吗?

【问题讨论】:

    标签: r data.table fread


    【解决方案1】:

    似乎fread.c 中的静态函数Strtoll(在data.table 1.8.8 源中)扫描前导+-,并且还确保至少已使用一个字符确定它是否扫描了一个整数。

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

    看起来像一个错误。

    【讨论】:

      【解决方案2】:

      两件事:

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

      第二个,this has been rectified in data.table version 1.8.9,您可以使用以下方式安装:

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

      如果需要,你可以安装devtools,然后使用dev_mode(TRUE)进入开发模式,然后在那里安装data.table,这样就不会妨碍你正常运行data.table 1.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
      
      ....
      

      【讨论】:

      • 我怀疑很多人会遇到这种行为,但很高兴听到它已得到修复。
      • @MatthewLundberg,是的。我想主要是生物信息学家/计算生物学家。我也遇到了同样的问题。
      • 谢谢@Arun。很高兴听到此问题已得到修复,因为 fread 将在每个文件中节省几分钟。关于您的问题,我的原始文件中没有引用 + 和 - 并且您猜对了:我是一名生物信息学家 :)
      猜你喜欢
      • 2019-06-09
      • 2011-06-25
      • 2014-06-21
      • 2021-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      相关资源
      最近更新 更多