是否可以将控制台输出重定向到变量?

Con*_*ngo 31 console r sink

在R中,我想知道是否可以暂时将控制台的输出重定向到变量?

ps网上有一些关于如何使用sink()将输出重定向到文件名的例子,但我找不到任何可以显示如何重定向到变量的例子.

pps在实践中,这很有用的原因是我需要从R中的一些内置函数打印出一部分默认控制台输出.

Ben*_*ker 34

我相信results <- capture.output(...)你需要的东西(即使用默认file=NULL参数). sink(textConnection("results")); ...; sink()应该也可以,但正如?capture.output所说capture.output():

与'sink'相关的方式与'with'与'attach'相关.

...这表明capture.output()通常会更好,因为它更受限制(即你不必记得终止sink()).

如果要将多个语句的输出发送到变量,可以将它们用大括号括起来{},但如果块足够复杂,最好使用sink()(或者通过将代码包装在函数中使代码更加模块化).


dar*_*zig 14

对于记录,确实可以stdout在没有调用的情况下借助于临时连接存储在变量中capture.output- 例如,当您想要保存结果和stdout时.例:

  1. 准备转向R输出的变量:

    > stdout <- vector('character')
    > con    <- textConnection('stdout', 'wr', local = TRUE)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 转移输出:

    > sink(con)
    
    Run Code Online (Sandbox Code Playgroud)
  3. 做一些事情:

    > 1:10
    
    Run Code Online (Sandbox Code Playgroud)
  4. 结束转移:

    > sink()
    
    Run Code Online (Sandbox Code Playgroud)
  5. 关闭临时连接:

    > close(con)
    
    Run Code Online (Sandbox Code Playgroud)
  6. 检查结果:

    > stdout
    [1] " [1]  1  2  3  4  5  6  7  8  9 10"
    
    Run Code Online (Sandbox Code Playgroud)