Я знаю, что функция sink()
может использоваться для переадресации вывода R в файл, например.
sink('sink-closing.txt')
cat('Hello world!')
sink()
Есть ли простая команда для закрытия всех выдающихся приемников?
Ниже я подробно излагаю свой вопрос.
Предположим, что мой R- script открывает a sink()
в R- script, но в R- script есть ошибка, которая возникает до того, как script закрывает sink()
. Я могу запустить R- script несколько раз, пытаясь исправить ошибку. Наконец, я хочу закрыть все раковины и распечатать на консоли. Как это сделать?
Наконец, в интересах конкретности я предоставляю MWE для иллюстрации проблемы, с которой я сталкиваюсь.
Во-первых, я пишу R- script 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- script и хочу печатать на консоли. Я могу вызвать sink()
несколько раз, чтобы закрыть ранние приемники. Если я назову это 3 раза, то я могу, наконец, распечатать на консоли. Но как я узнаю, сколько стоков мне нужно закрыть?