Amazon Ads

顯示具有 R 標籤的文章。 顯示所有文章
顯示具有 R 標籤的文章。 顯示所有文章

2014年4月8日 星期二

【R筆記】在R中讀取CSV檔案

當在做統計運算時,有時資料可能是由檔案中讀取進來,再做後續的處理的,R提供了一些函式讓使用者可以讀取檔案,read.csv()這個函式就是其中一種。 假設我在電腦中有一個檔案,名稱為dummy.csv,其內容為:
a,b,c,d,e
1,2,3,4,5
6,7,8,9,10
11,12,13,14,15
16,17,18,19,20
R我可以使用下列函式來讀取它:
> data <- read.csv("/home/javakid/study/r/dummy.csv")
> data
   a  b  c  d  e
1  1  2  3  4  5
2  6  7  8  9 10
3 11 12 13 14 15
4 16 17 18 19 20
上列程式碼中,/home/javakid/study/r/dummy.csv是我存放CSV檔案的路徑。

要注意的是,若是在Windows環境中,若是使用反斜線\來指定路徑時,要打兩個反斜線\\,如D:\\stury\\r\\dummy.csv或是使用正斜線/來指定路徑,如D:/study/r/dummy.csv

2014年4月3日 星期四

【R筆記】在Ubuntu安裝R

Ubuntu中要安裝R,可以使用下列命令:
$ sudo apt-get install r-base r-base-html r-doc-html

上列的指令中,r-base是安裝Rr-base-htmlr-doc-html是安裝R的相關文件。

安裝完後,可以在美工繪圖的菜單下看到R


會放在這裡,是因為R本身所具備可以用來繪製圖表的關係嗎?XD,點按開啟後,會開啟執行R的終端機:


另外,也可以在終端機開啟後,直接輸入命令執行:
$ R

2014年3月27日 星期四

【R筆記】R的套件安裝

先來認識一下CRAN

CRAN是指存在於世界各地間,由ftp與網頁伺服所組成的網路,在這網路中存放相同的、最新版本的R程式碼和文件。

若要在CRAN下載套件(package)的話,可以依照下列步驟進行,這裡的環境是以Windows 7為主。

點按程式套件安裝程式套件...


會先出現CRAN的鏡像(mirror)網站列表,先選一個離我最近的鏡像點。


我這裡選擇的是Taiwan(Taipei)

再來會顯示套件的選擇對話窗,直接點選我要安裝的套件後,點按確定即可。


這裡值得注意的是,若我選擇安裝的套件有相依的套件,R會幫我安裝需要的相依套件後,我不用花時間去解決或煩惱套件間的相依問題。

若要移除已安裝的套件,就用remove.package()這個函式,如:
> remove.packages('actuar')

2014年3月25日 星期二

【R筆記】初探R的矩陣

R的矩陣(matrix)就是有維度(dimension)的向量(vector)

一講到這,愈看愈抽像,來看看一些函式和例子吧! 首先要提到每一個物件都有一個屬性叫dim,它是一個函式(function),它的功能在取得或設定一個物件的維度。

再來來看看文件:
> ?dim
文件中對於dim()的描述是:取得或設定一個物件的維度。


「矩陣是有維度的向量」,那我們要取得矩陣之前,就先要有個向量出來:
> profit <- c(2.0, 2.1, 2.2, 2.1, 2.3, 2.4)
> profit
[1] 2.0 2.1 2.2 2.1 2.3 2.4
再來使用dim()函式把向量profit轉為矩陣:
> dim(profit) <- c(2, 3)
> profit
     [,1] [,2] [,3]
[1,]  2.0  2.2  2.3
[2,]  2.1  2.1  2.4
上列指令把向量profit轉為一個2 X 3的矩陣,再來我們就可以下列指令,來取得矩陣中的資料:
> profit[1,]
[1] 2.0 2.2 2.3
上列會取得第一列的資料。
> profit[,2]
[1] 2.2 2.1
上列會取得第二欄的資料。
> profit[1,3]
[1] 2.3
上列會取得第一列、第三欄的資料。 你可以比較原來的向量和之後的矩陣,看資料是怎麼放的。

2014年3月21日 星期五

