我知道该sink()
函数可用于将 R 输出转移到文件中,例如
sink('sink-closing.txt')
cat('Hello world!')
sink()
是否有一个简单的命令来关闭所有未完成的接收器?
下面,我详细说明我的问题。
假设我的 R 脚本sink()
在 R 脚本中打开了 a,但是在脚本关闭sink()
. 我可能会多次运行 R 脚本,试图修复错误。最后,我想关闭所有接收器并打印到控制台。我该怎么做?
最后,为了具体起见,我提供一个 MWE 来说明我面临的问题。
首先,我编写了一个sink-closing.R
包含错误的 R 脚本。
sink('sink-closing.txt')
foo <- function() {
cat(sprintf('Hello world! My name is %s\n',
a.variable.that.does.not.exist))
}
foo()
sink()
接下来,我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 次,那么我终于可以像以前一样打印到控制台了。但是我怎么知道我需要关闭多少个水槽?