[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