【R筆記】初探R模式(mode)與類別(class)

R中,每一個物件(object)都有一個模式(mode),它在說明資料是以何種型式儲存在記憶體中。

若要取得物件的模式,可以使用mode(),這個函數,它需要一個R物件當做參數,下列是一些例子: 1.41421,在 R 的模式是numberic
> mode(1.141421)
[1] "numeric"
"Hello R"的模式是character
> mode("Hello R")
[1] "character"
當我們指定了一個向量(Vector)後,它的模式是由它所包含的元素來決定的:
> n <- c(1, 2, 3, 4, 5)
> mode(n)
[1] "numeric"
> n1 <- c("a", "b", "c")
> mode(n1)
[1] "character"
上列n變數所包含的元素的模式皆為numeric所以它的模式是numeric

再來看看n1,它所包含的元素的模式皆為character所以它的模式是character

鏘鏘鏘!在【R筆記】初探R資料結構-向量(Vector)有提到,在向量中所有的元素,其資料型別都要一樣,指的就是元素所有的模式。 接著,我們來看看列表(List)的模式為何:
> list2 <- list(1, 2, 3, "x", "y", "z")
> mode(list2)
[1] "list"
因為我們在【R筆記】初探R資料結構-列表(List)中有提到,在列表所包含的元素,其模式可以不一樣,所以使用mode()函式看模式時,有另一種list的模式。

最後,我們常常在使用的各種函式,也有自己的模式,如print()函式的模式是function
> mode(print)
[1] "function"
R中,每一個物件也有一個類別(class),相對於模式來講,它具備的是比較抽象的概念,R根據一個物件類別,來決定以何種方式來做資料處理。 如我們看一個內建的資料集mtcars的模式和類別:
> mode(mtcars)
[1] "list"
> class(mtcars)
[1] "data.frame"
上列結果說明,mtcars這個資料集是以list型式儲存在記憶體中,而我們要處理它時,如使用print()函式將mtcars輸出,R會依據它的類別來做合適的處理。

若你想進一步認識R,我推薦R 錦囊妙計

【R筆記】初探R資料結構-列表(List)

這裡我們來認識一下R中的列表(List)資料結構。 要宣告一個列表的變數時,可以使用下列的指令:
> mylist <- list(1, 2, 3, 4, 5)
> mylist
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

[[4]]
[1] 4

[[5]]
[1] 5
跟向量(vector)不一樣的是,列表中的元素可以是異質 (heterogeneous) 的。

在同一個列表中的各個元素,可以各自是不同的資料型別,如:
> list2 <- list(1, 2, 3, "x", "y", "z")
> list2
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

[[4]]
[1] "x"

[[5]]
[1] "y"

[[6]]
[1] "z"
我們可以使用索引(index)來取得或參照到列表中某一位置的元表 下列的指令,參照到list2中第三個元素:
> list2[[3]]
[1] 3
鏘鏘鏘!這裡的中括號要有兩個,請記住,是兩個!

我們也可以使用多個索引來取得列表中某一群的元素。

使用下列指令,我們可以取得第1、3、5個元素所組成的列表:
> list2[c(1, 3, 5)]
[[1]]
[1] 1

[[2]]
[1] 3

[[3]]
[1] "y"
鏘鏘鏘!這裡的中括號只有一個!

我們可以為列表中的元素設定名稱。
> names(list2) <- c("le1", "le2", "le3", "le4", "le5", "le6")
> list2
$le1
[1] 1

$le2
[1] 2

$le3
[1] 3

$le4
[1] "x"

$le5
[1] "y"

$le6
[1] "z"
在指定元素名稱之後,要取得某一位置的元素,除了使用索引值之外,也可以使用「元素名稱」當索引來取得:
> list2[["le1"]]
[1] 1
或使用「list名稱$元素名稱」的方式來取得:
> list2$le1
[1] 1
鏘鏘鏘!上列指令中,兩個名稱之間是一個「$」符號。 如果你需要進一步地認識 R,我推薦:

還有只有 Kindle 版本的這本:

2014年3月19日 星期三

【R筆記】初探R資料結構-向量(Vector)

在 R 中 Vector 是最常用的資料結構,使用它前,我們需要了它幾個主要的特性。

