You are on page 1of 38

第 1 章 : 簡介

1
R 簡介
 Ross Ihaka 與 Robert Gentleman (1966) 所開發出
來之相似於 AT & T 貝爾實驗室所開發之 S 語言
 R 有 Windows 、 Unix 、 Linux 及 Apple MacOS 等
不同作業系統的版本
 免費軟體,其網站位於 http://www.r-project.org

2
R 軟體執行畫面

R
http://www.r-project.org/
3
R 應用領域
 統計分析
 資料探勘
 機器學習
 推薦系統
 文字探勘
 巨量資料分析

4
1.1 開始使用 R 軟體
RStudio 是一個為 R 設計的整合型操作介面軟

R Studio
5
http://www.rstudio.com/
 R 網站中提供功能非常強大的工具集,使用者可
從 CRAN 上安裝相關套件 (Package)
 提供 8000 個以上免費套件

 Windows 版本者可以很容易透過 " 程式套件 "


功能表來完成安裝套件。使用者可從該功能表中
選擇 " 載入程式套件 " 選項來選擇可用的套件。
 當使用者選擇想要的套件後, R 軟體將下載所選用的
套件並自動進行安裝。

6
 例如安裝 C5.0 決策樹套件 "C50"( 請特別注
意英文大小寫是不相同 ) ,只需要在 R 提示
符號 ">" 後輸入以下指令
> install.packages("C50")
 使用者可使用以下指令來使用 C50 套件中提
供之函數
> library(C50)
 若是要移除已安裝套件,例如 C50 套件,可
以使用下面的指令
> remove.packages("C50")
7
 有些套件無法在 CRAN 的 " 程式套件 "
下的 " 載入程式套件 " 選項中找到,此時
使用者需先至適當網站下載套件的 zip 檔再
使用 " 程式套件 " 下的 " 用本機的 zip
檔案來安裝程式套件 " ,安裝後使用者可使
用以下指令來使用 ANN 套件中提供之函數
> library(ANN)
例如 :
使用 ANN 套件,需先至下列網站下載 ANN_0.1.4.zip
http://cran.r-project.org/src/contrib/Archive/ANN/
8
 如果使用者想要知道電腦中已經安裝了哪些套
件,使用者可以輸入
> installed.packages()
 可以使用 library() 來查看已安裝套件之簡易
資訊
> library()
 可以使用下面的指令來更新所有已安裝的套件
> update.packages()

9
 R 語言透過物件 (Object) 來運作,首先這些物件是使
用它們的名稱 (Name) 和值 (Content) 來描述其特性
 物件名稱第一個字母須為英文字母或句點 "." ,若
以句點當物件的第一個字母則其後接的第一個字元不
能為數字,如 .2iswrong 是不能當物件名稱
 物件不需要事先宣告但其大小寫代表不同的物件,因
此 X 和 x 是不同的物件
 R 語言有保留一些指令名稱的保留字 , 如 c 與 NA
等。 R 語言可使用指派( Assignment )運算式 "<-"
來指派物件的值 ( 亦可使用 "=")

10
 可透過物件的資料種類即屬性 (Attribute) 來描述其
特性
 對於作用於一個物件的函數會取決於物件的屬性
 所有的物件都有兩個內在屬性
 資料型態 (Mode) 和長度 (Length)
 物件中的元素 (Element) 共有四種基本資料型態
 數值 (Numeric) 、文字 (Character) 、複數 (Complex) 和
邏輯 (Logical)
 長度 (Length) 是物件中元素的數目
 物件的資料型態和長度可以分別通過函數 mode() 和
length() 得到
11
 如果要執行多個指令於同一列中, R 軟體
指令可以使用分號 ";" 隔開
> x <- 10; y <- x^2; z <- sqrt(y)
 注解可以放在程式中任何地方,從井號
"#" 開始到句子結束之間的語句就是注解
> x <- 10 # 整數型數值

12
1.2 R 物件
 R 軟體是以物件導向為主的程式語言
 常用物件
 向量 (Vector)
 陣列 (Array)
 矩陣 (Matrix)
 因子 (Factor)
 資料框架 (Data Frame)
 列表 (List)

