is it possible to redirect console output to a variable?

后端 未结 2 2045
没有蜡笔的小新
没有蜡笔的小新 2020-11-30 05:27

In R, I\'m wondering if it\'s possible to temporarily redirect the output of the console to a variable?

p.s. There are a few examples on the web on how to use

相关标签:
2条回答
  • 2020-11-30 06:05

    For the record, it's indeed possible to store stdout in a variable with the help of a temorary connection without calling capture.output -- e.g. when you want to save both the results and stdout. Example:

    1. Prepare the variable for the diverted R output:

      > stdout <- vector('character')
      > con    <- textConnection('stdout', 'wr', local = TRUE)
      
    2. Divert the output:

      > sink(con)
      
    3. Do some stuff:

      > 1:10
      
    4. End the diversion:

      > sink()
      
    5. Close the temporary connection:

      > close(con)
      
    6. Check results:

      > stdout
      [1] " [1]  1  2  3  4  5  6  7  8  9 10"
      
    0 讨论(0)
  • 2020-11-30 06:14

    I believe results <- capture.output(...) is what you need (i.e. using the default file=NULL argument). sink(textConnection("results")); ...; sink() should work as well, but as ?capture.output says, capture.output() is:

    Related to ‘sink’ in the same way that ‘with’ is related to ‘attach’.

    ... which suggests that capture.output() will generally be better since it is more contained (i.e. you don't have to remember to terminate the sink()).

    If you want to send the output of multiple statements to a variable you can wrap them in curly brackets {}, but if the block is sufficiently complex it might be better to use sink() (or make your code more modular by wrapping it in functions).

    0 讨论(0)
提交回复
热议问题