[R] tempfile problem

Duncan Murdoch murdoch.duncan at gmail.com
Thu Jun 17 18:59:04 CEST 2010

On 17/06/2010 12:43 PM, Ben Madin wrote:
> G'day all,
> The documentation for tempfile states :
> "The names are very likely to be unique among calls to tempfile in an R session and across simultaneous R sessions. The filenames are guaranteed not to be currently in use."
> My problem I think relates to the second part of the sentence, which is the guarantee... and it is being met ... but I need to save the files as .png files, in the same directory, so I am adding the suffix and I suppose therefore the next offering can be unique (as it doesn't have the prefix)
> I am using a command like :
> > fname <- basename(tempfile("nahis", "/Library/WebServer/Documents/nahis/tmp"))
>  on a mac, or 
> > fname <- basename(tempfile("nahis", "/htdocs/nahis/tmp"))
> on a FreeBSD system, as I need to be able to find the file from the web browser up to 24 hours later.
> and then 
> > this_filename <- paste(fname, ".png", sep = "")
> and saving the file as this_filename, hence the next call doesn't find it's own suggestion, and starts again.

It sounds as though you are doing something strange with the random 
number seed, because those names are chosen at random, and then checked 
for uniqueness.  If
the seed is being reset you could get the same name twice in a row, but 
otherwise it's very unlikely.  (And it's the C library function rand(), 
not R's RNG that is used.)
> Is there any alternative filenameing approach I can use to get around this? Do I need to manually scan and reject the name if it matches the names I already have? Should I just digest the current time ? (It's working so far!)

If you use the current time, watch out for timer accuracy and fast 
computers.  You may be able to get more than one file created before the 
next timer tick.

I'd suggest that you should generate more than enough filenames once at 
the start, confirm they're all unique, and then just take them one by 
one as needed.  Alternatively, create the tempfile() as well as the 
tempfile().png, but this is likely to be really slow if the seed is the 
same each time, because checking for the existence of the first n tries 
is going to be slow.

Duncan Murdoch

More information about the R-help mailing list