Я хотел бы зафиксировать все выходные данные и ошибки при установке пакетов. Однако шаги по установке пакета, похоже, не фиксируются командой sink()
. Вот пример:
Файл main.R
:
fp <- file("test.log", open = 'wt')
sink(fp, type = 'output')
sink(fp, type = 'message')
install.packages("stringr")
sink(type = 'message')
sink()
Используя R -q -f main.R
для запуска файла, я вижу в консоли следующее:
-> % R -q -f main.R
> fp <- file("test.log", open = 'wt')
> sink(fp, type = 'output')
> sink(fp, type = 'message')
> install.packages("stringr")
* installing *source* package ‘stringr’ ...
** package ‘stringr’ successfully unpacked and MD5 sums checked
** using staged installation
** R
** data
*** moving datasets to lazyload DB
** inst
** byte-compile and prepare package for lazy loading
** help
*** installing help indices
*** copying figures
** building package indices
** installing vignettes
** testing if installed package can be loaded from temporary location
** testing if installed package can be loaded from final location
** testing if installed package keeps a record of temporary installation path
* DONE (stringr)
> sink(type = 'message')
> sink()
>
Содержимое test.log
:
Installing package into ‘/home/bam/.local/share/R/R_library/library’
(as ‘lib’ is unspecified)
trying URL 'https://cloud.r-project.org/src/contrib/stringr_1.5.1.tar.gz'
Content type 'application/x-gzip' length 176599 bytes (172 KB)
==================================================
downloaded 172 KB
The downloaded source packages are in
‘/tmp/Rtmpp0Vylj/downloaded_packages’
Почему в файл журнала не добавляются звездочки (*
) перед строками консоли?
Вы можете использовать keep.outputs
install.packages("stringr", keep.outputs=TRUE)
от помощи
если это правда, не допускайте установки выходов исходные пакеты в текущем рабочем каталоге с имена выходных файлов, имена пакетов с добавлением «.out»…
Обратите внимание: вместо TRUE
может быть строка символов каталога, в котором будет сохранен вывод.
Кроме того, есть несколько предупреждений и замечаний относительно использования sink
, например
Приемку потока сообщений следует выполнять с большой осторожностью.
и
Не сливайте поток сообщений, если не понимаете источник код, реализующий это...
Открытие и закрытие соединений может быть сложным и чреват ошибками, а также могут быть подводные камни и особенности операционной системы и т. д.
Хотя Андре В. дал вам решение вашей проблемы, он не ответил на конкретный вопрос. Я считаю, что ответ связан с этой строкой в ?sink
:
На консоли продолжают появляться только подсказки и (большинство) сообщений.
Это означает, что install.packages
отправляет сообщения через какой-то другой механизм, отличный от stdout
.