2013-05-10 19 views
6

Ar içinden OS geçici dizini bulmak için bir çapraz platform yöntemi nedir? Şu anda kullanıyorum: Ubuntu ve Windows'taki etkileşimli bir R oturumu içinden hangi iş yapıldı. Ancak, daha sonra RApache içinden çağrıldığında başarısız oldu. RApache yılında tempdir() değeri her zaman /tmp, bu yüzden açıkçası yanlıştır / yılında dirname(tempdir()) sonuçları. Ben de denedim:Read sistemi TMP dir

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

?"environment variables" önerdiği ancak bunların hiçbiri Ubuntu ayarlandığı gibi. Ayrıca bu yüzden oldukça R bu değeri tespit anlamıyorum /etc/R/* dosyaların herhangi ayarlanmalıdır görünmüyor.

+0

C arasında çevrilmiştir R kaynak dağılımı dosya src/ana/sysutils.c bölgesi InitTempDir neden 'tempdir() 'her zaman/tmp' şaşırtıcıdır' geri dönün. Bu direk için yazma erişiminiz var mı? – flodel

+0

Ben rApache bazı önbelleğe alma C düzeyini küresel 'R_TempDir' setleri düşünüyorum. https://github.com/jeffreyhorner/rapache bakın – Jeroen

cevap

1

Ortam değişkeni "TMPDIR", "TMP" ve "TEMP",tarafından döndürülen değeri değiştirmezse, R_TempDir C değişkeni ayarlanmamışsa (bunun nasıl yapıldığından emin değilim) .

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' 
} 

Bu fonksiyonu dayanmaktadır: Eğer makul bir tmp dizininin yolunu döndürür bir çapraz platform işlevi istiyor ve R_TempDir değeri ilgilenen değilseniz, böyle bir şey kullanabilirsiniz R.