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. 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!) cheers Ben
take the name returned by tempfile and append the current TOD; this should make it fairly unique and will let you do some cleanup if you are going to keep the files around for some length of time. On Thu, Jun 17, 2010 at 12:43 PM, Ben Madin <lists at remoteinformation.com.au> 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. > > 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!) > > cheers > > Ben > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >-- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem that you are trying to solve?
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