13
1.2.1 向量
 向量是由包含相同資料型態的元素組成

 R 程式中最簡單的結構就是由一串有序數值
構成的數值 (Numeric) 向量

14
假如我們要建立一個含有 6 個數值的向量 V ,且
其值分別為 10 、 5 、 3.1 、 6.4 、 9.2 和
21.7 ,則 R 程式中的指令為 c() 函數
> V <- c(10, 5, 3.1, 6.4, 9.2, 21.7)

也可使用 assign() 函數來達到相同結果


> assign("V", c(10, 5, 3.1, 6.4, 9.2, 21.7))

15
 當向量中的元素為遺失值 (Missing Value) 時,其相關位置可給予一個特
定的值 NA( 需為大寫 ) 。
> V <- c(10, 5, NA, 6.4, 9.2, 21.7)

 R 還提供 Inf 、– Inf 及 NaN(Not a Number) ,而 NULL 是指物件的長度是 0 。


> V <- c(1,-2,0)
> V/0
> V <- NULL
> length(V)

 使用者可以使用中括弧 "[]" 來存取向量中的特定元素


> V[2]

 使用者也可使用 ":" 建立向量。


> V2=1:10
> V2[2:4]

16
1.2.2 陣列
 陣列可以看作是多維度的向量

 一個 3 維的陣列 X 可以用 X[i,j,k] 來


指向特定元素

假設陣列 X 的維度向量是 c(3,4,2) ,則


X 中有 3x4x2=24 元素,依次為
X[1,1,1], X[2,1,1],...,X[2,4,2],X[3,4,2]

17
 使用者可以使用 dim() 函數指定其陣列維
度 (Dimension) ,讓 X 變成一個 3x4x2
的 3 維陣列,而 R 程式會依照行
(Column) 的方式排列
> dim(X) <- c(3,4,2)
 使用者可以讓 X 變成一個 4 × 6 的 2
維陣列
> dim(X) <- c(4,6)

18
 要建立一個陣列,也可直接透過 array()
函數,此函數第一個參數指定資料向量,
而第二個參數指定陣列維度

要建立一個 3x4x2 的 3 維陣列


> X <- array(1:24, dim = c(3,4,2))

19
 要建立一個陣列,也可直接透過 array()
函數,此函數第一個參數指定資料向量,
而第二個參數指定陣列維度

要建立一個 4 × 6 的 2 維陣列
> X <- array(1:24, dim = c(4,6))

20
 可使用 rbind() 及 cbind() 函數來建立陣列
 rbind() 表示把向量橫列 (Row) 地合併成一個陣

 cbind() 是使用行 (Column) 方式合併

> X1 <- c(1,2,3,4)


> X2 <- c(5,6,7,8)
> X <- rbind(X1,X2)
> X <- cbind(X1,X2)
21
1.2.3 矩陣
 矩陣 (Matrix )就是一個 2 維的陣列,
要建立一個矩陣可以使用函數 matrix()
X <- matrix(1:24, nrow=4, ncol=6, byrow=TRUE)

22
1.2.3 矩陣
 亦可使用 rbind() 及 cbind() 函數來建
立矩陣
> X1 <- c(1,2,3)
> X2 <- c(4,5,6)
> X3 <- c(7,8,9)
> X <- cbind(X1,X2,X3)

23
 t() 是矩陣的轉置 (Transposition) 函數
> Y=t(X)
 nrow() 和 ncol() 函數會分別傳回矩陣的列數和行數
> m <- nrow(Y)
> n <- ncol(Y)
 若欲顯示矩陣 X 第一行元素,可使用
> X[,1]
 若欲顯示矩陣 X 第二列元素,可使用
> X[2,]
 若欲顯示矩陣 X 第一及三列元素,可使用
> X[c(1,3),] 24
 若欲移除矩陣 X 第一行元素,可使用
> X[,-1]

 若欲移除矩陣 X 第二列元素,可使用
> X[-2,]

 eigen() 函數用來計算矩陣的特徵值 (Eigen Value) 和特徵向量 (Eigen


Vector)
> eigen(Y)

