天天看點

R語言概述

R是一個有着統計分析功能及強大作圖功能的軟體系統,是由Ross Ihaka和Robert Gentleman共同創立。它是屬于GNU系統的一個自由、免費、源代碼開放的軟體,同時也是一個用于統計計算和統計制圖的優秀工具。

一、R的發展曆史

要說R,就不得不先來說一下S語言。1980年左右,AT&T貝爾實驗室設計出一種在統計領域廣泛使用的S語言。S語言是一種解釋型語言,被設計用來進行資料探索、統計分析和作圖。

S語言最初的實作版本主要是S-PLUS,它是一個基于S語言的商業軟體,由MathSoft公司的統計科學部進一步完善。後來,Auckland大學的Robert Gentleman和Ross Ihaka及其他志願人員開發了一個R系統。

R是基于S語言的一個GNU項目,是以也可以當作S語言的一種實作,也就是說,通常用S語言編寫的代碼都可以不作修改地在R環境下運作。正因為如此,有人說R是S-PLUS的一個“克隆”。

二、R的主要功能

R既是一種軟體,也可以說是一種語言,它R是一套完整的資料處理、計算和制圖軟體系統。

R的主要功能包括:資料存儲和處理、數組運算、統計分析、統計制圖等。此外,它提供了簡便而強大的程式設計語言,可操縱資料的輸入和輸出,可實作分支、循環,也可實作使用者自定義功能。

三、R的下載下傳與安裝

R的安裝檔案支援多個平台,即我們可以在Windows,Linux或Mac OS X上使用R。

R語言概述

圖1 R安裝包的展示頁面

從圖1中我們可以看到,R的安裝包支援Windows,Linux和Mac OS X三個平台。大家可以根據自己所使用的系統選擇對應的安裝包。

筆者使用的是Windows系統,是以點選圖1中的“Download R for Windows”,可以看到如圖2所示的頁面。

R語言概述

圖2 Windows平台下的R安裝包概況

從圖2中可以看到,R的安裝包分為基礎包(base)、貢獻包(contrib)和工具包(Rtools)。對于初學者來說,使用基礎包就足夠了。當大家想要對R進行深入的學習的時候,再來下載下傳貢獻包(contrib)和工具包(Rtools)。

點選圖2中的“base”,進入如圖3所示的下載下傳頁面。

R語言概述

圖3 R安裝包的下載下傳頁面

點選圖3中的“Download R 3.2.3 for Windows”即可下載下傳R的基礎安裝包。

安裝包下載下傳好之後,輕按兩下即可開始安裝。按照安裝提示進行一步步的操作,即可将R安裝到自己的電腦上,同時在桌面上建立快捷方式。

首次進入R軟體的界面如圖4所示。

R語言概述

圖4 R軟體的界面

從圖4可以看出,R預設的指令提示符是“>”,它表示正在等待輸入指令。

四、R的基本原理

在學習R之前,我們先來了解一下R的工作原理。

我們知道,像C、C++、Java這樣的程式設計語言,我們在使用它們的時候,必須要構造一個完整的程式形式,單獨輸入一條指令是無法運作的,但R卻不是這樣的。因為R是一種解釋型語言,而不是編譯語言,這就意味着輸入的指令能夠直接被執行,而不需要先構成一個完整的程式形式。R的文法也是非常之簡單和直覺的。

在R運作的時候,所有變量、資料、函數及結果都以對象(objects)的形式存在計算機的活動記憶體中,并冠有相應的名字代号。我們可以通過用一些運算符(如算術、邏輯、比較等)和一些函數來對這些對象進行操作。

關于R中的函數,我們可用圖5來形象地描述。

R語言概述

圖5 R的函數

圖5中的參量(arguments)可能是一些對象(如資料、方程、算式等),有些參量在函數裡被預設為預設值,使用者則可按需對其作個别的修改,是以運作一個R函數可能不需要設定任何參量,原因是所有的參量都可以被預設為預設值,當然也有可能該函數本身就不含任何參量。

