我有一个2米+行的文件。
为了避免内存过载,我希望以块的形式读取这些行,然后使用块中的行进行进一步处理。
我读到readLines
是最快的,但我找不到用readlines
读取块的方法。
raw = readLines(target_file, n = 500)
但我想要的是readLines
n = 501:1000
,例如。
raw = readLines(target_file, n = 501:1000)
有没有办法在R中执行此操作?
答案 0 :(得分:1)
也许这有助于未来的人:
readr
包正是我正在寻找的:一个以块的形式读取行的函数。
read_lines_chunked
以行的行读取文件,然后期望在这些块上运行回调。
让f
成为存储块以供以后使用所需的函数:
f = function(x, pos){
filename = paste("./chunks/chunk_", pos, ".RData", sep="")
save(x, file = filename)
}
然后我可以在主包装器中使用它:
read_lines_chunked(file = target_json
, chunk_size = 10000
, callback = SideEffectChunkCallback$new(f)
)
作品。
答案 1 :(得分:0)
我不知道你有多少变量(列),但data.table::fread
是你想要的一个非常快的替代品:
require(data.table)
raw <- fread(target_file)