Professional Documents
Culture Documents
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 個以上免費套件
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)
15
當向量中的元素為遺失值 (Missing Value) 時,其相關位置可給予一個特
定的值 NA( 需為大寫 ) 。
> V <- c(10, 5, NA, 6.4, 9.2, 21.7)
16
1.2.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()
函數,此函數第一個參數指定資料向量,
而第二個參數指定陣列維度
19
要建立一個陣列,也可直接透過 array()
函數,此函數第一個參數指定資料向量,
而第二個參數指定陣列維度
要建立一個 4 × 6 的 2 維陣列
> X <- array(1:24, dim = c(4,6))
20
可使用 rbind() 及 cbind() 函數來建立陣列
rbind() 表示把向量橫列 (Row) 地合併成一個陣
列
cbind() 是使用行 (Column) 方式合併
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,]
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