本節書摘來自華章出版社《r語言資料挖掘:實用項目解析》一書中的第1章,第1.2節r語言引論,作者[印度]普拉迪帕塔·米什拉(pradeepta mishra),更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視
1.2 r語言引論
<a href="https://www.r-project.org/">https://www.r-project.org/</a>
1.2.1 快速入門
啟動r時的資訊如下圖所示。所有輸入r控制台的都是對象,在一個激活的r會話中建立的對象都有各自不同的屬性,而一個對象附有的一個共同屬性稱作它的類。在r中執行面向對象程式設計有兩種比較普遍的方法,即s3類和s4類。s3和s4的主要差別在于前者更加靈活,後者是更結構化的面向對象程式設計語言。s3和s4方法都将符号、字元和數字當作r會話中的一個對象,并提供了可使對象用于進一步計算的功能。

1.2.2 資料類型、向量、數組與矩陣
資料集可分為兩大類型:原子向量和複合向量。在r語言中,原子向量可以分為5種類型,即數值或數字型、字元或字元串型、因子型、邏輯型以及複數型;複合向量分為4種類型,即資料框、清單、數組以及矩陣。r中最基本的資料對象是向量,即使将單數位數字賦給一個字母,也會被視為一個單元素向量。所有資料對象都包含模式和長度屬性,其中模式定義了在這個對象裡存放的資料類型,長度則定義了對象中包含的元素個數。r語言中的c()函數用于将多種元素連接配接成一個向量。
讓我們來看r中不同資料類型的一些示例:
在上述代碼中,向量x1是一個數值型向量,元素個數是5。class()和mode()傳回相同的結果,是以都是在确定向量的類型:
在上述代碼中,向量x2是由5個元素組成的一個邏輯型向量。邏輯型向量的元素或值可以寫成t/f或者true/false。
在上述代碼中,向量x3代表了一個長度為25的字元型向量。該向量中的所有元素都可以用雙引号(" ")或單引号(' ')調用。
因子是資料的另一種格式,因子型向量中列出了多種分類(也稱“水準”)。在上述代碼中向量a是一個字元型向量,它的兩個水準/分類以一定頻率重複。as.factor()指令用于将字元型向量轉換成因子資料類型。使用該指令後,我們可以看到它有5個水準:analytics、datamining、machinelearning、projects和statistics。table()指令可用于顯示因子變量頻數表的計算結果:
資料框是r中另一種常見的資料格式,它可以包含所有不同的資料類型。資料框是一個清單,其中包含了多個等長的向量和不同類型的資料。如果隻是從電子表格導入資料集,那麼該資料類型将預設為資料框。之後,每個變量的資料類型均可更改。是以,資料框可定義為由包含不同類型的變量列組成的一個矩陣。在前面的代碼中,資料框x包含了三種資料類型:數值型、邏輯型和字元型。大多數真實資料集會包含不同的資料類型,比如,零售商店裡存儲在資料庫中的客戶資訊就包括客戶id、購買日期、購買數量、是否參與了會員計劃等。
關于向量的一個要點:向量中的所有元素必須是同類型的。如果不是,r會進行強行轉換。例如,在一個數值型向量中,如果有一個元素是字元型,該向量的類型會從數值型轉換成字元型。代碼如下所示:
r是區分大小寫的,比如,“cat”與“cat”,它們是不同的。是以,使用者在給向量配置設定對象名字時必須格外注意。
有時,要記住所有對象名字不總是那麼容易,示例如下:
若想知道目前r會話中的所有活動對象,可使用ls()指令。list指令也會輸出目前r會話中的所有活動對象。下面我們來看看什麼是清單、如何從清單中提取元素以及如何使用list函數。
1.2.3 清單管理、因子與序列
清單是一個可包含抽象對象的有序對象集合。清單中的元素可以通過雙重中括号擷取。不要求所包含的對象是同一類型,示例如下:
在上面的例子中,客戶id及其手機号是數值型變量,而客戶名字及其電子郵箱位址是字元型變量。上面的清單中共有4個元素。如果要從清單中提取元素,則可使用雙重中括号;如果隻需從中提取子清單,則使用中括号即可,示例如下:
關于清單,接下來的操作是如何合并一個以上的清單。多個清單可以通過cbind()函數合并,即列合并函數,示例如下:
因子可定義為在分類或名義變量中以一定頻率出現的水準。換句話說,在分類變量中重複出現的水準就被稱為因子。在下面給出的樣例腳本中,一個字元型向量“域”包含了很多個水準,使用factor指令可以估算每個水準的出現頻率。
序列是重複的疊代個數,無論是數值、分類值還是名義值,都可以組成一個序列資料集。數值序列可利用一個冒号運算符生成。如果要用因子變量生成序列,可以使用gl()函數。在計算分位數和畫圖函數時,這個函數特别有用。gl()函數也可應用于其他一些場景,示例如下:
代碼的第一行生成升序的序列,第二行生成降序的序列,最後一行生成因子資料類型序列。
1.2.4 資料的導入與導出
如果設定了windows目錄路徑,那麼要導入一個檔案到r系統,就并不需要輸入檔案所在的全路徑。如果windows目錄路徑設定的是系統的其他路徑,而你仍然要讀取那個檔案,則需要給出檔案所在的全路徑:
文檔中的所有檔案都可以不指定詳細路徑就能讀取得到。是以建議讀者将目錄設定成檔案所在目錄。
檔案格式有很多種,其中csv或者txt格式最适合r語言平台,示例如下。不過,我們也可以導入其他格式的檔案。
如果使用的是read.csv指令,不需要将header(表頭)設定成true,也不需要将separator(分隔符)設定成comma(逗号)。但如果使用的是read.table指令,那就必須這樣設定,否則r會從表頭開始讀取資料。
在輸入提取檔案路徑時,使用“/”或者“\”都可以。在實際項目中,典型的資料是以excel格式存儲的。而如何從excel表讀取資料是一個挑戰。如果先将資料存成csv格式再導入r并不總是那麼友善。下面的腳本将展示如何在r中導入excel檔案。我們需要調用兩個外部的庫來導入像excel這樣的關系資料庫管理系統(rdbms)檔案。這兩個庫将在腳本中提及,其中還給出了一部分樣例資料:
導入spss檔案的方法如下所示。傳統企業級軟體系統産生的資料要麼是spss格式,要麼是sas格式。導入spss和sas檔案的文法需要額外的包或者庫。導入spss檔案需要使用hmisc包,導入sas檔案則需要使用sas7bdat庫:
若要從r中導出一個資料集到任何一個外部位址,可以把read指令改成write指令,再把目錄路徑改為導出檔案的路徑。