在上一篇([16]用R來看股票,透過quantmod了解R的強大)用了quantmod
快速了解如何使用R並且用他來做資料處理的便利性。
在這篇將會更深入一點點的介紹R的語言特色、幾種不同的資料形態。
R的語言特性(Language Paradigm)
基本上現在任何程式語言都會有多個語言特性,例如C#一開始屬於Object Oriented Language,不過後來吸收了一些別的特性,又多出了像是Functional Language的特性等。知道了語言特性之後,對於整個運作模式會比較了解。那R是屬於什麼類型呢?
基本上,個人覺得R有兩個重要的特性:
- Vector Base
- Functional Programing
Vector Base - 一切都是向量
基本上在R裡面,最基本的組成是vector,因此就算一個簡單的2+3
,最後的結果其實是一個vector:
<-
。雖然用=
也可以,但是因為=
在特殊地方有特殊含義,因此還是建議用<-
。 vector為導向有什麼特別的嗎?vector為主對於做運算非常方便:
- 單數運算
如果是對單數做加減乘除,會把所有的vector都加上那個值。
b <- c(2,3) b * 2
- 兩個vector運算
如果是兩個vector相加,那麼對應的位置會互加。
c <- c(6,7) b+c
Functional Programming
基本上R可以理解為functional programing language。因此如果很熟悉functional programming的開發方式,會覺得很親切。
舉例來說,剛剛那個所有vector都+2的範例,如果改成functional寫法可以是:
sapply(b, function(x){x + 2})
得到的結果會是:[1] 4 5
這邊的意思是,對於每一個b
vairable的每一個值,會對他們執行一個anonymous function (匿名函數),這個function就是把值+2
apply
類型的function很常見,例如:lapply
、sapply
、vapply
等。
基本上每一個用途差不多,差異在於回傳的形態。
R還有一些別的特性,不過個人認為上面兩個最重要,並且因為這兩個的關係,所以雖然R支援loop,但是使用比較少(所以也不會特別介紹)。
對於特性有點概念了之後,來看看R裡面的形態和其他資料結構。
R的資料形態(data type)
R和一般語言不一樣,在C#裡面如果有個variable是int,例如:int a
,那麼a的形態就是integer。
但是在R裡面,雖然資料形態是integer,但是他的底層是vector,這也是為什麼說R是vector base,因為一切都是vector。 integer只是代表裡面儲存的資料形態而已。
資料形態 | 範例值 | Note |
---|---|---|
Logical | TRUE ,FALSE ,T ,F |
注意要全大寫 |
Numeric | 10.5 ,2.5 |
|
Integer | 1L ,2L |
注意後面要加上L |
Character | "abc" ,'123' ,"TRUE" |
單引號' 或者雙引號" 都可以 |
Complex | 3 + 2i |
|
Raw | charToRaw("hello") |
|
Factor | factor(c("male", "female")) |
|
資料形態 | 範例 |
---|---|
Logical | l <- c(TRUE, FALSE, T, F) class(l) is.logical(l) |
Numeric | n <- c(10.5, 2.5) class(n) is.numeric(n) |
Integer | i <- c(1L,2L) class(i) is.integer(i) |
Character | char <- c("abc", '123', 'TRUE') class(char) is.character(char) |
Complex | complex <- c(3 + 2i) class(complex) is.complex(complex) |
Raw | raw <- charToRaw("hello") class(raw) is.raw(raw) |
Factor | gender <- factor(c("male", "female")) class(gender) is.factor(gender) |
要非常注意這些Data Type非常重要,之後在分析資料的時候很有可能因為形態錯誤的關係導致使用的演算法結果錯誤。
因此了解這些基本形態會減少掉之後很多問題。
這篇有用到的R function介紹
在這邊用到了三個R的方法(還有c
不過這個下一篇介紹):
- class
- 這個用來看variable裡面的data type是什麼
- is.*
- 用來判斷某個variable的class符不符合。 有個function是
as.*
,用來做轉型用。 - factor()
- 把vector轉成factor
結語
在這篇首先對R的語言特性先做了介紹,了解到兩個最重要的特性:
- Vector base
- functional programming
再來看了R裡面的每一個最小單位的不同形態。
在下一篇將會介紹R裡面的資料結構(Data Structure),和如果有問題如何找到相關的文件。
沒有留言 :
張貼留言