Одновременный импорт больших файлов CSV в R

У меня в папке 70 csv файлов с одинаковыми столбцами, каждый по 0,5 ГБ. Я хочу импортировать их в единый фрейм данных в R.

Обычно я импортирую каждый из них правильно, как показано ниже:

df <- read_delim("file.csv", 
"|", escape_double = FALSE, col_types = cols(pc_no = col_character(), 
    id_key = col_character()), trim_ws = TRUE)

Чтобы импортировать все из них, закодированные таким образом, и ошибка следующим образом: аргумент «разделитель» отсутствует, по умолчанию нет

tbl <-
list.files(pattern = "*.csv") %>% 
map_df(~read_delim("|", escape_double = FALSE, col_types = cols(pc_no = col_character(), id_key = col_character()), trim_ws = TRUE))

С read_csv импортируется, но отображается только один столбец, содержащий все столбцы и значения.

 tbl <-
 list.files(pattern = "*.csv") %>% 
 map_df(~read_csv(., col_types = cols(.default = "c")))

person kimi    schedule 19.10.2018    source источник
comment
Итак, первым позиционным параметром для read_delim является file, а не delim, поэтому, возможно, вам следует назвать параметр или фактически передать .x или . первому параметру.   -  person hrbrmstr    schedule 19.10.2018
comment
Кадир, вы находитесь в рамках своих прав, решив не принимать ни один из ответов на ваши прошлые вопросы. Однако принятие ответа не только дает ответчику некоторую привилегию, но и закрывает его для читателей с похожими вопросами. Не могли бы вы вернуться к своим предыдущим вопросам и принять по одному от каждого? stackoverflow.com/help/someone-answers   -  person r2evans    schedule 19.10.2018
comment
Кажется, что другие ответили на ваш прямой вопрос, но я также рекомендую вам рассмотреть функцию fread из библиотеки data.table. По моему опыту, fread намного быстрее читает большие файлы, и вы можете сразу же преобразовать его в data.frame в соответствии с вашими потребностями.   -  person Jay    schedule 19.10.2018


Ответы (1)


Во втором блоке кода вам не хватает ., поэтому read_delim интерпретирует ваши аргументы как read_delim(file="|", delim=<nothing provided>, ...). Пытаться:

tbl <- list.files(pattern = "*.csv") %>% 
  map_df(~ read_delim(., delim = "|", escape_double = FALSE,
                      col_types = cols(pc_no = col_character(), id_key = col_character()),
                      trim_ws = TRUE))

Я явно указал здесь delim=, но это не является строго необходимым. Если бы вы сделали это с первой попытки, вы бы увидели

readr::read_delim(delim = "|", escape_double = FALSE,
                  col_types = cols(pc_no = col_character(), id_key = col_character()),
                  trim_ws = TRUE)
# Error in read_delimited(file, tokenizer, col_names = col_names, col_types = col_types,  : 
#   argument "file" is missing, with no default

что больше указывает на реальную проблему.

person r2evans    schedule 19.10.2018