R: Перенаправление на стандартный вывод и файл на лету - PullRequest
1 голос
/ 16 апреля 2020

Есть ли способ перенаправить R-вывод в файл и распечатать его на стандартный вывод одновременно, на лету? Я хочу отслеживать прогресс и документировать его в файл. Кажется, что сток () не может делать и то и другое.

Нашел функцию tee на Unix (я использую Ma c и Linux), но может быть решение R. Спасибо!

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Функция sink - это стандартный R-способ перенаправления вывода. У него есть аргумент split, что при установке на TRUE все равно вывод команд выводится на stdout.
Из документации мой акцент.

split
логично: если TRUE, вывод будет отправлен в новый приемник и в текущий поток вывода, , как Unix программная тройка .

Это поведение показано в следующем примере.
Сначала набор данных для запуска команды с большим количеством записанных выходных данных.

set.seed(1234)
x <- 1:10
y <- x + rnorm(10, mean = 2, sd = 4)

Эти инструкции предназначены для того, чтобы не связываться с моим рабочим пространством. Не стесняйтесь их пропускать.

old_dir <- getwd()
setwd('~/tmp')

Теперь пример split sink.

sink(file = 'sink.txt', split = TRUE)
summary(lm(y ~ x))
sink(NULL)

summary выводится как на стандартный вывод, так и в файл sink.txt.
Очистить вверх.

unlink('sink.txt')

И обратно туда, где я был.

setwd(old_dir)
0 голосов
/ 16 апреля 2020

Возможно, вы можете отправить в приемник, скажем, outfile.txt, а затем запустить tail -f outfile.txt в другом процессе?

sink("outfile.txt")
system("tail -f outfile.txt &")
...