在 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"