R筆記02-檔案與系統


R筆記02-檔案與系統
前言:
[本篇教學正文,多自參考R語言翻轉教室內的教學,有興趣可以點此看如何開始教學課程]
這篇雖然教做R筆記02,但是本網誌的第一篇R筆記...原因是我還在整理R筆記01,但內容可能會涵蓋比較廣,所以先上這一篇XD
首先還是帶著各位來回顧一下,我自己學R語言的一個歷程。當初是在經驗模式方法這門課學到的,該門課程是比較偏深入一點的線性回歸模型應用,在該門課的期末課程專案,需要使用到R語言,因此才對R有初步的了解。時光荏苒,一轉眼就到了碩士論文階段,為了使用分類與迴歸決策樹(Classification and regression treeCART
)的模型,所以就使用了R來產生決策樹與後續的分析。
大概這3年間,從我一開始使用是用R Console這個環境,他外層有一個圖形化界面(Graphic User InterfaceGUI),中間則是比較接近Command Line得一個小視窗。而現在,普遍大家比較常用的R語言的整合開發環境(Integrated Development EnvironmentIDE) 則是R Studio。這個平台本身也不斷推陳出新,以我自己去年研究時候下載的版本是R version 3.4.3 (2017-11-30),而現在(2018-07-22)可以在他們的官方網站,下載到的已經是version 3.5.1
說了這麼多,該下個結論了,過去使用R Console其實會比較常使用到本篇後續的教學,原因是R Console本身並沒有像是R Studio分割視窗,提供Environment這個區塊,讓你可以隨時看到目前你宣告過的物件以及預覽物件的內容,也因此我們偶爾就會需要檢視看看,目前我們到底宣告了多少物件,哪些是我們等等會使用到的。

正文:
首先,考量到各位讀者的程度不同,因此,我建議有程式基礎者,可以直接上CRAN(Comprehensive R Archive NetworkR綜合典藏網)找相關資源或善用Google找尋相關資源(搜尋Directory and File Manipulate這個關鍵字),本章節會涵蓋的大多為檔案與資料夾下的操作Directory and File Manipulate

那在該翻轉教室上,我們會學到getwd()setwd()這兩個函式(function)。那wd代表的是working directory,目前工作中的資料夾。
編按:有學過C++應該就對get/set這兩個概念很了解(一開始都要寫個類別Class,並宣告function兩個可以對類別內的物件操作的function,用與取得資料的就是get,設定資料的就是set)
經過這樣知識的小補充,應該就知道,getwd就是得到目前工作中的資料夾的絕對路徑,setwd(dir)就是將工作中的資料夾路徑修改為指定的dir位址。
編按:如果對本文章教學得function有疑問,可以善用?或是help()就能輕易的再R StudioHelp視窗得到解答,例如:Console視窗可以打 ?getwd或是help(getwd)都能得到相同的結果。

而如果我們要檢視目前工作資料夾下的所有檔案名稱,則可以使用dir()或是list.files()就能得到結果,這樣的結果有助於我們未來去使用工作資料夾下的檔案(未來可能需要匯入一些資料進行處理)

而如果我們要看看目前環境中所有物件的名稱,則可以善用ls()或是用objects()這兩個function協助我們列出所有物件的名稱。
編按:以上面這兩個function為例子,其實我們可以加入許多的引數(argument),在R中我們可以利用args()來查詢函數會有哪些得引數可以加入。
例如:args(ls),則結果如下:
function (name, pos = -1L, envir = as.environment(pos), all.names = FALSE, pattern, sorted = TRUE)



dir.create()可以在目前的工作資料夾(預設)或是在指定路徑()下創造一個新的資料夾或檔案。
例如:dir.create(“testdir”)就是在目前工作資料夾建立一個名為testdir的資料夾,如果要創造檔案則可以直接在後面加附檔名。
如果此時我們要確認先前創造的檔案或是資料夾是否存在,則我們可以利用dir.exists來測試。
例如:以上面的dir.create(“testdir”)做為開端,此時我們可以執行dir.exist(“testdir”)看是否檔案、資料夾是否存在,如果存在,則會回傳[1] TRUE,反之則會回傳[1] FALSE
在該教程,我們沒有談論如何刪除創建的檔案或是資料夾還好網路上有大神解答了,用unlink就可以達成,他的功能是刪除檔案或是資料夾。
以上面測試的資料夾名稱進行試驗,則我們可以寫unlink(“testdir”)即可達成,不過該function沒有回傳值,所以要測試是否有成功刪除,還是要用dir.exists()來達成。

而關於檔案操作經整理有以下幾種:我們可以創造檔案、確認檔案存在與否、存取檔案的資訊、重新命名檔案、複製檔案、刪除檔案、建構一個檔案的相對路徑。而這些與檔案相關的,就像是過去在C++這類型的物件導向程式操作很類似,我們可以把檔案想成是一個已經是定義的Object,而我們就能呼叫預先定義的操作。
例如:
file.create : 在工作資料夾裡面創造一個檔案,file.create("mytest.R")就是創建一個名為mytest.R的檔案。
file.exists:在工作資料夾中確認某一個檔案是否存在,file.exists("mytest.R")就是測試目前工作資料夾下有沒有一個名為mytest.R的檔案。
file.info():可以存取特定檔案的資訊,以我們剛剛創建的mytest.R的檔案為例,file.info("mytest.R"),我們可以得到結果為:
             size    isdir    mode    mtime    ctime    atime exe
mytest.R    0    FALSE    666    2018-07-23 23:37:12    2018-07-23 23:37:12    2018-07-23 23:37:12    no
如果我們僅是要看特定的檔案資訊,可以透過運算子$來存取
例如:file.info("mytest.R")$mode,就可以得到mytest.Rmode的資訊,如果以上面的結果來說,他就會輸出[1] “666”
file.remove():可以協助達成刪除特定檔案。
file.copy():可以協助去複製一份檔案,而他需要的function格式為file.rename(from,to),因此file.copy("mytest.R","mytest2.R")就是複製一個mytest.R並把他取名成mytest2.R
結語:雖然這個章節,我個人認為是屬於比較雞肋的章節,就是你用Windows或是類UnixOS都可以用作業系統既有方法達成檔案創建等上述功能,但是如果嫻熟操作,其實也可以節省一些時間,而且有助於你在單純只有R console的時候可以操作目前擁有的物件。

留言