我想读取较大的csv文件,但遇到内存问题。因此,我想尝试使用read_csv_chunked()
包中的readr
读取它们。我的问题是我不太了解callback
参数。
这是到目前为止我尝试过的一个最小的示例(我知道我必须将所需的操作包含在f()
中,否则就内存使用而言没有优势,对吧?):
library(tidyverse)
data(diamonds)
write_csv(diamonds, "diamonds.csv") # to have a csv to read
f <- function(x) {x}
diamonds_chunked <- read_csv_chunked("diamonds.csv",
callback = DataFrameCallback$new(f),
chunk_size = 10000)
我试图使
callback
参数与官方文档中的示例保持接近:# Cars with 3 gears
f <- function(x, pos) subset(x, gear == 3)
read_csv_chunked(readr_example("mtcars.csv"),
DataFrameCallback$new(f),
chunk_size = 5)
但是,我收到下面的错误,由于我看到进度条移至18%,因此似乎在读取第一个块之后出现。
Error in eval(substitute(expr), envir, enclos) : unused argument (index)
我已经尝试在
f()
中包含要进行的操作,但是仍然遇到相同的错误。
最佳答案
我发现要在DataFrameCallback$new()
中调用的函数始终需要有一个附加参数(本文档示例中的pos
)。不必使用该参数,因此我并不真正理解其目的。但至少,它以这种方式工作。
有谁知道关于第二个论点的更多细节?
关于使用 `readr::read_csv_chunked()`批量读取csv文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43677277/