Можно ли перенаправить вывод консоли на переменную?

В 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 Например, когда вы хотите сохранить результаты и стандартный вывод. Пример:

  1. Подготовьте переменную для перенаправленного вывода R:

    > stdout <- vector('character')
    > con    <- textConnection('stdout', 'wr', local = TRUE)
    
  2. Перенаправить вывод:

    > sink(con)
    
  3. Сделай что-нибудь

    > 1:10
    
  4. Завершить перевод:

    > sink()
    
  5. Закройте временное соединение:

    > close(con)
    
  6. Результаты проверки:

    > stdout
    [1] " [1]  1  2  3  4  5  6  7  8  9 10"
    
Другие вопросы по тегам