Странный выход из теста при вызове из knitr

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

## 
0%

даже несмотря на то, что verbose вариант fread был установлен в FALSE. Я использовал sink чтобы скрыть этот вывод, но я хотел бы сообщить точную проблему автору (ов) пакета. Здесь минимальный пример,

library(knitr)

test = "'''{r}
require(data.table) 
fread('1 2 3\n')
'''"
knit2html(text=test, output="test.html")
browseURL("test.html")

Какой выход 0%?

Ответ 1

Это счетчик% прогресса. Для меня он печатает 0%, 5%, 10%,... 95%, 100% (например) с помощью \r в конце, чтобы он отображался на одной строке чуть ниже вызова в fread при вводе в строке,

Но при вызове из функций, партий и ножей это нежелательно. Теперь это было удалено. Из НОВОСТИ за v.1.8.9 (rev 851):

  • % progress console meter удален. Вывод был неудобным в пакетном режиме, журнальных файлах и отчетах, которые не обрабатывают \r. Слишком сложно определить, откуда вызывается fread, а также, удаляя его, немного ускоряет fread, сохраняя код внутри цикла C (поэтому он не стал необязательным). Используйте монитор системы вашей операционной системы, чтобы подтвердить, что продвигается продвижение. Благодаря Baptiste для подсветки:
    Странный выход из теста при вызове из knitr

Просто быстрое напоминание о полноте. С вершины ?fread:

Эта функция все еще находится в разработке. Например, даты считываются как символ (их можно впоследствии преобразовать с использованием превосходного пакета быстрого времени или стандартных базовых функций), а встроенные кавычки ("\" и "" "") имеют проблемы. Существуют и другие известные проблемы, которые не имеют были исправлены, а функции еще не реализованы, но вы можете обнаружить, что он работает во многих случаях. Сообщите о проблемах с помощью datatable-help или Qaru data.table.

Не для использования в производстве. Не потому, что он нестабилен в том смысле, что он сбой или глючит (ваше тестирование покажет, является ли оно стабильным в ваших случаях или нет), но потому, что в будущем будут изменяться аргументы и поведение в fread. т.е. мы ожидаем сделать (надеюсь, незначительные) изменения без обратной совместимости. Почему он был выпущен в CRAN? Поскольку заказчикам CRAN было предложено техническое обслуживание, чтобы выполнить новые более строгие тесты в R-devel, а несколько пакетов Bioconductor зависят от data.table, а Bioconductor требует, чтобы пакеты проходили проверку R-devel. Быстрее было оставлять в себе и писать эти абзацы, а не рисковать.

Ответ 2

Это не проблема, о которой нужно сообщить.

Как утверждает Мэтью Доулл, это счетчик прогресса от fread

Вы можете установить results = 'hide' чтобы избежать включения этих результатов

library(knitr)

test = "'''{r, results = 'hide'}
require(data.table) 
fread('1 2 3\n')
'''"
knit2html(text=test, output="test.html")
browseURL("test.html")

Смотрите, нет индикатора выполнения.


На практическом уровне я думаю, что было бы разумно иметь results = 'hide' или даже include = FALSE для такого шага.

Вы не захотите повторять такое чтение пошагово, практически, вы только когда-либо хотите прочитать данные за один раз, затем вы сериализуете его (используя save, saveRDS или подобное), чтобы вы могли использовать это в следующий раз (что Быстрее).


Редактировать в свете комментария

Я бы разбил обработку на несколько меньших кусков. Затем вы можете не включать чтение в кусок, но включать фиктивную версию, которая не оценивается (чтобы вы могли видеть код, но не включали результаты)

'''{r libraries}
require(data.table) 
 '''

'''{r loaddata, include = FALSE}
DT <- fread('yourfile')
'''

'''{r loaddummy, ref.label = 'loaddata', eval = FALSE, echo = TRUE}
'''

'''{r dostuff}
# doing other stuff
'''

Ответ 3

Существует параметр, называемый showProgress в fread, если вы установите его в FALSE, то вы не увидите результат выполнения. (Это полезно для создания r-уценки.)