Захватите загрузку данных из fread в блестящий индикатор с прогрессом в R - PullRequest
0 голосов
/ 13 ноября 2018

Я загружаю в большой файл данных, используя fread из: library(data.table). fread по умолчанию показывает, сколько времени занимает чтение файла, но выводит только на консоль .

Я бы хотел зафиксировать время загрузки данных и отобразить его в реальном времени в блестящем приложении, чтобы пользователь понимал причину задержки и ориентировочно сколько времени занимает чтение данных. Я хотел бы использовать withProgress, так как это создает полосу загрузки, и вы можете отобразить текст, определяющий, что делает программа.

Как правило, withProgress увеличивается по числовой шкале с использованием incProgress, однако я ищу способ сделать что-то вроде этого:

withProgress(message = 'Loading Data', {
        d <- fread("file_name.csv") # Pick a random (large) file to load
})

Проблема с приведенным выше кодом заключается в том, что строка загрузки не увеличивается (я не думаю, что withProgress автоматически определяет загрузку по fread). Индикатор загрузки отображается и увеличивает его на небольшую величину, но он неправильно фиксирует время загрузки с fread.

Update
Мне удалось найти этот аналогичный вопрос, однако единственный ответ на этот вопрос использует полосу загрузки, чтобы указать прогресс загрузки многих файлов (Loaded 2 of n files). Моя проблема заключается в попытке показать прогресс чтения в одном большом файле.
Я знаю, fread знает, сколько строк содержит файл после первоначального сканирования, потому что в консоли он показывает прогресс. Мне просто нужно знать, как подключиться к нему, чтобы использовать его в индикаторе выполнения.

Вот пример того, как fread отображает текущее чтение: fread progress

Документация на фред
Если вы посмотрите документацию для fread, то вот что она говорит о встроенной опции showProgess:

TRUE displays progress on the console using \r. 
It is produced in freads C code where the very nice (but R level)
txtProgressBar and tkProgressBar are not easily available.
showProgress = getOption("datatable.showProgress")  # default: TRUE
...