Я реализовал следующую процедуру, целью которой является запись некоторых файлов и печать сообщения в конце каждого файла, когда запись завершена:
# Print one file per piaf
output_dir_piafs <- "OUTPUT_dataset_piafs"
unlink(output_dir_piafs, recursive = TRUE, force = TRUE)
dir.create(output_dir_piafs)
for (i in 1:length(lst_sorted)) {
sink() # Generates warnings...
filename <- paste(output_dir_piafs, "/piaf_", i, ".txt", sep="")
sink(file = filename, append = TRUE)
sink(type = "message")
cat(" ", colnames(file1), "\n")
for (j in 1:length(lst_sorted[[i]])) {
cat(j, " ")
lapply( lst_sorted[[i]][[j]],
function(x) {
cat(as.character(x), " ")
}
)
cat("\n")
}
## back to the console
sink()
cat(paste(filename, "done !\n"))
#flush(stdout()) # Tested, no particular effect
}
Моя проблема в том, что если я не добавлю sink()
в самом начале цикла, окончательная запись на стандартный вывод (cat(paste(filename, "done !\n"))
) не будет иметь никакого эффекта. С другой стороны, добавление этого раннего sink()
генерирует предупреждения, которых я хотел бы избежать:
There were 50 or more warnings (use warnings() to see the first 50)
> warnings()
Warning messages:
1: In sink() : no sink to remove
2: In sink() : no sink to remove
3: In sink() : no sink to remove
Есть ли у кого-нибудь идеи о том, как ведет себя функция sink() и/или как избавиться от этих предупреждений?
Примечание. Я также пробовал try(sink(), silent=TRUE)
, но вариант silent
предотвращает только ошибки...
sink.number("message")
. - person Roman Luštrik   schedule 07.11.2013sink.number("message")
ничего не возвращает, но из нового нового сеанса стандартный вывод записывается нормально. Только когда я останавливаю процесс (Ctrl-C
), а затем перезапускаю его, стандартный вывод не работает. Итак, я думаю, вы правы. Мое плохое: прерывание процесса может иметь плохие последствия для соединенияstdout
. Более того, если я наберуsink()
прямо перед повторным запуском процесса, он все равно не сработает... - person Gauthier Boaglio   schedule 07.11.2013Ctrl-C
, которое вызывает проблему. Любое предложение о том, как сделать все правильно, после того, как прервали таким образом? - person Gauthier Boaglio   schedule 07.11.2013