Можно ли перенаправить вывод консоли на переменную?
В R мне интересно, возможно ли временно перенаправить вывод консоли на переменную?
ps В Интернете есть несколько примеров того, как использовать sink()
для перенаправления вывода в имя файла, но ни одного, который я смог найти, показывающего, как перенаправить в переменную.
pps Причина, по которой это полезно на практике, заключается в том, что мне нужно распечатать часть вывода консоли по умолчанию из некоторых встроенных функций в R.
Ответы
Ответ 1
Я считаю, что results <- capture.output(...)
- это то, что вам нужно (т.е. использование аргумента file=NULL
по умолчанию). sink(textConnection("results")); ...; sink()
должен работать, но, как говорит ?capture.output
, capture.output()
:
Связано с "тонуть так же, как" с связано с "attach".
... что предполагает, что capture.output()
будет лучше, так как он более сложен (т.е. вам не нужно забывать о завершении sink()
).
Если вы хотите отправить вывод нескольких операторов в переменную, вы можете обернуть их в фигурные скобки {}
, но если блок будет достаточно сложным, лучше использовать sink()
(или сделать ваш код более модульным путем обертывания его в функции).
Ответ 2
Для записи действительно возможно сохранить stdout
в переменной с помощью временного соединения без вызова capture.output
- например. когда вы хотите сохранить как результаты, так и stdout. Пример:
-
Подготовьте переменную для отклоненного вывода R:
> stdout <- vector('character')
> con <- textConnection('stdout', 'wr', local = TRUE)
-
Отправлять вывод:
> sink(con)
-
Сделайте несколько вещей:
> 1:10
-
Завершить утечку:
> sink()
-
Закройте временное соединение:
> close(con)
-
Проверить результаты:
> stdout
[1] " [1] 1 2 3 4 5 6 7 8 9 10"
Ответ 3
Я хотел бы иметь динамически вывод в файл... как программное обеспечение STATA делают...
Это возможно?
Я имею в виду, если бы я попросил очень длинную задачу и что-то вроде отключения электричества - я потеряю все...
В STATA все данные консоли сохраняются все время.... если ваша программа прерывается, у вас будут записи с консоли до этого момента...