25
 可用 "%*%" 運算式表示矩陣相乘
> z <- Y%*%X

 若欲修改矩陣 z 的行名稱
> colnames(z) <- c("c1","c2","c3")
> z

 若欲修改矩陣 z 的列名稱
> rownames(z) <- c("r1","r2","r3")
> z

26
1.2.4 資料框架
 資料框架與矩陣的結構類似,因為兩者的
結構皆是 2 維。 然而,與矩陣不同的是
資料框架可以在不同行中存在不同的資料
型態,但同行的資料型態及長度必須相同

 資料框架的每一列可視為一組觀察值
(Observation) 或案例 (Case) ,其變數名
稱是由每一行的名稱來定義

27
 可使用下列方式建立資料框架
> id <- c(1, 2, 3, 4)
> age <- c(25, 30, 35, 40)
> sex <- c("Male", "Male", "Female", "Female")
> pay <-c (30000, 40000, 45000, 50000)
> X.dataframe <- data.frame(id, age, sex, pay)

28
 可使用下列方式取得或參照到資料框架中
某一位置的元素
> X.dataframe[3,2]

29
 可使用行的名稱取得或參照到資料框架中
相對應行的所有的元素
> X.dataframe$age
 可使用下列方式取得或參照到資料框架中
相對應行的名稱及元素
> X.dataframe[2]

30
 R 程式提供與 Excel 界面類似的編輯器來建立或修改資
料框架的值  
> edit(X.dataframe)

31
 若確定要變更 " 修改後 " 的資料框架,需使用
指派運算數
> X.dataframe <- edit(X.dataframe)

32
1.2.5 因子
 因子( Factor )是一種特別的向量,用於
將同樣長度的離散資料向量做群組
( Grouping )。文字向量中每一個元素,
取一個離散值,因子有一個特殊屬性稱層
次 (Levels) 表示這組所有的離散值
 可以使用 factor() 函數來建立因子
> sex <- factor(c(" 男 ", " 女 ", " 男 ", " 男 ",
" 女 "))

33
1.2.6 列表
 R 程式的列表是一個以物件的有序集合
(Order Sequence) 所構成的物件
 列表中的組成元素 (Component) 可以是異
質 (Heterogeneous) 的物件
 每一個組成元素之資料型態可以不相同
 一個列表中組成元素可以包括數值、邏輯、
文字、複數、向量、矩陣、因子及資料框
架等等。

34
 可以使用 list() 函數來建立列表
> id <- c(1, 2, 3)
> sex <- c("Male", "Male", "Female")
> pay <-c (30000, 40000, 45000)
> Y.dataframe <- data.frame(id, sex, pay)
 

35
> gender <- factor(c(" 男 ", " 男 ", " 女 "))
> Paul.Family <- list(name="Paul", wife="Iris", no.kids=3,
kids.age=c(25,28,30), gender, Y.dataframe)

36
 可以使用 "$" 來取得或參照到列表中某一位置的組成元素
例如欲取得 Paul.Family 中第四個元素:
> Paul.Family$kids.age
 也可以使用雙重中括弧 "[[]]" 及序號值來取得或參照到列
表中某一位置的組成元素
例如取得 Paul.Family 中第四個元素:
> Paul.Family[[4]]
 若使用一個中括弧 "[]" 及序號值可取得或參照到列表中某
一位置的組成元素及名稱
 Paul.Family[4]

 若欲取得第二個孩子的年齡,則可使用
> Paul.Family$kids.age[2]
  或
> Paul.Family[[4]][2] 37
1.2.7 物件轉換
 R 程式中提供多個函數來作為不同物件之間的轉換。此函數包含 :as.vector() 、
as.array() 、 as.matrix() 、 as.factor() 、 as.data.frame() 及 as.list() 。

建立資料框架物件
> id <- c(1, 2, 3, 4)
> x <- data.frame(id)
> x

轉換資料框架物件為矩陣物件
> matrix.x=as.matrix(x)
> matrix.x
 
轉換矩陣物件為向量物件
> vector.x=as.vector(matrix.x)
> vector.x

38

You might also like