R筆記02-檔案與系統
前言:
[本篇教學正文,多自參考R語言翻轉教室內的教學,有興趣可以點此看如何開始教學課程]
這篇雖然教做R筆記02,但是本網誌的第一篇R筆記...原因是我還在整理R筆記01,但內容可能會涵蓋比較廣,所以先上這一篇XD
首先還是帶著各位來回顧一下,我自己學R語言的一個歷程。當初是在經驗模式方法這門課學到的,該門課程是比較偏深入一點的線性回歸模型應用,在該門課的期末課程專案,需要使用到R語言,因此才對R有初步的了解。時光荏苒,一轉眼就到了碩士論文階段,為了使用分類與迴歸決策樹(Classification and regression tree,CART
)的模型,所以就使用了R來產生決策樹與後續的分析。
大概這3年間,從我一開始使用是用R Console這個環境,他外層有一個圖形化界面(Graphic User Interface,GUI),中間則是比較接近Command Line得一個小視窗。而現在,普遍大家比較常用的R語言的整合開發環境(Integrated Development Environment,IDE) 則是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 Network,R綜合典藏網)找相關資源或善用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 Studio得Help視窗得到解答,例如:在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.R的mode的資訊,如果以上面的結果來說,他就會輸出[1] “666”。
file.remove():可以協助達成刪除特定檔案。
file.copy():可以協助去複製一份檔案,而他需要的function格式為file.rename(from,to),因此file.copy("mytest.R","mytest2.R")就是複製一個mytest.R並把他取名成mytest2.R。
結語:雖然這個章節,我個人認為是屬於比較雞肋的章節,就是你用Windows或是類Unix的OS都可以用作業系統既有方法達成檔案創建等上述功能,但是如果嫻熟操作,其實也可以節省一些時間,而且有助於你在單純只有R console的時候可以操作目前擁有的物件。
留言
張貼留言