我观察到fread函数的data.table的速度不一致。我需要2个大小约为8 GB的文件。文件的内容(几乎)相同。读两个文件的时间差别很大。
control.major <- fread("control.major.gff")$V6
Read 19.8% of 98100000 rows
Read 98100000 rows and 10 (of 10) columns from 7.947 GB file in 02:06:58
control.minor <- fread("control.minor.gff")$V6
Read 98100000 rows and 10 (of 10) columns from 7.947 GB file in 00:03:15
我必须阅读所有数字文件的第6列。最初我发现与
相比,fread更快 scan(pipe("cut -f6 SNP.major.gff"), sep="\n")
因为削减功能耗费了大量时间。
为什么fread的行为不一致?有没有更快的方法来读取一列?
答案 0 :(得分:5)
为什么要加载2个小时?
请使用verbose=TRUE
再次运行,并在问题中包含完整输出。也许操作系统把它放在后台,而其他东西跑了,或类似的东西。您的笔记本电脑在那段时间暂停或休眠了吗?还请包含sessionInfo()
的输出。
是否有更快的方式来阅读一列?
是。您可以将列名称或位置的向量传递给select
参数。见?fread
。但我怀疑这两个问题是无关的。
答案 1 :(得分:4)
我有类似的问题。也就是说,我第一次跑步时它非常慢,但连续跑步要快得多。在我的情况下,这是因为我在大学的计算机实验室工作。因此,数据不在我的机器上本地,而是在网络上。这意味着运行fread所花费的大部分时间实际上是通过网络传输数据并进入我的本地工作内存来实现的。事实证明,当我在第一次运行时计算代码时,user time
+ sys. time
&lt;&lt; elapsed time
。
然而,当您加载一次数据时,它暂时存在于您的工作内存中,即RAM。因此,使用相同数据连续调用fread的速度要快得多。
我知道这是一个旧线程,但当我试图通过fread解决我的问题时,我可以解决这个问题。所以我希望这有助于其他有类似问题的人!