我正在使用R运行一些批处理复制/重新命名脚本。使用.bat
文件执行该脚本,以便在MS Windows中使用命令提示符执行该文件。请注意,将要运行此目标计算机不允许外部连接(否则为Internet)安装新软件包,因此解决方案应位于 base R 中。
我可以使用cat
在屏幕上打印注释,并且输出显示在运行脚本后生成的.Rout
文件中。每次执行脚本时,.Rout
文件将被覆盖,我想创建一个单独的日志文件。
以下是相关的代码:
if(copy_files){
# tried different modes for the file statement below
log_con <- file(paste(format(Sys.time(), '%d-%b-%Y %H:%M:%S'),
'move duplicates.txt'),
open = 'at')
cat('Parent directory:\t\t' , file = log_con, append= F)
cat(parent_folder , file = log_con, append= T)
cat('\nSubfolder to copy files to:\t ', file = log_con, append= T)
cat(subfolder_old, file = log_con, append= T)
cat('\n\n', file = log_con, append= T)
# copying operations here - omitted for brevity
}
仅使用不带cat
和file
参数的append
语句可以正常工作,但是上面的代码返回以下错误消息:
> log_con <- file(paste(format(Sys.time(), '%d-%b-%Y %H:%M:%S'), 'move duplicates.txt'), open = 'at')
Error in file(paste(format(Sys.time(), "%d-%b-%Y %H:%M:%S"), "move duplicates.txt"), :
cannot open the connection
In addition: Warning message:
In file(paste(format(Sys.time(), "%d-%b-%Y %H:%M:%S"), "move duplicates.txt"), :
cannot open file '07-Aug-2018 15:50:36 move duplicates.txt': Invalid argument
> cat('Parent directory:\t\t' , file = log_con, append= F)
Error in cat("Parent directory:\t\t", file = log_con, append = F) :
cannot open the connection
In addition: Warning message:
In cat("Parent directory:\t\t", file = log_con, append = F) :
cannot open file '07-Aug-2018 15:48:11 move duplicates.txt': Invalid argument
据我了解,该错误源于以下事实:日志文件开头不存在,并且无法打开连接。
查看文档和How to create periodically send text to a "log file" while printing normal output to console?的答案似乎表明,在第一个append = F
语句中包含cat
应该是可行的。我尝试了为mode
命令指定不同/没有file
的版本,但结果相同。 Add lines to a file的答案似乎暗示相同。我想念什么吗?
我可以创建一个文件,每次都用R附加行,但是每次运行脚本时我都希望有一个唯一的日志。
答案 0 :(得分:0)
解决此问题的一种方法是使用接收器,在代码开始时将 sink(“ R 放在整个过程中,然后将 sink()我希望这能解决您的问题,如果您想动态命名它,请在接收器函数内部使用paste0。