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

时间:2013-05-03 11:59:22

标签: r console sink

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

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

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

2 个答案:

答案 0 :(得分:32)

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

  

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

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

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

答案 1 :(得分:13)

为了记录,确实可以在不使用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"