【发布时间】:2014-02-13 10:54:25
【问题描述】:
我正在使用来自data.table 的fread() 有效地将大型矩形CSV 文件读入R,这些文件都是double(并且只有double)值——没有丢失元素。
但是,如果我的科学记数法中的数字非常小,它会转换为字符,从而破坏整个阅读过程。这是错误信息(例如,每个小数字有多个):
16:在 fread("SomeCSVFile") 中:
碰撞列 560 以在数据行 16799 上键入字符,字段包含“-2.1412168512924677E-308”。将此列中先前读取的值从整数或数字强制转换回可能不是无损的字符;例如,如果 '00' 和 '000' 在它们现在只是 '0' 之前出现,并且对 ',,' 和 ',NA,' 的处理也可能存在不一致(如果它们在颠簸之前出现在此列中)。如果这很重要,请重新运行并将此列的“colClasses”设置为“字符”。请注意,列类型检测使用前 5 行、中间 5 行和最后 5 行,因此希望此消息应该很少见。如果向 datatable-help 报告,请重新运行并包含 verbose=TRUE 的输出。
我希望函数将它们设置为零或将它们截断为可能的最小值(两者都可以)。
【问题讨论】:
-
通过提供一些重现问题的示例数据,可以极大地改善这个问题。
-
真正的问题是什么?你对这些小价值有什么实际用处吗?谁首先允许 Excel 工作表生成它们?如果您无论如何要将它们设置为零,只需将它们读入然后
matrix[is.character(matrix)]<-numeric(0) -
@CarlWitthoft 我不使用 Excel,但感谢您的解决方案。
-
糟糕,我假设所有
csv都是从 Excel 的邪恶坑中产生的。 -
当我尝试输入具有非常小的指数的数字时,它们被读取为 0 - 您需要为您的设置添加一个可重现的示例 + 操作系统/包详细信息 - 因为这不是一个好问题
标签: r csv memory-management data.table