Как указать классы столбцов и отключить научную нотацию c при чтении csv по частям в R? - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь 1) прочитать большой CSV (44 ГБ) в R, используя новую функцию read_csv_chunkwise в пакете chunked, затем 2) отфильтровать только строки, соответствующие вектору идентификаторов, которые я хочу сохранить.

Когда я пытаюсь собрать куски и записать выходной файл, я получаю сообщение об ошибке: «Ошибка в .local (x, ...): сбой при преобразовании в int; строка = 1072921; столбец = 1; строка = '2е + 05'». Я думаю, что при написании этого файла (используя fwrite) он преобразовал длинные числа в научную нотацию c. В фрагментарной документации (https://www.rdocumentation.org/packages/chunked/versions/0.2.1/topics/read_csv_chunkwise) я не вижу аргумента colClasses () или чего-либо подобного.

library(tidyverse)
library(chunked)

to_keep_vec <- seq(from = 100, to = 4000000, by = 500) # vector of ~8000 ids

big_file <- "pathtolargefile.csv" # 44GB csv with ~8 character and numeric columns

# read in chunks
file_chunked <- 
  read_csv_chunkwise(big_file,chunk_size = 100000L,header = TRUE,stringsAsFactors = FALSE,sep = ",") %>%
  filter(id %in% to_keep_vec) # this works, but it hasn't processed anything yet

# process
system.time(file_out <- collect(file_chunked)) # Error in .local(x, ...):Conversion to int failed; line=1072921; column=1; string='2e+05'

Я пробовал установить параметр (scipen = 999) перед чтением кусками и преобразовать в цифру c перед сбором

file_chunked$id <- as.numeric(as.character(file_chunked$id))

Но я получаю ту же ошибку. Я думаю, что есть способы сделать это с помощью fread в al oop, но мне действительно нравится интуитивно понятный синтаксис.

...