Подтвердить что ты не робот

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

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

ps В Интернете есть несколько примеров того, как использовать sink() для перенаправления вывода в имя файла, но ни одного, который я смог найти, показывающего, как перенаправить в переменную.

pps Причина, по которой это полезно на практике, заключается в том, что мне нужно распечатать часть вывода консоли по умолчанию из некоторых встроенных функций в R.

4b9b3361

Ответ 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 все данные консоли сохраняются все время.... если ваша программа прерывается, у вас будут записи с консоли до этого момента...