Можно ли перенаправить вывод консоли на переменную?
В R мне интересно, возможно ли временно перенаправить вывод консоли в переменную?
PS Есть несколько примеров в Интернете о том, как использовать sink()
перенаправить вывод в имя файла, но ни один, который я мог найти, показывая, как перенаправить в переменную.
pps Причина, по которой это полезно на практике, заключается в том, что мне нужно распечатать часть вывода консоли по умолчанию из некоторых встроенных функций в R.
2 ответа
Я верю results <- capture.output(...)
это то, что вам нужно (т.е. с использованием по умолчанию file=NULL
аргумент). sink(textConnection("results")); ...; sink()
должен работать так же, но как ?capture.output
говорит, capture.output()
является:
Относится к "раковине" так же, как "с" относится к "приложению".
... что говорит о том, что capture.output()
как правило, будет лучше, так как он более сдержан (т.е. вам не нужно помнить, чтобы прекратить sink()
).
Если вы хотите отправить вывод нескольких операторов в переменную, вы можете заключить их в фигурные скобки {}
, но если блок достаточно сложный, лучше использовать sink()
(или сделайте ваш код более модульным, обернув его в функции).
Для записи действительно возможно хранить stdout
в переменную с помощью временного соединения без вызова capture.output
Например, когда вы хотите сохранить результаты и стандартный вывод. Пример:
Подготовьте переменную для перенаправленного вывода 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"