【问题标题】:is it possible to redirect console output to a variable?是否可以将控制台输出重定向到变量?
【发布时间】:2013-04-27 19:53:46
【问题描述】:

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

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

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

【问题讨论】:

  • 重写函数比尝试解析它们输出的文本要好得多。
  • @Ari B. Friedman 不幸的是,这是不可行的。目前,我想做的就是剪掉一些额外的换行符,以将输出压缩到可管理的长度。
  • @Ben Bolker。杰出的!这很好用。如果您将其添加为答案,我会对其进行投票并将其标记为官方答案。

标签: r console sink


【解决方案1】:

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

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

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

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

【讨论】:

  • 本,两个注意事项:1) results <- sink() 不会做任何事情 - sink() 总是返回 NULL。 2) 我不同意capture.outputsink 更好——相反,因为sink 允许代码不是单个函数调用。请关注我的问题:stackoverflow.com/q/25781458/684229
【解决方案2】:

为了记录,确实可以在临时连接的帮助下将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"
    

【讨论】:

猜你喜欢
  • 2019-02-13
  • 2013-11-14
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多