0

I am running a script for some batch copying/renaming operations using R. The script is executed using a .bat file for executing using command prompt in MS Windows. Note that the destination computer where this will be run does not allow external connections (internet of otherwise) to install new packages so the solution should be in base R.

I can print comments to screen using cat and the output shows up in the .Rout file generated after the script is run. The .Rout file gets overwritten each time the script is executed and I would like to create a separate log file instead.

Here's the relevant of code:

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
}

Using only the cat statements without the file and append argument works fine but the above code returns the following error messages:

> 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

From what I understand the error stems from the fact that the log file does not exist at the beginning and the connection can not be opened.

Looking at the documentation and the answer for How to create periodically send text to a "log file" while printing normal output to console? seems to suggest that including append = F in the first cat statement ought to work. I have tried versions where different/no mode is specified for file command with the same result. Answers for Add lines to a file seem to suggest the same. Am I missing something?

I could create a file and have R append lines to it each time but I want a unique log for each time the script is run.

divibisan
  • 11,659
  • 11
  • 40
  • 58
Gautam
  • 2,597
  • 1
  • 28
  • 51

1 Answers1

0

one way to solve this is to use sink, at the start of the code put sink("R_code.log") once the whole process is done put sink() at the last line of code .I hope this will solve your problem and if you want to name it dynamically use paste0 inside sink function.

Hunaidkhan
  • 1,411
  • 2
  • 11
  • 21