我知道sink()
函数可用于将 R 输出转移到文件中,例如
sink('sink-closing.txt')
cat('Hello world!')
sink()
是否有一个简单的命令来关闭所有未完成的接收器?
下面,我详细阐述一下我的问题。
假设我的 R 脚本打开一个sink()
在 R 脚本中,但 R 脚本中存在错误,该错误发生在脚本关闭之前sink()
。我可能会多次运行 R 脚本,尝试修复错误。最后,我想关闭所有接收器并打印到控制台。我该怎么做?
最后,为了具体起见,我提供了一个 MWE 来说明我面临的问题。
首先,我编写一个 R 脚本sink-closing.R
其中有一个错误。
sink('sink-closing.txt')
foo <- function() {
cat(sprintf('Hello world! My name is %s\n',
a.variable.that.does.not.exist))
}
foo()
sink()
Next, I source
R 脚本多次,比如说,当我尝试查找并修复错误时,错误地执行了 3 次。
> source('~/Dropbox/cookbook/r-cookbook/sink-closing.R')
Error in sprintf("Hello world! My name is %s\n", a.variable.that.does.not.exist) :
object 'a.variable.that.does.not.exist' not found
现在,假设我正在调试 R 脚本并想要打印到控制台。我可以打电话sink()
多次关闭较早的水槽。如果我调用它3次,那么我终于可以像以前一样打印到控制台了。但我怎么知道需要关闭多少个水槽呢?