R:同时重定向到标准输出和动态文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R:同时重定向到标准输出和动态文件相关的知识,希望对你有一定的参考价值。

是否有一种方法可以将R-输出重定向到文件中,并同时将其立即打印到stdout?我想监视进度并将其记录在文件中。似乎,sink()不能同时做。

在Unix(我使用Mac和Linux)上创建了函数tee,但是可能有一个R解决方案。谢谢!

答案

功能sink是重定向输出的标准R方式。它具有一个参数split,当设置为TRUE时,仍将命令输出打印到stdout。从文档中,我的重点。

分割逻辑:如果为TRUE,则输出将发送到新接收器和当前输出流,像Unix程序tee

下面的示例显示此行为。首先是一个数据集,用于运行具有大量书面输出的命令。

set.seed(1234)
x <- 1:10
y <- x + rnorm(10, mean = 2, sd = 4)

这些说明的目的是不要弄乱我的工作空间。随时跳过它们。

old_dir <- getwd()
setwd('~/tmp')

现在是分割的sink示例。

sink(file = 'sink.txt', split = TRUE)
summary(lm(y ~ x))
sink(NULL)

summary输出到标准输出和文件sink.txt。清理。

unlink('sink.txt')

回到我过去。

setwd(old_dir)
另一答案

也许您可以发送到接收器,例如说outfile.txt,然后在另一个进程中启动tail -f outfile.txt

sink("outfile.txt")
system("tail -f outfile.txt &")

以上是关于R:同时重定向到标准输出和动态文件的主要内容,如果未能解决你的问题,请参考以下文章

shell编程之重定向

将标准输出重定向到文件[重复]

如何将标准输出和错误输出同时重定向到同一位置?

数据流重定向

2.8 补充:标准输入输出错误输出

根据退出代码bash脚本将命令重定向到变量或文件?