r - 从 fread 中提取行数而不读取整个文件

标签 r windows data.table

我有一个很大的文本文件(475,000,000 行)。我想在不读取文件的情况下快速获取文件中的行数。

fread 来自 data.table 实际上在它继续读取整个文件之前相当快地(大约 10 秒)得出了行号:

fread('D:/text_file.txt',select=1,colClasses="character")
Read 7.1% of 472933221 rows #number of rows appears after 10 seconds

有没有办法在不读取整个文件的情况下提取这个行号?作为记录,读取整个文件需要 36 秒。

我尝试了 R.utils 中的 countLines,但需要 53 秒。不同之处可能在于 fread 有一个选项可以只选择一列,而 countLines 会读取所有内容。

R.utils::countLines("D:/text_file.txt") #53 seconds

我也尝试过其他 Windows 方法,例如:

find /v /c "" "D:\text_file.txt" #takes 1 minute 50 seconds
grep "^" D:\text_file.txt | wc -l #takes 2 minutes

这些可以工作,但它们不如 fread 快。我在 Windows 上。

最佳答案

@d.b 要求我详细回答我自己的问题。作为@G。 Grothendieck 建议,答案是使用 wc,它是 Rtools 的一部分,用于在 Microsoft Windows 下为 R 构建包的资源集合。

安装后,确保 C:\Rtools\bin 位于 Windows 环境变量的 PATH 中。

然后,wc 可用于 R 使用 systemshell:

shell('wc -l "D:/text_file.txt"',intern =TRUE)

关于r - 从 fread 中提取行数而不读取整个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47369687/

相关文章:

r - 在 R 中向后搜索向量/数据表

r - R 中的 map 和动画

r - R中从tibble到txt或excel文件

c++ - 延迟加载的 DLL 在内存中的加载距离彼此太远

r - 使用 data.table 计算 adstock

r - quanteda 字典中的逻辑组合

c++ - TCP Telnet 传输中丢失字符

c++ - 新建然后删除后的内存消耗

r - 在一次 data.table 调用中创建多个变量

r - foreach 拆分 data.tables : Error in { : undefined columns selected 的迭代器问题