38

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

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

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

4

2 回答 2

40

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

与“sink”相关的方式与“with”与“attach”相关的方式相同。

...这表明capture.output()通常会更好,因为它包含更多内容(即您不必记住终止sink())。

如果您想将多个语句的输出发送到一个变量,您可以将它们包装在花括号{}中,但如果该块足够复杂,使用它可能会更好sink()(或者通过将其包装在函数中使您的代码更加模块化)。

于 2013-05-03T12:23:54.907 回答
20

作为记录,确实可以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"
    
于 2014-12-12T13:11:34.550 回答