tempfile: Create Names for Temporary Files (original) (raw)
tempfile | R Documentation |
---|
Create Names for Temporary Files
Description
tempfile
returns a vector of character strings which can be used as names for temporary files.
Usage
tempfile(pattern = "file", tmpdir = tempdir(), fileext = "") tempdir(check = FALSE)
Arguments
pattern | a non-empty character vector giving the initial part of the name. |
---|---|
tmpdir | a non-empty character vector giving the directory name |
fileext | a non-empty character vector giving the file extension |
check | logical indicating if tmpdir()should be checked and recreated if no longer valid. |
Details
The length of the result is the maximum of the lengths of the three arguments; values of shorter arguments are recycled.
The names are very likely to be unique among calls to tempfile
in an R session and across simultaneous R sessions (unlesstmpdir
is specified). The filenames are guaranteed not to be currently in use.
The file name is made by concatenating the path given bytmpdir
, the pattern
string, a random string in hex and a suffix of fileext
.
By default, tmpdir
will be the directory given bytempdir()
. This will be a subdirectory of the per-session temporary directory found by the following rule when the R session is started. The environment variables TMPDIR, TMP andTEMP are checked in turn and the first found which points to a writable directory is used: if none succeeds ‘/tmp’ is used. The path should not contain spaces. Note that setting any of these environment variables in the R session has no effect on tempdir()
: the per-session temporary directory is created before the interpreter is started.
Value
For tempfile
a character vector giving the names of possible (temporary) files. Note that no files are generated by tempfile
.
For tempdir
, the path of the per-session temporary directory.
On Windows, both will use a backslash as the path separator.
On a Unix-alike, the value will be an absolute path (unlesstmpdir
is set to a relative path), but it need not be canonical (see normalizePath
) and on macOS it often is not.
Note on parallel use
R processes forked by functions such as mclapply
andmakeForkCluster
in package parallel share a per-session temporary directory. Further, the ‘guaranteed not to be currently in use’ applies only at the time of asking, and two children could ask simultaneously. This is circumvented by ensuring that tempfile
calls in different children try different names.
Source
The final component of tempdir()
is created by the POSIX system call mkdtemp
, or if this is not available (e.g. on Windows) a version derived from the source code of GNU glibc
.
It will be of the form ‘RtmpXXXXXX’ where the last 6 characters are replaced in a platform-specific way. POSIX only requires that the replacements be ASCII, which allows .
(so the value may appear to have a file extension) and regexp metacharacters such as+
. Most commonly the replacements are from the regexp pattern [A-Za-z0-9]
, but .
has been seen.
References
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988)The New S Language. Wadsworth & Brooks/Cole.
See Also
unlink
for deleting files.
Examples
tempfile(c("ab", "a b c")) # give file name with spaces in!
tempfile("plot", fileext = c(".ps", ".pdf"))
tempdir() # works on all platforms with a platform-dependent result
Show how 'check' is working on some platforms:
if(exists("I'm brave") && I'm brave
&&
identical(.Platform$OS.type, "unix") && grepl("^/tmp/", tempdir())) {
cat("Current tempdir(): ", tempdir(), "\n")
cat("Removing it :", file.remove(tempdir()),
"; dir.exists(tempdir()):", dir.exists(tempdir()), "\n")
cat("and now tempdir(check = TRUE) :", tempdir(check = TRUE),"\n")
}