在 R 中,我想知道是否可以将控制台的输出临时重定向到变量?
ps 网上有一些关于如何sink()将输出重定向到文件名的示例,但我找不到显示如何重定向到变量的示例。
pps 这在实践中很有用的原因是我需要从 R 中的一些内置函数中打印出一部分默认控制台输出。
我相信results <- capture.output(...)这是您需要的(即使用默认file=NULL参数)。 sink(textConnection("results")); ...; sink()应该也可以,但正如?capture.output所说,capture.output()是:
与“sink”相关的方式与“with”与“attach”相关的方式相同。
...这表明capture.output()通常会更好,因为它包含更多内容(即您不必记住终止sink())。
如果您想将多个语句的输出发送到一个变量,您可以将它们包装在花括号{}中,但如果该块足够复杂,使用它可能会更好sink()(或者通过将其包装在函数中使您的代码更加模块化)。
作为记录,确实可以stdout在临时连接的帮助下将其存储在一个变量中而无需调用capture.output——例如,当您想要同时保存结果和标准输出时。例子:
为转移的 R 输出准备变量:
> stdout <- vector('character')
> con <- textConnection('stdout', 'wr', local = TRUE)
转移输出:
> sink(con)
做一些事情:
> 1:10
结束转移:
> sink()
关闭临时连接:
> close(con)
检查结果:
> stdout
[1] " [1] 1 2 3 4 5 6 7 8 9 10"