Я пытаюсь импортировать несколько .csv
файлов размером не менее 1 ГБ, используя lapply
и read_csv_chunked
.Для создания примеров данных рассмотрим:
A <- data.frame(id = sample(c("A","B","C"), 100, replace = T), k = rnorm(100), j = rnorm(100), l = rnorm(100)); write_csv(A, "A.csv")
B <- data.frame(id_limp = sample(c("A","B","C"), 100, replace = T), k = rnorm(100), j = rnorm(100), l = rnorm(100)); write_csv(B, "B.csv")
C <- data.frame(id = sample(c("A","B","C"), 100, replace = T), k = rnorm(100), j = rnorm(100), l = rnorm(100)); write_csv(C, "C.csv")
D <- data.frame(id_samp = sample(c("A","B","C"), 100, replace = T), k = rnorm(100), j = rnorm(100), l = rnorm(100)); write_csv(D, "D.csv")
E <- data.frame(id = sample(c("A","B","C"), 100, replace = T), k = rnorm(100), j = rnorm(100), l = rnorm(100)); write_csv(E, "E.csv")
Функции, используемые для read_csv_chunked
, следующие:
f <- function(x, pos) if("id" %in% names(x)) { subset(x, id == "A")} else if ("id_limp" %in% names(x)) {subset(x, id_limp == "A")} else {subset(id_samp == "A")}
file_list <- list.files(pattern = ".csv")
data <- lapply(file_list, read_csv_chunked, callback = DateFrameCallback$new(f),chunk_size = 10)
names(data)<- tolower(word(gsub("[[:punct:]]+"," ",file_list), 1))
list2env(data, envir = .GlobalEnv)
rm(data)
Где f
- это callback
функция, необходимая для read_csv_chunked
(или, по крайней мере, это так), file_list
- это список файлов в папке, которые .csv
, data
передают функцию lapply
, names(data)
дает имя тибблув data
и list2env
записывает части data
в мою среду.
Я получаю ошибку:
Error in as_chunk_callback(callback) :
object 'DateFrameCallback' not found
Может кто-нибудь объяснить, почему я получаю эту ошибку?Я не получаю ошибку, если не читаю csv
по одному и без lapply
.Что это за исправление?Или есть лучшее решение?