【问题标题】:How to tee/split/copy console output into variable in R?如何将控制台输出开到/拆分/复制到R中的变量中?
【发布时间】:2014-09-11 07:21:48
【问题描述】:

如何将某些代码的输出放入变量中?我希望该输出仍然进入控制台。

我更喜欢sink 表示法;我不想使用capture.output 有两个原因:

  1. 它要求各自的代码是一个单一的功能;我不想通过创建函数来捕获输出来使我的代码复杂化
  2. 它不允许捕获的输出仍然进入控制台。

我想出了下面的代码,但它有点复杂。有更简单的解决方案吗?

fileName <- tempfile()
sink(fileName, split = TRUE)
...
sink()
out <- readChar(fileName, file.info(fileName)$size)
unlink(fileName)

【问题讨论】:

  • 也许利用%&gt;% (magrittr) 或%&gt;&gt;% (pipeR) 将发送到控制台的内容复制到后续的write 操作?或者,也许这是您在magrittr 之前发布%tee% 运算符的机会:-)。见r-statistics.com/2014/08/…
  • 你应该只使用futile.logger 它可以做任何事情以及额外的

标签: r


【解决方案1】:

您的代码看起来还不错,但是您可以通过使用textConnection 来简化一些事情:

sink(tt <- textConnection("results","w"),split=TRUE)
print(11:15)
## [1] 11 12 13 14 15
sink()
results
## [1] "[1] 11 12 13 14 15"
close(tt) ## clean up

唯一需要注意的是,如果您不关闭连接,results 将有锁定绑定(请参阅?textConnection),这意味着您可以'例如为其分配一个新值。

输出字符向量已锁定绑定(请参阅“lockBinding”),直到在连接上调用“close”。

或者,您不必将多个语句包装到一个函数中以将它们放入capture.output() - 您可以使用大括号{} 将多个语句转换为单个评估输出...

results <- capture.output(split=TRUE,{
   print("hello")
   print("goodbye")
})

【讨论】:

    猜你喜欢
    • 2015-07-21
    • 1970-01-01
    • 2012-09-18
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多