如何在R中将控制台输出发球/分割/复制到变量?

时间:2014-09-11 07:21:48

标签: r

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

我更喜欢sink符号;我不想使用capture.output有两个原因:

  1. 它要求相应的代码是单个函数;我不想通过创建函数来捕获输出来使代码复杂化
  2. 它不允许捕获的输出仍然进入控制台。
  3. 我想出了下面的代码,但它有点复杂。有更简单的解决方案吗?

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

1 个答案:

答案 0 :(得分: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() - 您可以使用大括号{}将多个语句转换为单个评估输出... < / p>

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