:::

資料分析到沒硬碟空間了?設定R的暫存目錄 / How to Change Directory for Temporary Files in R

image

最近用R在跑循序樣式勘探的時候,赫然發現程式居然跑到讓整台電腦都當機。仔細檢查之後才發現,原來R在分析的時候會用到大量的暫存空間,而這個暫存空間預設會擺在系統磁碟機當中。要如何將R的暫存目錄設到其他地方呢?網路上有不同的說法,最後我終於找到了一個解決方案,所以撰寫這篇作為記錄。


建立暫存目錄的配置檔 / Setup configuration for temporary files' directoy

image

請在R執行以下指令:

write("TMPDIR = 'D:\\tmp'", file=file.path(Sys.getenv('R_USER'), '.Renviron'))

紅字的「D:\\tmp」是你想要指定暫存目錄的路徑,它會在家目錄底下寫入名為「.Renviron」的檔案中。

image

接著你的工作目錄底下就會出現「.Renviron」。

為了讓「.Renviron」的設定生效,我們需要完全關閉R再重新啟動,或著你也可以用下面的方法。

image

RStudio有提供立即重新啟動R的功能,位於Session > Restart R中。執行Resrtart R後會出現「Restarting R session…」,執行完成之後修改暫存目錄的路徑就會生效。

image

我們可以試著用tempdir()指令來看看現在的暫存目錄,果然換成我們設定的「D:\\tmp」了。

2017-06-27_215902

在進行循序樣式探勘的時候,R會選擇用我們指定的暫存目錄路徑來擺放暫存檔。這樣就可以用更大的空間來分析檔案囉。


小結 / In closing

最後我們來談談網路上的其他做法。

有些做法主張修改tempdir()指令的內容,但這樣的做法並不會影響tempfile()指令,也不會影響到函式庫的運作,失敗。

Darren Norris有講到要在家目錄加入Renviron.site檔案,檔案內容就是設定暫存目錄的變數。不過到底要放在那個目錄才對,這就比較難確定。

StackOverflow中Matthew Plourde回答用R指令的write()跟用Sys.getenv('R_USER')來取得家目錄位置,並建立比Renviron.site優先度還要低一點的.Renviron,這是正確的方向,但是他設定的變數卻是TMP。根據Miguel Vazq的補充,在Windows環境中,要用TMPDIR來取代TMP,這就是最後的正解。

image

其實我們也可以把.Renviron建立在現在的工作目錄(workspace)中。但是這樣只有在這個工作目錄底下.Renviron才能發揮作用。而建立在家目錄的.Renviron的話,這個家目錄的使用者啟動R的時候都會生效。

因為修改暫存目錄的方法實在是各說紛紜,光這個小問題就花了我3個小時的時間研究,R實在是令人困擾啊。附帶一提,我一邊撰寫這篇一邊分析資料,暫存檔的檔案大小已經超過7GB了,實在是很佔空間啊。

總共1 則留言, (我要發問)

  1. 結果跑了一個晚上,暫存檔已經超過160GB,又要把我另一個硬碟空間吃完
    看來得要換個演算法了orz

    回覆刪除

留言工具: