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

6
如何将特定代码的输出导入变量? 我希望该输出仍然可以在控制台中显示。
我更喜欢使用“sink”符号; 我不想使用 capture.output,有两个原因:
1. 它要求相应的代码为单个函数;我不想通过创建函数来捕获输出而使我的代码复杂化 2. 它不允许捕获的输出仍然进入控制台。
我想出了下面的代码,但它有点复杂。 有更简单的解决方案吗?
fileName <- tempfile()
sink(fileName, split = TRUE)
...
sink()
out <- readChar(fileName, file.info(fileName)$size)
unlink(fileName)

也许可以使用 %>%(magrittr)或 %>>%(pipeR)将发送到控制台的内容复制到后续的 write 操作中?或者这是你发布 %tee% 运算符的机会 :-) 在 magrittr 之前。请参见 http://www.r-statistics.com/2014/08/simpler-r-coding-with-pipes-the-present-and-future-of-the-magrittr-package/。 - Carl Witthoft
你应该只使用 futile.logger,它可以完成一切并提供额外的功能。 - statquant
1个回答

2

你的代码看起来还不错,但是你可以通过使用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),这意味着你无法给它赋新值。

输出字符向量在调用连接的‘close’之前具有锁定绑定(参见‘lockBinding’)。

另外,你不必将多个语句包装成一个函数才能将它们放入capture.output()中——你可以使用花括号{}将多个语句组合成单个评估输出...

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接