善用RStudio project管理R的工作位址與相關檔案

對於R語言的初學者來說,妥善管理R的工作位址並不是一件容易的工作。很多時候為了方便,不同工作項目的檔案就全部堆積在R的預設工作位址,長久下來容易造成混亂並影響工作效率。今天的文章就來說明如何利用RStudio的project功能來管理R的工作位址吧!

R與RStudio

考量到有些讀者可能對R非常陌生,文章一開始還是先簡單說明一下R與RStudio。

R是一種程式語言,主要應用於資料處理、統計分析及繪圖。相較於SAS、SPSS等其他常見的統計軟體/語言,R語言的最大的優勢就是它是完全免費的,而且也有大量的學習資源及社群支持。特別值得一提的就是R的使用社群中已有諸多前輩/大大開發出各式各樣好用的套件 (package),例如繪製統計圖表必備的ggplot2套件、對資料整理非常有幫助的tidyr、dplyr等套件,只要安裝並妥善應用這些套件,就能幫助你解決很多困難的任務。

RStudio則是專門為R語言設計的整合開發環境 (IDE),可以想像成一個讓R運作的平台,讓你編寫及執行R語言時更便利也更有系統性。

R的工作位址

簡單介紹R語言和RStudio之後,接下來介紹R的工作位址及R存取資料的方式。

R在運作時會有一個工作位址 (working directory),依我個人的使用經驗,通常在Windows系統中這個工作位址會被預設在「文件 (Documents)」的資料夾。如果不確定目前R的工作位址,我們可以也使用 getwd() 這個函數來查看。

# 查看工作位址
getwd()
#> [1] "C:/Users/username/Documents"

在使用R進行工作時,我們常常需要讀取資料,這時候工作位址就很重要了。如果資料是存放在工作位址當中,使用 read.csv()read.delim()readRDS() 等讀取函數時,只要輸入那個檔案的檔名即可,不需要輸入詳細的位址。例如要讀取一個叫 data.csv 的csv檔案,可以用以下的code:

# 讀取檔案(存放在工作位址)
read.csv("data.csv")

但如果資料不是存放在工作位址,那就麻煩多了,必須在讀取時輸入該資料檔案的詳細位址,例如:

# 讀取檔案(存放在其他位址)
read.csv("C:/Users/username/Documents/R analysis/case1/data.csv")

這邊也補充說明一下,一般Windows系統慣用的位址都是用backslash (\) 作為階層的分隔符號,但在R語言中backslash有其他的功能,因此輸入位址時必須以slash (/) 作為分隔符號,或是使用double backslash (\\)。

# 正確的讀取方式
read.csv("C:/Users/username/Documents/R analysis/case1/data.csv")
read.csv("C:\\Users\\username\\Documents\\R analysis\\case1\\data.csv")

# 錯誤的讀取方式
read.csv("C:\Users\username\Documents\R analysis\case1\data.csv")
#> ERROR

除了讀取資料之外,工作位址也與檔案輸出有關,使用 saveRDS()write.table()write.csv() 等函數進行存檔時,如果只輸入檔名,則檔案一律都是輸出到工作位址。如果想要將檔案輸出到其他位址,就必須於函數中寫出詳細的輸出位址

# 將檔案輸出到工作位址
write.csv(data, file = "data.csv")

# 將檔案輸出到其他位址
write.csv(data, file = "C:/Users/username/Documents/R analysis/case1/data.csv")

由此可知,如果不想在code當中寫入太多長串的位址,把讀取以及輸出的檔案都放在R的工作位址是最方便的。除了個人方便性的考量,如果在code當中加入太多檔案的絕對位址,也會對code的開放性與共享性造成不良影響。因為這些位址通常都是個人電腦上的位址,同樣的code分享給其他人使用的話,這些位址就喪失意義了。

但是將所有相關檔案都存放在R的預設工作位址也會有不良的副作用,當工作單一時問題不大,但當處理的工作項目愈來愈多,不同工作項目輸入及輸出的檔案就會全部混雜在單一位址內,造成混亂並影響工作效率。

