R fread data.table不一致的速度

vin*_*h85 5 r data.table

我观察到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
Run Code Online (Sandbox Code Playgroud)

我必须阅读所有数字文件的第6列.最初我发现fread比较快

 scan(pipe("cut -f6  SNP.major.gff"),  sep="\n")
Run Code Online (Sandbox Code Playgroud)

因为剪切功能耗费了大量的时间.

为什么fread的行为不一致?是否有更快的方式来读取一列?

Mat*_*wle 5

为什么需要2个小时才能加载?

请再次运行它verbose=TRUE并在问题中包含完整输出.也许操作系统把它放在后台,而其他东西跑了,或类似的东西.您的笔记本电脑在那段时间暂停或休眠了吗?还请包括输出sessionInfo().

是否有更快的方式来读取一列?

是.您可以将列名称或位置的向量传递给select参数.见?fread.但我怀疑这两个问题是无关的.


Jac*_*b H 5

我遇到了类似的问题。也就是说,我第一次运行 fread 时它非常慢,但是,连续运行要快得多。就我而言,这是因为我在我大学的计算机实验室使用计算机。因此,数据不在我的机器本地,而是在网络上。这意味着运行 fread 所花费的大部分时间实际上是通过网络传输数据并传输到我的本地工作内存中来表示的。事实证明了这一点,即当我在第一次运行时为我的代码计时时,user time+ sys. time<< elapsed time

但是,当您加载一次数据时,它会暂时位于您的工作内存中,即 RAM。因此,使用相同数据连续调用 fread 的速度要快得多。