在 Vector 中的資料,需要是同質性的,也是說在一個 Vector 的所有元素 (element),需要是同一型別,用 R 的話來說,就是要同一種模式 (mode)。

如我們指定一個 Vector 給變數d,則在指定的元素中,需要是同型別的:
> d <- c(1, 2, 3, 4, 5)
> d
[1] 1 2 3 4 5
若我們在指定 Vector 時,指定了不同型別的元素,則 R 會自動幫我們轉型:
> e <- c(1, 2, "a", "b")
> e
[1] "1" "2" "a" "b"
或是
> f <- c(2.0, e)
> f
[1] "2" "1" "2" "a" "b"
Vector可以使用索引 (index) 來取得某一位置的元素,如: > d[3] [1] 3 上列的指令取得d中第三個元素的值,這裡要注意的是,在R中的索引,是由1算起,而不是0
Vector 可以使用索引 (index) 來取得多個位置的元素,並回傳一個 Vector,如:
> d <- c(2, 4, 6, 8, 10)
> g <- d[c(1, 3, 5)]
> g
[1]  2  6 10
Vector 中的元素可以被設定一個名稱,Vector 有一個names的屬性,我們可以使用它來設定 Vector 的元素名稱,如:
> names(d) <- c("element1", "element2", "element3", "element4", "element5")
> d
element1 element2 element3 element4 element5 
       2        4        6        8       10 
請注意,這裡的names有「s」。 一旦給了元素名稱之後,我們也就可以使用名稱來取得 Vector 的元素了:
> d["element1"]
element1 
       2 
鏘!鏘!在中括號的元素名稱,請記得用兩個「"」 (雙引號) 包起來喔!
如果你需要進一步地認識 R,我推薦:

還有只有 Kindle 版本的這本:

2014年3月18日 星期二

【R筆記】R內建資料集

R中,有一些內建的資料集,在學習或練習時,可以用來當做原始資料,如:
> CO2
   Plant        Type  Treatment conc uptake
1    Qn1      Quebec nonchilled   95   16.0
2    Qn1      Quebec nonchilled  175   30.4
3    Qn1      Quebec nonchilled  250   34.8
4    Qn1      Quebec nonchilled  350   37.2
(以下略)
上列結果會列出CO2這資料集中的欄位和資料,若只是要看某一欄位內的資料,可以使用「資料集名稱$欄位名稱」的指令來取得,如:
> CO2$Plant
 [1] Qn1 Qn1 Qn1 Qn1 Qn1 Qn1 Qn1 Qn2 Qn2 Qn2 Qn2 Qn2 Qn2 Qn2 Qn3 Qn3 Qn3
[18] Qn3 Qn3 Qn3 Qn3 Qc1 Qc1 Qc1 Qc1 Qc1 Qc1 Qc1 Qc2 Qc2 Qc2 Qc2 Qc2 Qc2
[35] Qc2 Qc3 Qc3 Qc3 Qc3 Qc3 Qc3 Qc3 Mn1 Mn1 Mn1 Mn1 Mn1 Mn1 Mn1 Mn2 Mn2
[52] Mn2 Mn2 Mn2 Mn2 Mn2 Mn3 Mn3 Mn3 Mn3 Mn3 Mn3 Mn3 Mc1 Mc1 Mc1 Mc1 Mc1
[69] Mc1 Mc1 Mc2 Mc2 Mc2 Mc2 Mc2 Mc2 Mc2 Mc3 Mc3 Mc3 Mc3 Mc3 Mc3 Mc3
12 Levels: Qn1 < Qn2 < Qn3 < Qc1 < Qc3 < Qc2 < Mn3 < Mn2 < ... < Mc1
當我們要知道這些資料集中欄位意思等資訊,可以使用help()這個函式來開啟資料的相關文件:
> help(CO2)
或是
> ?CO2
就可以看到資料集描述、欄位定義與用法等資訊:


若要看目前可以使用的資料集有那些,可以使用data()這個函式:
> data()
執行後,就會出現資料集的說明文件:


