【发布时间】:2013-09-10 23:45:01
【问题描述】:
我知道sink() 函数可用于将 R 输出转移到文件中,例如
sink('sink-closing.txt')
cat('Hello world!')
sink()
是否有一个简单的命令可以关闭所有未完成的接收器?
下面,我详细说明我的问题。
假设我的 R 脚本在 R 脚本中打开了一个 sink(),但在该脚本关闭 sink() 之前,R 脚本中出现了错误。我可能会多次运行 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()
接下来,我source R-script 多次,说错了 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 次,那么我终于可以像以前一样打印到控制台了。但是我怎么知道我需要关闭多少个接收器?
【问题讨论】:
-
你能用
sink.number吗?