2013-05-10 5 views
6

Che cos'è un metodo multipiattaforma per trovare la directory temporanea del sistema operativo da R? Attualmente utilizzo:Leggi sistema TMP dir in R

dirname(tempdir()) 

Quale è stato il lavoro sia su Ubuntu che su Windows da una sessione R interattiva. Tuttavia, è fallito quando chiamato da RApache. In RApache il valore di tempdir() è sempre /tmp, quindi i risultati dirname(tempdir()) in /, che è ovviamente sbagliato. Ho anche provato:

Sys.getenv("TMP") 
Sys.getenv("TEMP") 
Sys.getenv("TMPDIR") 

come suggerito da ?"environment variables" ma nessuno di questi sono stati fissati in Ubuntu. Inoltre, non sembra essere impostato in nessuno dei file in /etc/R/*, quindi non capisco come R rileva questo valore.

+0

Perché 'tempdir()' restituisce sempre '/ tmp' è sconcertante. Hai accesso in scrittura a quella directory? – flodel

+0

Penso che rApache imposta il livello globale 'R_TempDir' per implementare il caching. Vedi https://github.com/jeffreyhorner/rapache – Jeroen

risposta

1

Le variabili di ambiente "TMPDIR", "TMP" e "TEMP" possono essere utilizzate per modificare il valore restituito da tempdir() se la variabile C R_TempDir non è impostata (anche se non sono sicuro di ciò che è stato fatto) . Se si desidera una funzione di cross-platform che restituirà il percorso di una directory tmp ragionevole, e non sono interessati al valore di R_TempDir, si potrebbe usare qualcosa di simile:

gettmpdir <- function() { 
    tm <- Sys.getenv(c('TMPDIR', 'TMP', 'TEMP')) 
    d <- which(file.info(tm)$isdir & file.access(tm, 2) == 0) 
    if (length(d) > 0) 
    tm[[d[1]]] 
    else if (.Platform$OS.type == 'windows') 
    Sys.getenv('R_USER') 
    else 
    '/tmp' 
} 

Questo si basa sulla funzione InitTempDir nel file src/main/sysutils.c dalla distribuzione di origine R, tradotto da C a R.