若我們想要使用其他套件的資料集的話,也是可以使用data(),但此時要傳入兩個參數,第一個參數是我們要引入的「資料集名稱」,第二個參數是該資料集所在的「套件名稱」,如在MASS套件中,有一名為Cars93的資料集,在引入之前使用他,會得這樣的結果:
> Cars93
錯誤: 找不到物件 'Cars93'
若我們先執行下列指令:
> data(Cars93, package="MASS")
再看一次Cars93的內容,就會看到他的資料結構:
> Cars93
    Manufacturer          Model    Type Min.Price Price Max.Price
1          Acura        Integra   Small      12.9  15.9      18.8
2          Acura         Legend Midsize      29.2  33.9      38.7
3           Audi             90 Compact      25.9  29.1      32.3
4           Audi            100 Midsize      30.8  37.7      44.6
5            BMW           535i Midsize      23.7  30.0      36.2
6          Buick        Century Midsize      14.2  15.7      17.3
7          Buick        LeSabre   Large      19.9  20.8      21.7
8          Buick     Roadmaster   Large      22.6  23.7      24.9
9          Buick        Riviera Midsize      26.3  26.3      26.3
(以下略)
若我們己經有使用library()函式去引入MASS這個套件,則我們可以直接使用Cars93這個資料集。

要什麼引入與缷除套件,可以參考【R筆記】R的套件載入與缷除

如果你需要進一步地認識 R,我推薦:

還有只有 Kindle 版本的這本:

【R筆記】R的套件載入與缷除

在使用 R 載入套件時,一定要先來認識 labrary() 這個函式:
> ?library
它的功能就是「載入並掛載附加套件」。 這個函式主要功能在用來載入我們要用的R套件,比如我們要用一函式名稱為 lda,首先想要瞭解一下它的用法:
> ?lda
No documentation for ‘lda’ in specified packages and libraries:
you could try ‘??lda’
但我們會得上列的錯誤訊息,意思是說,在目前的套件或函式庫找不到 lad 這個函式的說明,它又很好心地告訴我們,可以試試「??lda」,於是我們在 console 中輸入:
> ??lda
就會跑出來搜尋的結果的說明文件:


再點「lda」,就可以看到如下的畫面:


太好了,在文件的第一行,我們可以看到「lda{MASS}」這一行字,在函式後面的大括號中所列出來的,是一個套件名稱,這表示「lad」這個函式,是存在於「MASS」這個套件中。我們知道要使用「lda」這個函式,就需要「MASS」這個套件,再來就是使用這個指令來引入:
> library(MASS)
引入之後,我們再輸入「?lda」這個指令,說明文件就會直接開啟,而不會回傳任何錯誤訊息了。

若我們要檢視目前引入的套件有那些,可以使用這個 search() 這個函式:
> search()
 [1] ".GlobalEnv"        "package:MASS"      "tools:RGUI"       
 [4] "package:stats"     "package:graphics"  "package:grDevices"
 [7] "package:utils"     "package:datasets"  "package:methods"  
[10] "Autoloads"         "package:base"  
嗯哼!在結果中,可以看出目前引入的套件,也包含 MASS 這個套件。 在引入某個套件後,若要缷除 (detach) 它,可以使用 detach() 這個命令,它需要傳入一個參數,就是我們要缷除的套件名稱,如:
> detach(package:MASS)
這裡要注意的是,在參數中,缷除的套件名稱前,需要加「package:」。 缷除後,我們再使用 search(),再次檢視引入的套件時,就看不到「MASS」這個套件了:
> detach(package:MASS)
> 
> search()
 [1] ".GlobalEnv"        "tools:RGUI"        "package:stats"    
 [4] "package:graphics"  "package:grDevices" "package:utils"    
 [7] "package:datasets"  "package:methods"   "Autoloads"        
[10] "package:base"
如果你需要進一步地認識 R,我推薦:

還有只有 Kindle 版本的這本:

2014年3月10日 星期一

【R筆記】使用R的向量(vector)的來做資料運算

vector 在 R 中是最簡單的資料結構,他是包含一系列資料的集合,如:
v <- (1, 2, 3, 4, 5)
上列的指定中,v 這個變數被指定了含有五個數字的集合。
ch <- c('a', 'b', 'c')
上列的指定中,ch 這個變數被指定了含有三個字元的集合。