因此,接下來就介紹幾個管理R工作位址的方法。

使用setwd()函數設定工作位址

R語言本身就有一個用來設定工作位址的函數: setwd() 。我們可以針對不同的工作項目事先在電腦中設置好資料夾,然後每次用R處理工作時就使用 setwd() 函數將R的工作位址設定到對應的資料夾,這樣就可以避免檔案混雜的問題。

# 設定工作位址1
setwd("C:/Users/username/Documents/R analysis/case1/")
# 執行工作項目1的code
...

# 設定工作位址2
setwd("C:/Users/username/Documents/R analysis/case2/")
# 執行工作項目2的code
...

不過用 setwd() 設定的工作位址只是暫時性的,如果關掉再重新啟動R,R又會自動回復到預設的工作位址。

每次開始工作時就要重新設定工作位址還是不太方便,一旦忘記設定或設定到錯誤的位址,同樣會造成工作混亂,因此接下來介紹另一種更好的方法。

使用RStudio project管理R的工作

RStudio提供許多輔助功能,能夠讓R的工作更有效率及系統性,今天要介紹的project就是其中一例。

當使用者使用RStudio建立一個新project時,可以選擇電腦中特定的資料夾作為該project的工作位址,RStudio也會在該資料夾中建立一個Rproj檔案。之後只要點選該Rproj檔案開啟RStudio project,R的工作位址就會自動設定成對應的資料夾,操作上相當方便。當有許多工作項目要處理時,只要為每一個工作項目建立各自的project及工作位址,就能有效管理相關的R script及輸出輸入的檔案,避免工作混亂。

以下示範一下建立RStudio project的流程。首先在RStudio的介面中,點選左上角的「File」選單,並選擇「New Project」來建立project。

接下來RStudio會請你選擇要將這個project的工作位址設定在哪裡,如果是要新設立一個資料夾,可選擇「New Directory」;如果要將工作位置設定在既有的資料夾,則可選擇「Existing Directory」。我們這邊先選擇「New Directory」作為示範。

下一個頁面是要選擇project的類型,基本上多數的工作都選擇「New Project」建立一般的project即可,除非你的目的是要建立套件 (package) 或 R markdown website等比較特殊的產物,才需要用到其他類型。

再來就是設定project的工作位址了。請先在下方Browse的地方選擇一個根目錄,也就是你的工作位址資料夾所要存在的位址 (此處是以一個叫「R project」的資料夾作為示範)。接著在上方的「Directory name」區域中輸入你想要為這個project (以及它的工作位址資料夾) 設定的名稱 (此處以「project1」作為示範)。確認無誤之後按下「Create Project」就算建立完成。

依照上述步驟操作完畢後,RStudio就會在選擇的「~/R project」位址中新增一個叫做「project1」的資料夾,並且把這個資料夾設定為該project的工作位址,同時也會在project1資料夾中生成一個叫做「project1.Rproj」的檔案,如下圖所示。

之後只要直接點選Rproj檔案開啟RStudio project,R的工作位址就會自動設定在對應的資料夾,我們也可以再次執行 getwd() 函數來加以確認。

# 確認project工作位址
getwd()
#> [1] "C:/Users/username/Documents/R project/project1"

可以看到工作位址已設定在我們剛剛建立的project1資料夾中了,此時不管是自己寫的R script、需要讀取的資料、從R輸出的圖表或檔案等,通通都可以輕鬆彙整在這個資料夾內,相當方便。

而當你需要處理多個工作項目,只要為每個工作項目各建立一個project,彼此的檔案就不會互相混雜。而且工作位址也很好管理,只需要開啟不同的Rproj檔案即可,不需要再用 setwd() 函數去手動更改。

如果能夠熟練運用RStusio project,相信能夠讓你更有系統性的處理R語言工作,也能提升自己的工作效率。

發表留言