ska*_*kan 0 size row r file data.table
我想使用data.table处理一个很大的文件。它不适合内存。我曾考虑过使用循环(正确增加skip参数)读取大块文件。
fread("myfile.csv", skip=loopindex, nrows=chunksize)
Run Code Online (Sandbox Code Playgroud)
处理每个这些块,并用fwrite附加结果输出。
为了正确执行此操作,我需要知道行的总数,而无需读取整个文件。
什么是正确/更快的方法?
我只能考虑仅阅读第一列,但也许有一个特殊的命令或技巧。或者也许有一种自动的方法来检测文件的结尾。
1)count.fields不确定是否count.fields一次将整个文件读入R。尝试看看是否可行。
length(count.fields("myfile.csv", sep = ","))
Run Code Online (Sandbox Code Playgroud)
如果文件具有标题,请从上面减去1。
2)sqldf的另一种可能性是:
library(sqldf)
read.csv.sql("myfile.csv", sep = ",", sql = "select count(*) from file")
Run Code Online (Sandbox Code Playgroud)
您可能还需要其他参数,具体取决于标头等。请注意,这根本不会将文件读入R中-仅读入sqlite中。
3)wc使用系统命令wc,该命令应在R运行的所有平台上可用。
shell("wc -l myfile.csv", intern = TRUE)
Run Code Online (Sandbox Code Playgroud)
或直接获取文件中的行数
read.table(pipe("wc -l myfile.csv"))[[1]]
Run Code Online (Sandbox Code Playgroud)
要么
read.table(text = shell("wc -l myfile.csv", intern = TRUE))[[1]]
Run Code Online (Sandbox Code Playgroud)
同样,如果有标题,则减去1。
如果您使用的是Windows,请确保已安装Rtools并使用此工具:
read.table(pipe("C:\\Rtools\\bin\\wc -l myfile.csv"))[[1]]
Run Code Online (Sandbox Code Playgroud)
在没有Rtools的Windows上,也可以尝试以下操作:
read.table(pipe('find /v /c "" myfile.csv'))[[3]]
Run Code Online (Sandbox Code Playgroud)
请参见如何计算文本文件中的行数,以及如何使用批处理脚本将值存储到变量中?
| 归档时间: |
|
| 查看次数: |
2280 次 |
| 最近记录: |