Более быстрый способ чтения одного столбца файла CSV

Я пытаюсь как можно быстрее прочитать один столбец файла CSV на R. Я надеюсь сократить стандартные методы с точки зрения времени, затрачиваемого на то, чтобы получить столбец в ОЗУ в 10 раз.

Какова моя мотивация? У меня два файла; один называется Main.csv, который составляет 300000 строк и 500 столбцов, а один называется Second.csv, который составляет 300000 строк и 5 столбцов. Если я system.time() команда read.csv("Second.csv"), это займет 2,2 секунды. Теперь, если я использую один из двух методов ниже, чтобы прочитать первый столбец Main.csv (что составляет 20% от размера Second.csv, так как это 1 столбец вместо 5), это займет более 40 секунд. Это тот же самый промежуток времени, который требуется для чтения всего файла размером 600 мегабайт, явно неприемлемого.

  • Способ 1

    colClasses <- rep('NULL',500)
    
    colClasses[1] <- NA
    system.time(
    read.csv("Main.csv",colClasses=colClasses)
    ) # 40+ seconds, unacceptable
    
  • Способ 2

     read.table(pipe("cut -f1 Main.csv")) #40+ seconds, unacceptable
    

Как уменьшить это время? Я надеюсь на решение R.

Ответ 1

Я бы предложил

scan(pipe("cut -f1 -d, Main.csv"))

Это отличается от исходного предложения (read.table(pipe("cut -f1 Main.csv"))) несколькими способами:

  • поскольку файл разделен запятыми и cut предполагает разделение табуляции по умолчанию, вам нужно указать d,, чтобы указать разделение запятой
  • scan() намного быстрее, чем read.table для чтения простых/неструктурированных данных.

В соответствии с комментариями OP это занимает около 4, а не 40 + секунд.