R的具體工作原理如圖6所示。

R語言概述

圖6 R工作原理示意圖

從圖6中可以看出,在R中進行的所有操作都是針對存儲在活動記憶體中的對象的。對資料、結果或圖表的輸入與輸出都是通過對計算機硬碟中的檔案讀寫而實作。使用者通過輸入一些指令調用函數,分析得出的結果可以被直接顯示在螢幕上,也可以被存入某個對象或被寫入硬碟。因為産生的結果本身就是一種對象,是以它們也能被視為資料并能像一般資料那樣被處理分析。資料檔案既可從本地磁盤讀取也可通過網絡傳輸從遠端伺服器端獲得。

所有能使用的R函數都被包含在一個庫(library)中,該庫存放在磁盤的R_HOME/library目錄下(R_HOME是安裝R的位址,如筆者的庫目錄為:D:\Program Files\R\R-3.2.3\library)。這個目錄下含有具有各種功能的包(packages),這些包也是按照目錄的方式組織起來的。

在所有的包中,名為base的包可以算是R的核心,因為它内嵌了R語言中所有像資料讀寫與操作這些最基本的函數。在每個包内,都有一個子目錄R,這個目錄裡又都含有一個與此包同名的檔案(例如在包base中,有這樣一個檔案R_HOME/library/base/R/base),該檔案正是存放所有函數的地方。

五、R的對象

在R中進行的所有操作都是針對存儲在活動記憶體中的對象進行的。是以,對象在R中占據了核心的地位。

1.對象的命名規則

對象的名字必須是以一個字母(A-Z或a-z)開頭,中間可以包含字母、數字(0-9)、點(.)及下劃線(_)。

同時,R對象的名字是區分大小寫的,是以像x和X就可以代表兩個完全不同的對象。

2.對象的簡單操作

(1)對象的指派

一個對象可以通過指派操作來産生,R語言中的指派(“ssign”)符号一般是由一個尖括号與一個負号組成的箭頭形标志。該符号可以是從左到右的方向,也可以相反。

例如,我們可以打開R軟體的運作界面,在界面上為對象n指派。

運作結果行中的方括号中的數字1表示從n的第一個元素開始顯示。我們可以看到,R中的對象可以直接使用,而不用像很多程式設計語言那樣,必須要先定義之後再使用。如果該對象已經存在,那麼它以前的值将會自動被新值沖掉(這點與大部分程式設計語言是相同的)。

(2)對象的大小寫

之前說過,R對象的名字是區分大小寫的,例如,我們可以為對象x和X賦不同的值。

(3)指派方式的多樣性

在R中,給對象指派有多種形式,可以是直接賦一個數值,也可以是一個算式或一個函數的結果。

運作rnorm(1)将産生一個服從平均數為0、标準差為1的标準正态分布的随機變量。我們也可以隻是輸入函數或表達式而不把它的結果賦給某個對象,但這樣在視窗中展示的結果将不會被儲存到記憶體中。

(4)顯示記憶體中的對象

在R中,要用分号(;)來隔開同一行中的不同指令語句。字元串類型的變量要用雙引号(“”)括起來。

函數ls的功能是顯示所有在記憶體中的對象,但隻會列出對象名。

如果隻需要顯示出在名稱中帶有某個指定字元的對象,則通過設定選項pattern(可簡寫為pat)來實作。

如果進一步限為顯示在名稱中以某個字母開頭的對象,則可:

運作函數ls.str()将會展示記憶體中所有對象的詳細資訊。

(5)删除對象

要在記憶體中删除某個對象,可利用函數rm。運作rm(x)将會删除對象x,運作rm(x,y)将會删除對象x和y,而運作rm(list=ls())則會删除記憶體中的所有對象。

當然,ls()函數中的一些選項同樣也可以運用到rm中來,以選擇的删除某些特定的對象,如rm(list=ls(pat=”^m”))。

3.對象的類别概覽

如圖7所示。

R語言概述

繼續閱讀