上列指定運算子右邊的 c(...) 其實是一個函數,可以在 R console 中輸入:
help(c)
來看如何使用他的說明。

除了上列的指定方式外,我們也可以使用下列方式來指定一個 vector 內的元素:
v4 <- c(1, 2, 3, 6:10)
這指定了「1, 3, 3, 6, 7, 8, 9, 10」給 v4 這個變數。

若我們要取得 vector 某一個 index 的元素,可以使用:
v4[1]
這表示取得 v4 中的第一元素,這裡要注意的是 vector 的 index 是從 1 開始算的。

另外,也可以使用判斷式來取得滿足某一條件的元素,像下列運算式中,會取得 v4 中大於、等於 6 的元素:
v4[v4 >=6]
結果:

[1]  6  7  8  9 10

指定一個 vector 變數之後,我們就可以對他做一些運算、操作,如要取得平均值,例如,我們可以使用
sd(v)
或者使用 mean 函數來取得平均值,如:
mean(v)
vector 另一個好用的地方,在於可以一次對 vector 中的所有元素 (element) 做運算,如:
1/v
結果就會得到 v 中每一個元素的倒數。 也可以對兩個 vector 做加減乘除的運算,例如我們另外指定一個 v1 的變數:
v1 <- (2, 4, 6, 8, 10, 3, 6, 9, 12, 15)
v/v1
依序就會得到 v 第1個元素除以 v1 第1個元素的值、 v 第2個元素除以 v4 第2個元素的值..., v 第1個元素除以 v4 第6個元素的值,以此類推。

這要注意的是,當使用兩個 vector 做運算時,其中一個 vector 內包含的元素數量,要是另一個 vector 中包含元素數量的倍數,不然就會出現如下的警告訊息:
警告訊息:
In v/v1 : 較長的物件長度並非較短物件長度的倍數

2014年3月6日 星期四

【R筆記】R的指定運算子 (assignment operator)

在R中,指定運算子 (assignment operator) 是「<-」,就是一個小於符號加上一槓,例如:
x <- 168
就是把「168」這個值指給「x」這個區域變數 (local variable)。

另外,也可以使用「=」來指定變數的值,如:
x = 168
但這樣的方式可能會和「==」這個比較的運算子搞混,因此不建議這樣使用。

還有,也可以用使用「->」,就是一槓加上一個大於的符號,將變數放在右邊,把值放在左邊,如:
168 -> x
但這樣程式碼一多的時候,會降低程式碼的可讀性,因此也不建議這樣使用。

有時候可能會看到有兩個小於加上一槓的指定運算子,像:
x <<- 168
這個指定方式是把「168」這個值指定給「x」這個「全域變數 (global variable)」。

另外,上方程式碼中的空格,是為了增加易讀性,你當然也可以寫成:
x<-168
但這樣擠在一起,程式看起來就不那麼易讀了。

在 R 中,還有一個函式 assign,也是用來指定變數的值:
> assign("y", 1234)
> y
[1] 1234
我在指定一個變數之後,直接在 console 中輸入該變數,就可以輸出該變數的值了:
> x
[1] 168
這樣的結果,和使用 print 這個函數輸出的結果一樣:
> print(x)
[1] 168
當我要列出我有指定過的變數時,我可以用
> ls()
[1] "x" "y"
最後,當我離開 R 時,若有儲存工作空間,指定過的變數也會被儲存,再次開啟時,這些變數也一樣可以再被使用。

【R筆記】如何設定R的工作目錄 (working directory of R)

執行R的時候,可以使用下列指令,來取得目前所在的工作目錄:
getwd();


R就會顯示目前所在的工作目錄:


 若你要自訂執行R時的預設工作目錄,可以使用下列方法:

在桌面捷徑上點按滑鼠右鍵,開啟選單後再點按【內容】:


在「開始位置」的欄位中輸入你啟動程式後要做為預設工作目錄的資料夾位置:


點按【確定】後完成設定。

再執行一次 getwd() 就可以看到工作目錄已經更改。

若你有儲存某一個「.RData」在某個資料夾下,當你開啟該檔案後,R的工作目錄就會是存放該「.RData」檔的資料夾。

若你想要進一步學習R,我推薦: