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

问题描述 投票:0回答:2

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

附注网上有一些关于如何使用

sink()
将输出重定向到文件名的示例,但我找不到显示如何重定向到变量的示例。

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

r console sink
2个回答
42
投票

我相信

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

与“sink”相关,就像“with”与“attach”相关一样。

...这表明

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

如果您想将多个语句的输出发送到一个变量,您可以将它们包装在大括号中

{}
,但如果块足够复杂,则最好使用
sink()
(或者通过包装使您的代码更加模块化)它在函数中)。


20
投票

郑重声明,确实可以借助临时连接将

stdout
存储在变量中,而无需调用
capture.output
—— 例如当您想同时保存结果和
stdout
时。示例:

  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"
    
© www.soinside.com 2019 - 2024. All rights reserved.