• 沒有找到結果。

R data

N/A
N/A
Protected

Academic year: 2021

Share "R data"

Copied!
81
0
0

加載中.... (立即查看全文)

全文

(1)

1 R

程式語言

1 1.1

安裝

R

語言

. . . 1 1.2

開始使用

R

語言

. . . 3 1.3

常用指令函數

. . . 9 1.4

讀存取

R

資料檔或外部資料檔

. . . 24 1.5

作圖函數

. . . 31 2 R

軟體與敘述統計

37 2.1

次數計算統計表

. . . 39 2.2

基本敘述統計

. . . 42 2.3

常態分配

. . . 45 2.4

常用統計圖

. . . 49 3

二維數據分析

:R

軟體

56 3.1

雙變量數據

. . . 56 3.2

簡單回歸分析

. . . 59 4

附錄

:R

指令

66

(2)

1 R

程式語言

R

程式語言誕生於

90

年代初期

,

由奧克蘭大學的

Ross Ihaka

Robert Gentleman

所發展出來的

,

它是以

S

語言

(

誕生於

70

年代的貝爾實驗室

,

主要作者為

John Chambers)

資料分析工具中

,R

語言具有免費

,

擁有強大的資料視覺化能力、 支援跨平台、 開放源碼及學習資

源豐富其功能可透過套件增強等優勢。

R

內建多種統計學及數字分析功能。

R

的功能也可以透過安裝套件

(Pa kages,

用戶撰寫的功能

)

增強。

因為

S

的血緣

,R

比其他統計學或數學專用的編程語言有更強的物件導向

(

物件導向程式設計

,S3, S4

)

功能。

R

的另一強項是繪圖功能

,

製圖具有印刷的素質

,

也可加入數學符號。

雖然

R

主要用於統計分析或者開發統計相關的軟體

,

但也有人用作矩陣計算。 其分析速度可媲美專用

於矩陣計算的自由軟體

GNU O tave

和商業軟體

MATLAB

(

維基百科

)

R

的功能能夠透過由用戶撰寫的套件增強。 根據

CRAN

紀錄有七千多種不同的軟體包。 其中有幾款

較為常用

,

例如用於經濟計量、 財經分析、 人文科學研究以及人工智慧。

R

官方首頁

:https://www.r-proje t.org/

1.1

安裝

R

語言

以下針對

Windows

作業系統

,

開始安裝

R

語言。

下載安裝

: R-3.5.2 for Windows (79 megabytes, 32/64 bit) Last hange: 2018-12-20

依照自己作業平台選擇安裝軟體

Mi rosoftWindows: http:// ran.r-proje t.org/bin/windows/base/ Ma OS: http:// ran.r-proje t.org/bin/ma osx/

Linux: http:// ran.r-proje t.org/bin/linux/

R-GUI:

圖形使用者界面

安裝

R

軟體

Windows

版後

,

可以執行

Rgui.exe

程式或經由

"

開始

"

"

程式集

"

R

R

3.5.2

進入

R

的圖形界面模式

下載安裝

RStudio:

安裝一般桌面版的

RStudio,

Google

搜尋 「

RStudio

RStudio

首頁

https://www.rstudio. om/

點選

Download RStudio

選擇

"

免費桌面版

"

(3)

RStudio Desktop free

點選作業版本

"RStudio 1.1.463 - Windows Vista/7/8/10 "

把這個

安裝檔安裝起來

(

一直點下一步

/

同意

,

採用它預設的設定就好

)

RStudio

點開來以後

,

展開的畫面會像這樣

:

依照以下順序

(1.

點擊 「

File

2.

New File

3.

R S ript

)

RStudio

介面主要的四個區塊與功能簡介

: 1.

來源

(Sour e):

位於左上角

,

編寫程式的區塊

2.

命令列

(Console):

位於左下角

,

執行程式的區塊

3.

環境與歷史

:

位於右上角

(a)

環境

(Environment):

目前的變數清單

(b)

歷史

(History):

在命令列執行過哪些指令

4.

檔案、 圖形、 套件、 查詢與預覽器

:

位於右下角

(a)

檔案

(Files):

使用者的工作目錄

(b)

圖形

(Plots):

顯示圖表

( )

套件

(Pa kages):

安裝套件的清單

順伯的窩

(4)

(d)

查詢

(Help):

顯示查詢文件

(e)

預覽器

(Viewer):

顯示網頁

R-studio

文字稿區塊輸入

print ("Hello , world !")

代碼

,

然後另存檔案為

"hw.r R

文件檔

,

並由

RStudio

會話介面使用命令源

sour e("file.r")

讀取它

,

就會出現上次的

文字稿。

1.2

開始使用

R

語言

注意

,

R

指令的英文大小寫有差異

,s

S

是不同的

,R

也保留一些物件與指令名稱

,

,s, C, T, F

,

這些叫做

"

保留名字



另外一些系統常用的指令名稱

,

q st CD FI Tdimean pirange

rank var

· · ·

對物件命名時盡量避免定義一個物件

,

與現有的物件同名

.

所以命名時要避免重覆

,

免後來引起錯亂。 對物件命名時

,

物件名稱起始位置須以文字或

". (

句點

),

若物件名稱以

". (

句點

)

為起始

,

名稱第二個位置需為文字

,

物件名稱其餘位置

,

以文字

(

A − Z

a − z

),

數字

(

0 − 9

),"

/

, ".,

"

,

皆可

,

中間不可有空格或

" 

R

的最基本物件是向量

,"

向量



是指包含相同

"

模式

 (mode)

的元素

(element)

組成

,

主要有

6

種基本模式 邏輯

logi al,

整數

integer,

倍精準度

double,

單精準度

single,

複數

omplex,

及文字

hara ter,

同一向量內的元素不可混合。

求助指令

help:

help("

指令

)

可幫助了解該指令的操作功能。

help(topi )

R

數值基本運算

:

+,

-,

*,

/,

整數商

%/%(

高斯商數

),

餘數

%%(mod),

冪次方

**

^

範例

1:

在命令列輸入下列指令後按

Enter

,

看看輸出結果

> 2 - 1 * 2 > -1/-1 #

除法運算

> 6/3 -2+1*0+3/3-3 > 2**-3 #

指數運算

> 2^17%% 17 #

求餘數

> 19 %% 17 %% 13 # ompare to (19 %% 17) %% 13 and 19 %% (17 %% 13) > 3-2 %% 5+3 *2-4/2

建立資料

:

指令建立資料

R

軟體中有六種屬性資料

,

分別為

1.

文字字串

( hara ter) : "a", "sw " 2.

數值

(numeri ):

實數

2,15.5 ,... 3.

整數

(integer): 3,2L ,(R

中儲存資料視

L

為一整數

) 4.

邏輯

(logi al): TRUE, FALSE

5.

複數

( omplex):

1 + 4i

(

分為實數部分

+

虛數部分

) 6.

二進位資料

(raw):01011001, mydata

資料名稱

,

可自己建立。

=

亦可使用

<-

資料為向量資料

範例

2:

輸入資料

>mydata1 = (1,2,3,4,5,6,7,8,9) > mydata1 [1℄ 1 2 3 4 5 6 7 8 9

順伯的窩

(5)

>mydata2<- 2:10 > mydata2 [1℄ 2 3 4 5 6 7 8 9 10 > mydata<- (mydata1,mydata2) #

合併兩向量資料

> mydata [1℄ 1 2 3 4 5 6 7 8 9 2 3 4 5 6 7 8 9 10

範例

3:

資料運算

> 1/mydata1 #

向量資料算術運算

[1℄ 1.0000000 0.5000000 0.3333333 0.2500000 0.2000000 0.1666667 0.1428571 0.1250000 0.1111111 > mydata1^2 [1℄ 1 4 9 16 25 36 49 64 81 > 2*mydata1+1 [1℄ 3 5 7 9 11 13 15 17 19 > log(mydata1,10) #

對向量資料每一元素取函數值

[1℄ 0.0000000 0.3010300 0.4771213 0.6020600 0.6989700 0.7781513 0.8450980 0.9030900 0.9542425 > 2^mydata1 [1℄ 2 4 8 16 32 64 128 256 512 #

兩向量資料運算

> mydata1+mydata2 [1℄ 3 5 7 9 11 13 15 17 19 > mydata1*mydata2 #

兩向量兩兩乘積

[1℄ 2 6 12 20 30 42 56 72 90 #

自定義運算式

> xi<- (mydata1,10) > xi [1℄ 1 2 3 4 5 6 7 8 9 10 #

等同

seq(1,10,by=1) > sum((xi - mean(xi))^2)/(length(xi)- 1) [1℄ 9.166667 > var(xi) #

內建變異數函數

[1℄ 9.166667

範例

4:

資料篩選

> xi[xi>5℄ [1℄ 6 7 8 9 10 > xi[ (2,3,5)℄ [1℄ 2 3 5 > xi[xi > 5 & xi < 10℄ [1℄ 6 7 8 9 > xi[log(xi,10) < 0.5℄ # xi

資料中對數值

<0.5

的元素

[1℄ 1 2 3

順伯的窩

(6)

> xi>5 #

資料邏輯

[1℄ FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE

> xi[as.logi al((xi > 8) + (xi < 3))℄

[1℄ 1 2 9 10

#modifying subset of ve tor

> xi[log(xi,10) < 0.5℄ <- 2 > xi [1℄ 2 2 2 4 5 6 7 8 9 10

2:

向量變數常用指令函數

指令

用法說明簡介

()

建立向量或聯結不同的向量

length(x)

算出資料

x

的筆數

x[2℄ (i = 2)

x

i

資料

x[-2℄ (i = 2) x

資料中除了第

i

筆資料

x[1:5℄ (k = 5) x

資料的前

5

筆資料

x[(length(x)-5):length(x) ℄ (k = 5) x

資料

(

5

筆資料除外

) x[ (1,3,6)℄ (First, 3rd and 6th) x

資料中的第

1,3,6

筆資料

x[x>3℄ (the value is > 3) x

資料中數值比

3

大的資料

x[x < −2|x > 2]

x

資料中數值比

2

大或小於

-2

的資料

whi h(x == max(x)) x

資料中第幾筆數值為最大值

umax(x); umin(x)

呈現

x

資料中累積最大值

(

最小值

)

範例

5: R

指令函數

> x = (45,43,46,48,51,46,50,47,4 6,45 ) # Entering data with

> x = (x,48,49,51,50,49) # append values to x

> x[16℄ = 41;x[17:20℄ = (40,38,35,40) # add to many spe ified indi es

> x # print x data

[1℄ 45 43 46 48 51 46 50 47 46 45 48 49 51 50 49 41 40 38 35 40

> ummax(x) # running maximum

[1℄ 45 45 46 48 51 51 51 51 51 51 51 51 51 51 51 51 51 51 51 51

> ummin(x) # running minimum

[1℄ 45 43 43 43 43 43 43 43 43 43 43 43 43 43 43 41 40 38 35 35

範例

6:

數值上的陷阱

1-0.9==0.1 R

軟體中儘管

1

可以被完美地精確表示

,

而對

0.1

0.9

卻做不到。 使用函數

all.equal()

來比較兩個數

,

因為它包含一個可以指定數值容忍限的參變數。

> 1-0.9==0.1 [1℄ FALSE > all.equal(1.0-0.9,0.1,tol=1 0^(- 6))

順伯的窩

(7)

[1℄ TRUE

> all.equal(pi,3.14159,tol=10 ^(-6 ))

[1℄ TRUE

> all.equal(pi,3.14159,tol=10 ^(-7 ))

[1℄ "Mean relative differen e: 8.446639e-07"

範例

7:

數值的精密度

:formatC(x,digits =50)

最高

50

> options(digits=2) #

參數內定小數位

7

> 2^100 [1℄ 1.3e+30 > formatC(2^100,20) [1℄ "1.2676506002282294031e+3 0" > formatC(1-0.9,20) [1℄ "0.0999999999999999778" > formatC(0.1,20) [1℄ "0.10000000000000000555" #

與數值

1-0.9

不同

> formatC(2^0.00000000001/2^0 .000 0000 1,5) [1℄ " 1" > formatC(2^0.00000000001/2^0 .000 0000 1,10 ) [1℄ "0.9999999931" > 2^0.0000000000000001==2^0.0 0000 0000 0000 0000 0000 0000 0001 [1℄ TRUE #

兩數相差值已小於數值精密度容忍度

(

接受兩數相等

) > 2^0.000000000000001==2^0.00 0000 0000 0000 0000 0000 0000 001 [1℄ FALSE #

兩數相差值尚未小於數值精密度容忍度

(

不接受兩數相等

) 1.2

練習題

1.

輸入包含左右括號之字串

,

請判斷是否配對正確

: (a)

輸入

:((1+2)-3)*(4/5) (b)

輸入

:(((1+2+3) ( )

輸入

:((1+2)*(3+4)*(5+6))/(7+8) 2. R

語言輸入下列指令

,

預期輸出為何

? (a) 1:3^2 (b) (1:5)*2 ( ) var<-3; Var*2? (d) root.of.four <- sqrt(4) (e) x<-1; x< -1 (f) An even number <- 16 (g)

下列

R

輸出的結果中有兩個符號被遮住了

,

是哪兩個符號

? > 2 + [1℄6

順伯的窩

(8)

(h)

鍵入

TRUE + T +FALSE*F + T*FALSE +F ,

輸出結果為何

? 3.

R

語言計算下列值

? (a)

|2

3

− 3

2

|

? (b)

e

e

( )

(2.3)

8

+ ln(7.5) − cos(π/3)

4.

R

語言計算下列值

? (a)

6!

? (b)

組合數

C

52

5

( )

log

10

π

5.

R

語言計算下列值

? (a)

4

3

+ 3

2+1

=

? (b)

p

(4 + 3)(2 + 1)

( )

(

1 + 2

3 + 4

)

2

6.

由螢幕輸入

x<-pi

求列印出

π

小數點部份

(

小數點後

10

) 7.

R

語言輸入下列指令

,

預期產生的值為何

? (a) 2+3*4 (b) 2/3/4 ( ) 2^3^4 8.

R

中輸入

>z= (0,0,0,2,0)

,

依序下列步驟

(a)

輸入

>z[ (1,5)℄ <- 1

預期

z

產生的結果為何

? (b)

輸入

>z[whi h.max(z)℄ <- 0

預期

z

產生的結果為何

? ( )

輸入

>z[z==0℄ <- 8

預期

z

產生的結果為何

? 9.

R

中輸入下列指令後

,

預期產生的輸出結果為何

? (a) (1,4)* (2,3) (b) (1:3)[any( (T,F,T))℄ ( ) (1:3)[all( (T,F,T))℄ (d) (T,T,F) (F,T,F)| (e) (T,T,F) | (F,T,F)| (f) n har( ("ab d","efg")) 10.

sum()

指令求

1 + 2 + 3 + · · · + 99 + 100

11.

sum()

指令求

1 +

1

2

+

1

3

+ · · · +

1

10

12.

R

語言計算求兩向量點積

[2, 5, 6, 7]

,

[−1, 3, −1, −1]

順伯的窩

(9)

13.

資料

x:17 1620 2422 152115 1722 (a)

如何找出資料

x

的最大、 最小值

?

(b)

若其中一筆資料

24

為錯誤值

,

如何更正為

18,

並命名新變數為

newx ( )

有哪幾筆資料超過

20,

其資料為何

?

總和為多少

?

14.

若去年一年手機的通話費用

(

美元

)

46 333937 4630 483249 3530 48 (a)

"bill

為名

,

建立資料

?

sum

指令求去年總通話費

?

(b)

哪一月份費用最多

?

哪一月份費用最少

? ( )

哪一月份費用超過

40,

其比率為多少

? 15.

R

軟体中

,

使用下列指令

,

預期其結果為何

? > x = (1,3,5,7,9) > y = (2,3,5,7,11,13) (a) x+1 (b) y*2 ( ) length(x)

length(y) (d) x + y

(e) sum(

x > 5

)

sum(

x[x > 5]

)

(f) sum(

x > 5|x < 3

)

符號

|

"'or, &

"and (g)

y[3]

(h)

y[−3]

(i)

y[x]

(What is NA?)

(j)

y[y >= 7]

16.

若在

R

軟体中建立資料

x = (1, 8, 2,6, 3,8, 5,5, 5,5)

並令

x

i

表示第

i

筆資料

,

用指令完

成下列式子

(a)

(x

1

+ x

2

+ · · · + x

10

)/10

,

sum()

指令

(b)

log

10

x

i

, ∀i

, (

log()

指令

,

內定基底為

e) ( )

(x

i

− 4.4)/2.875, ∀i

, (

用一次指令完成

) (d)

x

全距

,

max()

min()

兩指令

17.

R

語言計算

log 2 + log 3 + log 4 + · · · + log 9

?

(10)

1.3

常用指令函數

s an():

實數資料可利用

"

複製

,"

張貼



快捷鍵 。

(

字串或類別變數只能用

()

指令或

paste()

指令

)

先將欲輸入的資料

(

變數間隔為空格

)

利用快捷鍵

"

複製



起來

,

於作業欄中輸入

範例

1: > x=s an()

←֓

>1:"

張貼資料

''

←֓

(

完成

)

函數

di(x):

階差函數一般用法

di(x, lag= 2)

若資料

x

為數列

a

i

, i = 1, 2, 3, · · ·

di(x,lag =2)

表數列

a

i+2

− a

i

, i = 1, 2, 3, · · ·

範例

2: > x= (1,1,2,3,5,8,13,21,34, 55,8 9) > diff(x,lag=2)

[1℄ 1 2 3 5 8 13 21 34 55

若執行

diff(x)

會出現怎樣的結果

?

(

):01 12 3 58 1321 34

函數

seq:

數列函數一般用法

seq(from=, to=, by= )

seq

函數表建立首項為

from,

末項

to(

to

),

公差

by

的數列。

範例

3: > seq(0,10,by=1) [1℄ 0 1 2 3 4 5 6 7 8 9 10 > seq(0,10,length=5) [1℄ 0.0 2.5 5.0 7.5 10.0 > seq(1, 9, by = pi) [1℄ 1.000000 4.141593 7.283185

函數

rep:

重複函數一般用法

rep(x, times)

範例

4: > <-rep(1:4, 2) > [1℄ 1 2 3 4 1 2 3 4 > rep(1:4, ea h=2) [1℄ 1 1 2 2 3 3 4 4 > rep(1:4, (2,2,2,2)) [1℄ 1 1 2 2 3 3 4 4

一些錯誤數值

: Finite, Innite and NaN Numbers

範例

5: > a <- 0/0 > a [1℄ NaN > is.nan(a) [1℄ TRUE > b <- log(0) > b [1℄ -Inf > is.finite(b)

順伯的窩

(11)

[1℄ FALSE

> x <- (0:4,NA,5:7)

> x

[1℄ 0 1 2 3 4 NA 5 6 7

> is.na(x)

[1℄ FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE

> x[!is.na(x)℄ #

去除

NA(

錯誤值

)

的資料

(

只留存正確數值資料

) [1℄ 0 1 2 3 4 5 6 7

>x[!is.na(x)℄[x[!is.na(x) ℄>4. 5℄ #

符合數值資料

>4.5

的資料

[1℄ 5 6 7

字串資料

:

文字字串資料要加上雙引號

"

或單引號

' '

paste(..., ollapse="", sep ="")

其中參數

ollapse:

用於分隔結果的可選字符串。

sep:

用於分隔字串的符號串

範例

6: > A <- ("a","b"," ") > A [1℄ "a" "b" " " > paste("a","b",sep="") [1℄ "ab" > paste(A, ("d","e")) [1℄ "a d" "b e" " d"

> paste(A, ("d","e"), ollaps e=", ",se p=", ")

[1℄ "a,d,b,e, ,d"

> paste(A, ("d","e"), ollaps e="" ,sep ="," )

[1℄ "a,db,e ,d"

> paste(A, ("d","e"), ollaps e="" ,sep ="")

[1℄ "adbe d"

> paste("$",sep="",A)

[1℄ "$a" "$b" "$ "

> paste(A,1:5,sep="")

[1℄ "a1" "b2" " 3" "a4" "b5"

> A <- ("a","b"," ","a","a"," " ,"B" );ta ble( A) #

字串資料統計表

A

a b B

3 1 1 2

陣函數

:

指令用法

matrix(data= NA, nrow =1, n ol =1, byrow =FALSE,dimnames =NULL)

矩陣資料所有元素必須為同一屬性

,

若有

"

文字字串



"

數值



資料

,

則矩陣所有元素將被

視為

"

字串



資料。

範例

7: > A <- matrix(1:20,4,5) > A [,1℄ [,2℄ [,3℄ [,4℄ [,5℄ [1,℄ 1 5 9 13 17 [2,℄ 2 6 10 14 18 [3,℄ 3 7 11 15 19 [4,℄ 4 8 12 16 20

順伯的窩

(12)

>rownames(A)= ("r1","r2" ,"r3 ","r 4") #

設定矩陣列名稱

#

也可用

dimnames(A)[[1℄℄= ("r1"," r2", "r3" ,"

列名稱

")

設定第

1

維度

各行列名稱

> olnames(A)= (" 1"," 2" ," 3 "," 4"," 5") #

設定矩陣行名稱

#

也可用

dimnames(A)[[2℄℄= (" 1"," 2"," 3", " 4" ,"

行名

" )

設定第

2

度各行列名稱

> A 1 2 3 4 5 r1 1 5 9 13 17 r2 2 6 10 14 18 r3 3 7 11 15 19 r4 4 8 12 16 20 #

可用

dimnames(A)

查看矩陣列、 行名稱

> A2 <- matrix(1:20,4,5,byrow = TRUE) > A2 [,1℄ [,2℄ [,3℄ [,4℄ [,5℄ [1,℄ 1 2 3 4 5 [2,℄ 6 7 8 9 10 [3,℄ 11 12 13 14 15 [4,℄ 16 17 18 19 20 > t(A) #

A

轉置矩陣

r1 r2 r3 r4 1 1 2 3 4 2 5 6 7 8 3 9 10 11 12 4 13 14 15 16 5 17 18 19 20

> A3 <- matrix(1:20,5,4,byrow = TRUE) #

A^t > A3 [,1℄ [,2℄ [,3℄ [,4℄ [1,℄ 1 2 3 4 [2,℄ 5 6 7 8 [3,℄ 9 10 11 12 [4,℄ 13 14 15 16 [5,℄ 17 18 19 20

> A[ (1,4), (2,3)℄ #subse tioning and modifying subse tion

2 3 #

保留

A

矩陣的第

1,4

列及第

2,3

行的元素矩陣

r1 5 9 r4 8 12 > A[ (1,4), (2,3)℄ <- 0 #

置換

A

矩陣的第

1,4

列及第

2,3

行的元素

> A 1 2 3 4 5 r1 1 0 0 13 17 r2 2 6 10 14 18 r3 3 7 11 15 19 r4 4 0 0 16 20 > A[4,℄ # A

矩陣的第

4

列元素

[1℄ 4 1 1 16 20 > A[4,,drop = FALSE℄

順伯的窩

(13)

1 2 3 4 5 r4 4 1 1 16 20 >A0 <- array(1:20,dim= (4,5)) > bind(A,A0) #

兩矩陣

A ,A0

依照行結合

1 2 3 4 5 r1 1 0 0 13 17 1 5 9 13 17 r2 2 6 10 14 18 2 6 10 14 18 r3 3 7 11 15 19 3 7 11 15 19 r4 4 0 0 16 20 4 8 12 16 20 > rbind(A,A0) #

兩矩陣

A ,A0

依照列結合

1 2 3 4 5 r1 1 0 0 13 17 r2 2 6 10 14 18 r3 3 7 11 15 19 r4 4 0 0 16 20 1 5 9 13 17 2 6 10 14 18 3 7 11 15 19 4 8 12 16 20

範例

8:

矩陣運算

>A <- matrix(1:20,4,5) > t(A) # A

的轉置矩陣

t(A) [,1℄ [,2℄ [,3℄ [,4℄ [1,℄ 1 2 3 4 [2,℄ 5 6 7 8 [3,℄ 9 10 11 12 [4,℄ 13 14 15 16 [5,℄ 17 18 19 20 > 2+A #

矩陣

A

元素增加常數值

[,1℄ [,2℄ [,3℄ [,4℄ [,5℄ [1,℄ 3 7 11 15 19 [2,℄ 4 8 12 16 20 [3,℄ 5 9 13 17 21 [4,℄ 6 10 14 18 22 > 2*A #

矩陣

A

常數積

[,1℄ [,2℄ [,3℄ [,4℄ [,5℄ [1,℄ 2 10 18 26 34 [2,℄ 4 12 20 28 36 [3,℄ 6 14 22 30 38 [4,℄ 8 16 24 32 40 > x <- 1:4 > A*x #

A

依照

x

向量對應乘法。 有別於

%*%

陣乘法

(

列行乘積和

) # Entry-wise multipli ation: x

為長度

4

的向量

,

對應乘法為依照行依序乘以

x [,1℄ [,2℄ [,3℄ [,4℄ [,5℄ [1,℄ 1 5 9 13 17 [2,℄ 4 12 20 28 36

順伯的窩

(14)

[3,℄ 9 21 33 45 57

[4,℄ 16 32 48 64 80

> A/x #Entry-wise division:

對應除法為依照行依序除以

x

運算

[,1℄ [,2℄ [,3℄ [,4℄ [,5℄ [1,℄ 1 5.000000 9.000000 13 17.000000 [2,℄ 1 3.000000 5.000000 7 9.000000 [3,℄ 1 2.333333 3.666667 5 6.333333 [4,℄ 1 2.000000 3.000000 4 5.000000 > A <- matrix( (2,3,5,4),nrow=2,n ol= 2) > B <- matrix( (1,2,2,7),nrow=2,n ol= 2) > A [,1℄ [,2℄ [1,℄ 2 5 [2,℄ 3 4 > B [,1℄ [,2℄ [1,℄ 1 2 [2,℄ 2 7 > C <- A %*% B #

兩矩陣相乘用法

%*%

有別於

*

Entry-wise

乘法

> C [,1℄ [,2℄ [1,℄ 12 39 [2,℄ 11 34 >det(C) #

方陣

C

的行列式值

[1℄ -21 > eigen(A) #

A

的特徵值

$values [1℄ 7 -1 $ve tors #

A

的特徵向量

#lambda=7

(-0.7071068,-0.7071068);la mbda =-1

(-0.8574929,0.5144958)

[,1℄ [,2℄ [1,℄ -0.7071068 -0.8574929 [2,℄ -0.7071068 0.5144958

範例

9:

方陣

A

的逆矩陣

A

−1

=

solve(A)

及解方程組

:

AX = B

,

X = A

−1

B

=solve(A,B) > A <- matrix( (2,3,5,4),nrow=2,n ol= 2) > B <- matrix( (1,2,2,7),nrow=2,n ol= 2) > A [,1℄ [,2℄ [1,℄ 2 5 [2,℄ 3 4 > B [,1℄ [,2℄ [1,℄ 1 2 [2,℄ 2 7 > solve(B) #

B

−1

=

solve(B) [,1℄ [,2℄

順伯的窩

(15)

[1,℄ 2.3333333 -0.6666667

[2,℄ -0.6666667 0.3333333

> rossprod(A,B) # t(A)%*%B # Cross produ t:

A

T

B

[,1℄ [,2℄

[1,℄ 8 25

[2,℄ 13 38

> C=A%*%B

> solve(A,C) # AB=C solve B=

A

−1

C

[,1℄ [,2℄

[1,℄ 1 2

[2,℄ 2 7

陣列

array

函數

: array(data =NA, dim= length(data),dimnames = NULL)

array

函數以

"

逐行



的方式將

data

填入陣列

,

並持多維度的向量數據資料。

2

維度的

array

陣列等同於

matrix

array

陣列函數其列、

行名稱用法同

matrix

用法。

範例

10: array() > x <- matrix(1:10, 2) > y <- array(1:10, (2, 5)) > identi al(x, y) [1℄ TRUE

3: array

變數常用指令函數

指令

用法說明簡介

rbind

bind

array

建立陣列

array

變數

n ol

nrow

陣列的橫列數、 直行數

row

olumn

傳回元素所在的列指標或行指標值

rownames

olnames

查詢或更改橫列名稱、 直行名稱

dim

查詢維度

dimnames

查詢或設定各維度的行列名稱

aperm

t()

陣列轉置

;

轉置矩陣

Data frames:

建立數據資料架構

(

類似

Ex ele

)

R

自動依序指派

1 ∼ n

作為列名。

指令

data.frame()

容許建立變數屬性

(

數值、 字串、 邏輯

)

不同的資料框架

,

相對於

ma-trix()

所有元素為相同屬性。 在相同的資料下由

data.frame()

建構的型態

,

物件所需記憶

體大於

matrix()

型態。 如果經常按名稱引用其列

,

則數據框更方便。 數據框也可以更好地

用於報告

(

列印

)

表格信息

,

因為您可以單獨將格式應用於每個列。 如果您計劃進行任何線

性代數類型的操作

,

則矩陣

matrix()

型態是必需的。

as.matrix():

將數據框架變數轉成矩

陣資料型態。

as.data.frame():

將矩陣資料型態轉成數據框架型態。

範例

11: > name <- ("john","peter","jenny") > gender <- fa tor( ("m","m","f")) > lass1 <- (60,60,80)

順伯的窩

(16)

> lass2 <- (40,50,30)

> grades <- data.frame(name,gender, lass 1, l ass2 )

> grades

name gender lass1 lass2

1 john m 60 40 2 peter m 60 50 3 jenny f 80 30

資料框可用

$

符號做欄位資料擷取後

,

當成向量

,

並使用做資料編輯。

> grades$gender #

相當於取出矩陣資料

(

所有元素同屬性

)

中的第

2

行元

[1℄ m m f Levels: f m

範例

12:

類別資料的建立

:

調查一群人是否抽菸

,

得到的回答為

Yes, No,No, Yes, Yes > x= ("Yes","No","No","Yes ","Y es")

> x # print out values in x

[1℄ "Yes" "No" "No" "Yes" "Yes"

> table(x)

x

No Yes

2 3

> fa tor(x) # print out value in fa tor(x)

[1℄ Yes No No Yes Yes

Levels: No Yes

範例

13: > r1= (1,2,3) > r2= (4,5,6) > A1=rbind(r1,r2) > A1 [,1℄ [,2℄ [,3℄ r1 1 2 3 r2 4 5 6 > A2= bind(r1,r2) > A2 r1 r2 [1,℄ 1 4 [2,℄ 2 5 [3,℄ 3 6 > x <- 1:15 > x [1℄ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 > dim(x) #

查詢維度

NULL > dim(x) <- (5, 3) #

宣告矩陣

x

5

3

> x [,1℄ [,2℄ [,3℄

順伯的窩

(17)

[1,℄ 1 6 11 [2,℄ 2 7 12 [3,℄ 3 8 13 [4,℄ 4 9 14 [5,℄ 5 10 15 > y=x[2:3, (1,3)℄ #

取出位於第

2,3

列及第

1,3

行的所有元素

> y [,1℄ [,2℄ [1,℄ 2 12 [2,℄ 3 13

範例

14:

編號

1,2,3,

· · ·

,7

的七位學生身高、 體重如下

:

編號

身高

(in)

體重

(lb) 1 68 155 2 61 99 3 63 115 4 70 205 5 69 170 6 65 125 7 72 220 >no= (seq(1:7));height= ( 68,6 1,63 ,70, 69,6 5,72 ); weight= (155,99,115,205,1 70,1 25,2 20); >A= bind(no,height,weight ) >A no height weight [1,℄ 1 68 155 [2,℄ 2 61 99 [3,℄ 3 63 115 [4,℄ 4 70 205 [5,℄ 5 69 170 [6,℄ 6 65 125 [7,℄ 7 72 220

>no= (1,2,3,4,5,6,7); >height= (68,61,63,70,69,6 5,7 2); >weight= (155,99,115,205,1 70, 125, 220) ; >grade=data.frame(no,heigh t,w eigh t); >grade no height weight 1 1 68 155 2 2 61 99 3 3 63 115 4 4 70 205 5 5 69 170 6 6 65 125 7 7 72 220 > x=grade$height #

取出資料檔中 變數為

height

的資料

順伯的窩

(18)

> x [1℄ 68 61 63 70 69 65 72 > as.matrix(grade) # as.matrix():

將資料框架變數轉成矩陣資料型態

no height weight [1,℄ 1 68 155 [2,℄ 2 61 99 [3,℄ 3 63 115 [4,℄ 4 67 180 [5,℄ 5 69 170 [6,℄ 6 65 125 [7,℄ 7 72 220 > as.data.frame(A) # as.data.frame(A):

將矩陣資料型態轉成資料框架變數

no height weight 1 1 68 155 2 2 61 99 3 3 63 115 4 4 70 205 5 5 69 170 6 6 65 125 7 7 72 220 > A[4,℄= (4,67,180) #

修改第

4

列所有元素資料

> A no height weight [1,℄ 1 68 155 [2,℄ 2 61 99 [3,℄ 3 63 115 [4,℄ 4 67 180 [5,℄ 5 69 170 [6,℄ 6 65 125 [7,℄ 7 72 220 > sum(A[,2℄)/length(A[,2℄) #

求身高平均值

[1℄ 66.42857 > A[order(A[,3℄),℄ #

依照行

3

變數排序

no height weight [1,℄ 2 61 99 [2,℄ 3 63 115 [3,℄ 6 65 125 [4,℄ 1 68 155 [5,℄ 5 69 170 [6,℄ 4 67 180 [7,℄ 7 72 220 > whi h(A[,2℄>=68) #

查問行

2

變數

>=68

有哪幾筆

[1℄ 1 5 7 > A[A[,2℄>=68,℄ #

保留行

2

變數

>=68

的矩陣

no height weight [1,℄ 1 68 155 [2,℄ 5 69 170 [3,℄ 7 72 220

順伯的窩

(19)

範例

15: > r1= ("a","b");r2= (3,4);A=r bind (r1, r2) > A [,1℄ [,2℄ r1 "a" "b" r2 "3" "4 #

陣資料所有元素必須同一屬性

> r1= (1,2);r2= (3,4);A=rbind (r1, r2) > A [,1℄ [,2℄ r1 1 2 r2 3 4 >r1= (1,2);r2= (3,4);Y= b ind( r1,r 2) > Y r1 r2 [1,℄ 1 3 [2,℄ 2 4 > A%*%Y # AY

矩陣乘積

r1 r2 r1 5 11 r2 11 25 > Y%*%A # YA

陣乘積

[,1℄ [,2℄ [1,℄ 10 14 [2,℄ 14 20 > solve(A) #

A

的逆矩陣

r1 r2 [1,℄ -2.0 1.0 [2,℄ 1.5 -0.5 > det(A) #

矩陣

A

的行列式值

[1℄ -2 > solve(A,Y) #

解矩陣

AX=Y ,

求出

x

r1 r2 [1,℄ 0.0 -2.0 [2,℄ 0.5 2.5 1.3

練習題

1.

如何得到輸出結果如下

: >X [,1℄ [,2℄ [,3℄ [1,℄ 1 5 9 [2,℄ 2 6 10 [3,℄ 3 7 11 [4,℄ 4 8 12 2.

di()

指令找出數列

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89

的一階差及二階差數列

? 3.

您在您的汽車加滿油並記錄了最近八次里程數

:65311 65624 65908 66219 66499 6682167145 67447

順伯的窩

(20)

輸入這些數據資料並命名為

"gas,

對數據使用函數

di()

會輸出什麼

?

解釋這兩個命令返回

的內容

:mean(gas)

mean(di(gas))

4.

R

語言造出以下數列

:

(a)

rep

指令造出以下數列

:1 11 1 12 22 2 33 3 44 5

(b)

seq

指令造出以下數列

:12 3 45 62 3 45 6 34 5 64 56 5 66

( )

rep

指令造出以下數列

: "A" "A" "A" "A" "A" "B" "B" "B" "B" "C" "C" "C" "D" "D" "E"

(d)

, rep

指令造出以下數列

:

"

" "

" "

" "

" "

西

" "

西

" "

西

" "

" "

" "

" (e)

, seq, letters

指令造出以下數列

:

"b" "d" "f" "h" "j" "l" "n" "p" "r" "t" "v" "x" "z" "a" " " "e" "g" "i" "k" "m"

"o" "q" "s" "u" "w" "y"

(f)

產生數列

1, −

1

2

,

1

3

, −

1

4

, · · · , −

1

10

5.

R

語言造出以下數列

:

(a) "a" , "a" , "a" , "a", "a" .

(b)

1 ∼ 100

的奇數

( ) 1,2, 3,4, 5, 4,3,2, 1 6.

R

語言

seq()

指令

(a)

造出首項為

3,

公差為

2

的等差數列

50

? (b)

輸入

seq(50,from=3,by=2 ) ,

預期輸出的結果如何

?

共幾項

( )

輸入指令

seq(1,100,length=30) ,

預期輸出的結果如何

? (d)

分別輸入指令

seq(1,10,by=0.7);seq(10,1 ,by= -0.7 ) ,

得到的最大值與最小值為何

? 7.

s an()

指令造出下列

"

數列

:(

實數資料利用

"

複製

,"

張貼



快捷鍵

) (a) 1 23 12 3 12 3 (b) 10.0000010.0454510.0909110.1363610.1818210.2272710.2727310.3181810.36364 10.4090910.4545510.50000 8.

造出下列

"

數列

:

(a) "1" "2" "3" "banana" "1" "2" "3" "banana"

(b)

paste

指令造出

: "A1" "A2""A3" "B1" "B2""C1" "C2" "C3" "C4" "D1""D2" "E1"

( )

paste

指令造出

:"student_1" "student_2" "student_3" "student_4" "student_5" 9.

R

中鍵入下列指令

,

會輸出什麼結果

?

(a) paste( ("a","b"), (" ","d") , ol laps e=" ",se p="" )

(b) strsplit( ("ab; d"),";")

( ) strsplit( ("ab; d"),";")

(d) substring("ab def",3, (3,5, 4))

(21)

10.

您可以追踪兩週

(

十天

)

的上學通勤時間

,

並以分鐘為單位記錄以下時間

:171620 242215 21 15 1722

(a)

使用函數

max()

查找最長的通勤時間

,

函數

mean()

找到平均值

,

函數

min()

找到最小

值。

(b)

24

是個錯誤。 應該是

18 ,

你怎麼能解決這個問題

?

然後找到新的平均值為多少

? ( )

你上學

20

分鐘或更長時間有幾次

?

你的通勤時間百分之多少是少於

18

分鐘

?

11.

建立一資料格式

(data frame)

名稱為

s ore

具有以下三變數名稱

(

資料

):number(

編號

:1

10

),grade(

等級

:A,B,Cor F(

不合格

)),pass(

通過

:Yes,No),

12.

學生對教師的評價為

1-5

等級。 假設此表中給出了對前三個問題的答案

: Student Ques. 1 Ques. 2 Ques. 3

1 3 5 1 2 3 2 3 3 3 5 1 4 4 5 1 5 3 2 1 6 4 2 3 7 3 5 1 8 4 5 1 9 3 4 1 10 4 2 1

使用

(),s a() ,

read.table()

輸入數據

13.

R

中輸入下列指令後

,

預期產生的輸出結果為何

? (a) >matrix(1:2,n ol=2,nrow=2)

(b) >Mat<-matrix(1:12,nrow=4,by row= TRUE );M at[3 ,℄;M at[2 ,2:3 ℄

( ) matrix( (1,0,0,1),nrow=2)*m atri x(1: 4,n row= 2)

14.

給出指令以創建

3

階單位矩陣

?

15.

如何用

1 : 10

替換以下列表的第四個組件

?L<-list(12, (34,67),Mat,1: 15,l ist (10, 11)) (a) L[[2℄℄[2℄

會輸出什麼

?

16.

如何檢索

data.frame

資料物件行和列的名稱

?(

:Matrix

物件所有元素必須同屬性。 用

dim-names(x)

檢索查詢

)

17.

> x

name gender weight

1 Ja k m 80

2 Julia f 60

> y

name eyes height

1 Ja k blue 180

2 Julia green 160

(22)

如何結合這兩個表格資料

? 18.

給出指令以計算矩陣

x

的所有元素

(

每列的所有元素

)

的乘積數值

? 19.

輸入以下矩陣並命名為

my.mat

my.mat =

1

2

3

4

5

6

7

8

9

10 11 12

(a)

matrix

指令造出矩陣

my.mat

(b)

dimnames

指令設定各列名稱

:"

編號

","

科目

1","

科目

2";

行名稱

:"

學生

1","

學生

2","

3"

( )

rownames

指令設定橫列名稱

:"r1","r2", "r3","r4" (d)

olnames

指令設定行名稱

:" ol1"," ol2"," ol3"

(e)

將資料

my.mat

的列

(row)

命名為

no.1,no.2, no.3, no.4,

將欄

( olumn)

命名為

var.1, var.2, var.3

20.

輸入以下矩陣

A =

12 10 7 11

4

8

2

1

6

9

3

5

(a)

matrix , (4,8,2,1,12,10,7,11,6,9,3,5)

指令

,

建立矩陣

A (b)

order

指令將第

3

行排序後

(

由小到大

),

把資料矩陣依第

3

行 的大小來排序

21.

矩陣

m =

1 1 2

2 2 1

3 3 3

,

依序完成下列指令或輸出的結果為何

? (a) >m[2,℄ (b) >m[ (1,3),℄ ( ) m[- (1,3),3℄ (d) > whi h(m == 1)

(e) > whi h(m == 1,arr.ind=TRUE)

(f)

將矩陣

m

中非

2

的元素全部更改為

0

22.

給出

R

指令

,

輸出下表中所有女性的體重和身高

?

> X

weight height gender

1 79 163 M 2 90 163 F 3 87 198 M 4 63 164 F 5 90 168 F 6 71 178 F

順伯的窩

(23)

7 58 191 M 8 80 194 F 9 91 185 F 10 89 176 M 23.

A =

1 2 3 2

2 1 6 4

4 7 2 5

,

B =

1 3 5 2

0 1 3 4

2 4 7 3

1 5 1 2

AB

−1

BA

T

24.

某班考試成績和性別紀錄如下

(

資料是依照學生座號

1

2

3

· · ·

依序紀錄

;NA

代表缺考

):

成績

: 70,45, 85,NA, 50,NA, 68, 85,55,35,0, 75

性別

: m, f, f, m,f, m, f, m,f, f, f, m (a)

rbind

指令建立一

2

維資料

(2

列矩陣

:

1

m,0

f) (b)

本班共有多少學生

?

男女生各多少人

? ( )

考試成績最高分及最低分是幾分

? (d)

考試成績及格

(

≥ 60

)

的座號

?

共有幾人及格

? (e)

男女成績平均各是多少

? 25. 10

位學生的期中考及期末考成績

(

依座號

1,2,3,

· · ·

,10)

其中

NA

表缺考

,

如下

:

期中考

:70,80,67,54,88,64,NA,73,90,74

期末考

:83,88,73,72,80,67,56,81,87,79

(a)

建立一

2

維資料

(

列名稱分別

"

期中考

,"

期末考

,

行名稱分別為座號

"no_1'',"no_2'',

· · ·

,"no_10'') (b)

求期中考平均成績

?

( )

若座號

7

號學生的期中考補考成績為

54,

請補登錄該學生成績

?

(d)

若學期成績計算方式為期中考佔

40%

,

期末考佔

60%

,

計算每位學生的學期成績

?

找出

哪幾位學生學期成績不及格

?

找出哪幾位學生學期成績

80

分以上

?

26.

data.frame

指令建立數據資料

"stuData

其中學生

ID:1,2,3,4,5

。 學生名

name

依序為

:"

","

大雄

","

胖虎

","

小新

","

大白

"

考試成績

s ore

依序為

:80,60,90,70,50 27.

調查小汽車乘客人數是否繫安全帶數據資料

,

data.frame

指令建立資料

" ar.dat

其中乘客人數

passengers:24 0 11 2 31 00 3 21 2 10 21 1 20 0 13 22 3 10 3

是否繫安全帶

seatbelt:"Y","N","Y","Y","Y","Y","Y","Y","Y","Y","N","Y","Y", "Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","N","Y","Y","Y","Y" 28.

若矩陣

X =

1 68

1 61

1 63

1 70

1 69

1 65

1 72

;

x

變數

:168,61,63,70,69,65,72

Y

變數

:155,99,115,205,170,125,220 (a)

bind

指令

,

建立

X

矩陣

順伯的窩

(24)

(b)

若矩陣乘積

(X

t

X)B = X

t

Y

,

solve

指令及矩陣運算解出

B

矩陣

?

29.

任意輸入兩數值

a,b

,

並從螢幕列印出

"

您輸入

a,b

值各為

?"

並顯示出

a + b =

的值

?

(25)

1.4

讀存取

R

資料檔或外部資料檔

讀存取

R

軟體的資料格式

:rda

載入

R

資料檔

load("le.rda")

將物件儲存

rdata

: save.image("le.rda")

使用資料框架函式

read.table()

read. sv()

讀入或輸入外部資料檔案

,

最容易。 直接讀取整個

外部檔案進入資料框架

,

外部檔案常常要求有特定的格式

,

例如

1. ASCII

形式的檔案

,

多數檔編輯器

,

資料庫

,

試算表等軟體可以存取

2.

第一的列

(

) (line, row)

可以有該資料各個變數的



變數名稱

 (variablenames)

或是

â

列的

名字

 ( olumnname)

3.

其餘的列

(line, row),

是各個變數的值

.

4.

資料之間是空格分開

,

或其他特定符號

(

逗號

,Tab)

分隔

. 5.

資料是文字類型

,

通常以雙引號

" 

形式

6.

â,â

分開變數值的

ASCII

形式檔案

,

一般成為

omma-separated-variableformat,

檔案名

通常以

. sv

作為延伸檔名

,

7.

第一欄

( olumn)

有時候是

â

列標籤

 (rowlabel)

或是

â

列的名字

 (rowname)

讀取資料檔技巧

: 1.

在你要讀入

R

語言前務必先看過資料檔格式

,

再決定用哪種命令函數讀取資料檔。

2.

注意資料是否有 「欄位名稱」

,

分隔符號是什麼

? 3.

要注意輸入的符號是前斜線

"

/



還是後斜線

"

\

 4.

在你的作業系統中資料可否利用

"

複製

 Ctrl

+

C,"

張貼

Ctrl

+

V

功能

,

如果可以的話

,

s an()

指令是個不錯的選擇 。

資料或分析結果

,

輸出至外部檔案

,

供其他軟體使用

,

主要 使用資料框架函式

write.table(),

相對

read.table(),

輸出資料

(

資料框架或矩陣

)

至外部資料檔案

,

最容易

.

對大型資料

,

可以使用

MASS

套件中的

write.matrix()

會較有效率

. R

內建的鳶尾花

(iris)

資料集是非常著名的生物資訊資料集之一

,

取自美國加州大學歐文分校的機

械學習資料庫

http://ar hive.i s.u i.edu/ml/datasets/Iris,

資料的筆數為

150

,

共有五個欄位

: 1.

花萼長度

(Sepal Length):

計算單位是公分。

2.

花萼寬度

(Sepal Width):

計算單位是公分。

3.

花瓣長度

(Petal Length):

計算單位是公分。

4.

花瓣寬度

(Petal Width):

計算單位是公分。

5.

類別

(Class):

可分為

Setosa,Versi olor

Virgini a

三個品種。

(26)

讀取

ASCII

表格形式的資料

:

利用

read.table

讀檔

,write.table

為輸出檔案

read.table(file, header = TRUE, sep = ",", quote = "\"", de = ".",

fill = TRUE, omment. har = "", ...)#

讀取

txt,data

資料檔

write.table(x, "myNewData.txt",append=FAL SE, quote=FALSE, sep="\t")#

匯出

txt

資料檔

write.table()

可以匯出資料成為

txt

或是

sv

格式到指定的目錄

read.table

適合讀取表格資料

,

但較不適合讀取大型矩陣資料檔

,

欲讀取大量矩陣資料可用指令

"s an

取代。

le=

資料名稱

header=

資料開頭是否有變數名稱

,

預設值

=TRUE

sep =

資料分隔符號

,

如果是

sep=" ",

表示分隔為空白鍵或

Tab("\t'')

做區隔

quote =

資料中的字串符號

,quote=" "

代表關閉此功能

de =

資料是否含小數點或分號。

â.â

為實數的小數點。

ll=

每一列資料長度是否不同

,

預設值

=TRUE

omment. har =

預設值

" "

代表關閉

omment

row.names = NULL

表示第一欄無列標籤

append=

首列

header line

預設值為

False

資料檔變數之間為

" 

空白分隔或

Tab

分隔的

le.txt

sepal_length sepal_width petal_length petal_width iris

1 5.1 3.5 1.4 0.2 setosa

2 4.9 3.0 1.4 0.2 setosa

3 4.7 3.2 1.3 0.2 setosa

4 4.6 3.1 1.5 0.2 setosa

5 5.0 3.6 1.4 0.2 setosa

資料檔變數之間為

",

分隔的

le.txt

le. sv

sepal length,sepal width,petal length,petal width,iris

5.1,3.5,1.4,0.2,Iris-setosa

4.9,3,1.4,0.2,Iris-setosa

4.7,3.2,1.3,0.2,Iris-setosa

4.6,3.1,1.5,0.2,Iris-setosa

5,3.6,1.4,0.2,Iris-setosa

順伯的窩

(27)

read.table("d:/math work/data/iris.txt",sep=" ",he ader =T,s kip= 0) #

空白

read.table("d:/math work/data/iris_tab.txt",s ep=" \t", head er=T ,ski p=0 )#Ta b

read.table("d:/math work/data/iris_ sv.txt",s ep=" ,",h eade r=T, skip =0) #

逗號

read.table("d:/math work/data/iris.data",sep= ",") #

逗號

write.table(x,"d:/myNewDa ta.t xt", appe nd=F ALSE ,quo te=F ALSE ,sep ="," )#

匯出資料

write.table(x,"myNewData. sv" ,sep ="," ,row .nam es = FALSE) #

匯出

sv

資料檔

讀取檔案較大的

sv

資料

:

若格式檔為

. sv,

變數間以

sep=",

做區隔則用指令

read. sv()

來讀取資

read. sv(file,header = TRUE, sep = ",", quote = "\"",de = ".",

fill = TRUE, omment. har = "", ...)#

讀取

le. sv

資料檔

write. sv(x,"myNewData. s v",r ow.n ames = FALSE)#

匯出

sv

資料檔

相當於

write.table(x,"myNewData. s v",s ep=" ,",r ow.n ames = FALSE)#

匯出

sv

料檔

執行

write. sv()

,

不需要指定分隔的符號

,

在重新讀取時

,

也不需要刻意指定

,

仍然可以匯入

正確的資料。

read. sv("d:/math work/data/iris. sv",header =T,s kip= 0)

讀取向量資料檔

s an(): s an()

可以讀取向量型態的外部資料

,

但是無法讀取表格

,

是一個處理簡

單資料的指令。 適合矩陣形式資料

(

同屬性

)

s an(file="",what=double( ),nm ax=- 1,n= -1,s ep=" ",de =". ",sk ip=0 , om men t. h ar=" ",.. .)

tips:

若可以將要輸入的資料

Ctrl+C

複製好

,

則在

RStudio

作業平台輸入

>x=s an()

Crtl+V

貼上資料即可。

le:

資料檔案位址路徑名稱

what =double()

資料兩倍精密度

nmax

設定最多讀入多少個數值

,-1

表無限制。

n

設定讀入多少個數值。

-1

表無限制。

sep =

資料之間分隔符號

,

如果是

sep=" ",

表示分隔為空白鍵或

Tab("\t'')

做區隔。

預設為空格或換行符號。

de =

資料是否含小數點或分號。

skip=

前幾列資料不讀入。

omment. har =

預設值

" "

代表關閉

omment

(28)

資料檔

ex1.txt

如右

:

年齡

薪水

(

萬元

)

30 3.2

28 2.5

40 3.4

32 2.8

45 3.6

28 2.2

36 4

42 4.5

58 4.8

50 4.6

> x=s an("d:/math work/data/ex1.txt",skip=0)

Error in s an("d:/math work/data/ex1.txt", skip = 0) :

s an() expe ted 'a real', got '

年齡

'

資料的第一列為

"

行變數名稱



與底下數值資料不同屬性

,

因此我們必須放棄讀取第一列

,

才能把

數值資料讀入

>x=s an("d:/math work/data/ex1.txt",skip=1) Read 20 items [1℄ 30.0 3.2 28.0 2.5 40.0 3.4 32.0 2.8 45.0 3.6 [11℄ 28.0 2.2 36.0 4.0 42.0 4.5 58.0 4.8 50.0 4.6

所讀入資料為

1

維向量資料

,

我們再把資料結構調整為

10 × 2

矩陣

,

並輸入

"

行變數名稱

 > ex1=matrix(x, (10,2),byrow= T) > olnames(ex1)= ("

年齡

","

薪水

(

萬元

)") > ex1

年齡 薪水

(

萬元

) [1,℄ 30 3.2 [2,℄ 28 2.5 [3,℄ 40 3.4 [4,℄ 32 2.8 [5,℄ 45 3.6 [6,℄ 28 2.2 [7,℄ 36 4.0 [8,℄ 42 4.5 [9,℄ 58 4.8 [10,℄ 50 4.6

若資料檔

ex1.txt

內變數間的分隔符號為

",

Tab

則我們將

sep

參數設定為

sep=",''

sep="\t''

來讀入資料

x=s an("d:/math work/data/ex1.txt",sep=",", skip =1)

x=s an("d:/math work/data/ex1",sep="\t",ski p=1)

(29)

下載安裝套件

: install.pa kages("pa kage") R

軟體安裝後

,

安裝目錄會有基本套件

(Pa kages)

若欲使用非基本套件中的某函數功能

,

須先在程式中使用

library()

函數來載入套件。 基本套件

(

無須載入

)

: 1. datasets:

基本範例資料檔

(Iris) 2. grDevi xs:

圖形裝置套件

3. graphi s

基本圖形套件

4. grid:grid

圖形版面設定套件

5. method:R

物件使用方法及類別

6. stats:

統計函數套件

7. stats4:

使用

S4 lass

物件導向方式所寫的統計套件

8. t ltk:

T l/Tk

圖形介面語言溝通的工具套件

9. tools:

管理與程式開發有關的工具套件

10. utils:

其他常用工具函數

Windows GUI

圖形介面中

,

可從

p

程式套件

y

⇒ p

安裝程式套件

y

選單執行套件安裝。

R

軟體會要求選擇儲存

R

軟體的

CRAN

鏡射網站位置

, "Taiwan(Taipeh),

再選擇自己要安裝

的套件名稱

,R

軟體即會從

CRAN

鏡射網站抓取相關的套件安裝在電腦之中。 我們也可以自行

從作業系統中安裝非基本套件

,

語法為

install.pa kages("pa kage")

只需安裝一次就行。

有用的套件

(Pa kage) 1. gdata

套件

:

讀存取外部資料檔工具

2. splines

套件

:

回歸分析線性函數及類別功能

3. mosai

套件

:

統計與數學工具

4. rootSolve

套件

:

求方程式近似根

,

微分方程式

5. dplyr

套件

:

處理數據資料時

,

基本數據套件。 特別適用於按類別資料數據。

6. ggplot2:

用於製作漂亮圖形的著名包裝。

ggplot2

允許您使用圖形語法來構建分層的

,

自定義的繪圖。

7. ggmap:

直接從

Google

地圖下載街道地圖

,

並將其用作

ggplots

中的背景。

(For Spatial data) 8. MLR:Python

R

之前飆升的最大原因之一是它的機器學習重點庫

(

s ikit-learn),

然後

MLR

,

它允許我們執行各種機器學習任務。

MLR

包括我們在項目中使用的所有

流行的機器學習算法。

9.

· · ·

查詢已載入套件

:library()

查看自己電腦內已安裝哪些套件

載入套件

:

R

軟體中每次執行非基本安裝套件

(Pa kage)

時需載入

,

使用

library("pa kage")

載入套件

讀取

Ex el

:

最穩定的辦法還是轉成

sv

,

利用

read.table()

讀入資料。 要讀取

Mi rosoftEx el

資料首先必須載入套件

"gdata

install.pa kages("gdata",repos="http:// ran.us.r-proje t.org")

(30)

library(gdata);read.xls("ex elle.xls",sheet = 1,header =TRUE)

若資料儲存為

Mi rosoft Ex el

>install.pa kages("gdata" ,rep os=" http :// ran. us.r -pro je t .org ") #

首次

安裝套件後

,

重新執行

R-studio >library(gdata)

>x=read.xls("d:/math work/data/Iris.xls") # 2007

年後

Mi rosoft Ex el

則為

"iris.xlsx'' > x

sepal.length sepal.width petal.length petal.width iris

1 5.1 3.5 1.4 0.2 Iris-setosa

2 4.9 3.0 1.4 0.2 Iris-setosa

3 4.7 3.2 1.3 0.2 Iris-setosa

4 4.6 3.1 1.5 0.2 Iris-setosa

5 5.0 3.6 1.4 0.2 Iris-setosa

注意資料儲存之編碼為

Big5

Utf-8

ANCI

或其它。 重新儲存資料檔、 編碼為

Utf-8

。 使用合適

的編碼參數

: read.table(âdata.txtâ, en oding="an i") read.table("test.utf8", sep = ",", header=TRUE, leEn oding ="UTF-8")

library():

查詢電腦已安裝可用的套件名稱

data():

查詢可用的資料檔名稱

R

語言基本安裝後包含幾個基本的資料檔可供利用

,"AirPassengers," ars,"faithful,"iris,"trees ,

· · ·

等。 如欲進一步查詢資料檔的說明可用

help(dataname)

指令查看。

>data(iris) #

引入

"iris

資料檔

>help(iris) #

查看

"iris

資料檔的說明

(

資料來源

,

格式

,

變數

,...

) 1.4

練習題

1.

通常的數據讀取函數之一採用以下參數

:header,sep,de ,row.names,skip,nrows

解釋他們的目

的。

2.

讀入資料檔

"possum. sv ,

並查看有哪些變數

?

如何查看

"sex

f

"totlngth

變數資料

3.

比較指令函數

s an()

read.table()

兩者差異

?

(31)

4.

說明如何從

Ex el

電子檔表格輸入數據資料

?

5.

從網址

http://www.biostatisti ien .eu/ spri ngeR /Wei ght_ birt h.xl s

下載資料檔

"Weight_birth.xls``

然後讀入

R

軟體

,

並命名為

x

物件資料。

(32)

1.5

作圖函數

plot()

函數

: R

中繪製任何內容的最常用函數是

plot()

函數。 這是一個通用函數

,

可用於散點圖

,

間序列圖

,

函數圖等。

如果給予單個向量資料

,

則在

y

軸上對該行繪製值數字或索引。 如果給出兩個相同長度向量資

,

則產生雙變量散佈圖。

urve()

函數

:

要在指定的值範圍內繪製連續函數

,

可以使用

urve()

函數。

urve(expr, from, to,add = FALSE, ...)

> urve(sin(x), from = 0, to = 2*pi)

>abline(7,2, ol="green") # y=7+2x ,h=*, v=*

我們可以在圖形視窗中添加幾個不同的功能。 要添加點

,

我們使用

points()

指令 。 要添加一條

直線

,

可以使用

abline()

函數。 線條函數用於添加更多一般線條。 它繪製了指定的點

,

並用直線

連接它們。 類似於在繪圖函數中添加參數

type =l

。 參數

add = TRUE,

曲線將添加到圖形

points()

函數

:

在已經繪圖圖中增加點

,

可以使用

points(x,y)

函數

,

(x, y)

為向量。

在函數添加參數

type=b

為顯示點位置

,

點與點間以直線連接。

type=l

為點與點以直線連

,

不顯示點位置。

4:

作圖常用指令函數

指令

用法說明簡介

abline()

增畫一直線

(

給予斜率

,y

截距

)

、 鉛直線或水平線

arrows()

坐標增加一方向箭頭

lines()

連接兩點的線

points()

增畫點坐標位置

spline()

在資料點間內插方法

(

平滑曲線連接

) rug()

x

坐標軸增劃標記

segments()

增劃割線

(

lines() ) text()

在圖形中增添文字

title()

圖形標題

,

次標題等

範例

1: > urve(sin(x), from = 0, to = 2*pi, ol=2,lty=1)

> points(x,sin(x),type="b", p h= 19 o l=1, lty= 2)

> points(spline(x,sin(x)),t ype= "b", p h= 4)

> urve(sin(x), from = 0, to = 2*pi, ol=2,lty=1) #

函數關係作圖

> x= (seq(from=0,to=2*pi,by =0.5 ))

> points(x,sin(x),type="b", p h= 19, ol=1 ,lty =2) #

點與點連接折線

> points(spline(x,sin(x)),t ype= "b", p h= 4, o l=3, lty= 3) #

點與點平滑曲

(33)

> legend(4, 0.5, legend= (" urve", "points","spline"),

ol= ("red", "bla k","green"), lty=1:3, ex=2) #

圖例說明

>abline(h=0, ol="blue") #

水平直線

y=0

0

1

2

3

4

5

6

−1.0

−0.5

0.0

0.5

1.0

x

sin(x)

curve

points

spline

1:

曲線作圖、 點描法與平滑內插曲線

作圖參數

:

ol:

用於設定默認的繪圖顏色

lty:

直線類型。 參數的值可以為整數

:0

為空

,1

為實線

(

預設

),2

為虛線

,3

為點線

p h:

設置點的類型

ex:

設置文本和符合的尺度

p h:

設置點的類

> par(mfrow = (2, 2)) #

圖形以

2x2

格輸出

> par(lend = 1) #

設置線結束端的形狀

1="butt" > par(bg = " ornsilk") #

作圖背景顏色設定

> par(xlog = TRUE) # x

軸是否設為對數單位

範例

2:

汽車行駛哩數與輪胎胎面磨損數據如下

: mileage 0 4 8 12 16 20 24 28 32 tread wear 394 329 291 255 229 204 179 163 150

若已知其回歸線截距

360,

斜率

−7.3

,

有三種方法可在其散佈圖增畫回歸線

> miles = (0:8)*4 # 0 4 8 ... 32 > tread = s an() 1: 394 329 291 255 229 204 179 163 150 10: Read 9 items

> plot(miles,tread) # make the s atterplot

>abline(lm(tread ~ miles))

## or as we know the inter ept and slope

> abline(360,-7.3) ## or using points > points(miles,360 - 7.3*miles,type="l") ## or using lines > lines(miles,360 - 7.3*miles) ## or using urve

> urve(360 - 7.3*x,add=T) # add a fun tion of x

(34)

0

5

10

15

20

25

30

150

200

250

300

350

400

miles

tread

0

5

10

15

20

25

30

150

200

250

300

350

400

miles

tread

2:

在圖中增加一直線

範例

3:

在圖中增添文字

data(mammals) atta h(mammals) names(mammals) #

資料的變數名稱

plot(body,brain,p h=16,xl ab= "Bod y weight (kg)", ylab="Brain weight (g)",

xlim= (0,280), ylim= (0,1350)) # xlim ylim

限制作圖範圍

text(x=body[ (21,32,56,36 )℄, y=br ain[ (21 ,32, 56,3 6)℄,

labels=X[ (21,32,56,36)℄,po s=4) # pos

文字位置

1

2

3

4

右方

deta h(mammals)

0

50

100

150

200

250

0

200

400

600

800

1000

1200

1400

Body weight (kg)

Br

ain w

eight (g)

0

50

100

150

200

250

0

200

400

600

800

1000

1200

1400

Body weight (kg)

Br

ain w

eight (g)

Donkey

Human

Pig

Kangaroo

3:

在圖中增加文字

範例

4:

作圖點符號、 大小與顏色選擇

>plot(1,1,xlim= (1,7.5),yl im= (1. 75,5 ),ty pe=" n",a xes= F,xl ab=" ",yl ab=" ") #

作圖點

>box() #

圖框格

>points(1:7, rep(4.5, 7), ex=1:7, ol=1:7, p h=0:6) #

點型式

p h0~6 >text(1:7,rep(3.5, 7), labels=paste(0:6), ex=1:7, ol=1:7) #

張貼文字

0~6

>points(1:7,rep(2.5,7), p h=(0:6)+7) #

點型式

p h7~13

>text((1:7), rep(2.5,7), paste((0:6)+7), pos=4) #

張貼文字

7~13 >points(1:7,rep(2,7), p h=(0:6)+14) #

點型式

p h14~20

(35)

>text((1:7), rep(2,7), paste((0:6)+14), pos=4) #

張貼文字

14~20

0

1

2

3

4

5

6

6

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

0

1

2

3

4

5

6

4:

圖形中不同的點符號與大小

view. olours <- fun tion(){

plot(1, 1, xlim= (0,14), ylim= (0,3), type="n", axes=F,

xlab="",ylab="")

text(1:6, rep(2.5,6), paste(1:6), ol=palette()[1:6℄, ex=2.5)

text(10, 2.5, "Default palette", adj=0)

rain hars <- ("R","O","Y","G","B","I"," V")

text(1:7, rep(1.5,7), rain hars, ol=rainbow(7), ex=2.5)

text(10, 1.5, "rainbow(7)", adj=0)

mtxt <- substring(" m. olors", 1:9,1:9)

# Split â m. olorsâ into its 9 hara ters

text(1:9, rep(0.5,9), mtxt, ol= m. olors(9), ex=3)

text(10, 0.5, " m. olors(9)", adj=0)

} box() view. olours() 1.5

練習題

1.

假設您使用命令曲線

curve(cos(x))

繪製了一個繪圖。 您將使用哪條

R

指令將此圖作為

PDF

保存在名為

myplot.pdf

的文件中

? 2.

詳細說明該指令的效果

par(mfrow= (3,2)) 3.

說明指令

layout()

功能用於什麼

? 4.

您將使用哪個命令將散點圖添加到預先存在的繪圖中

?

順伯的窩

(36)

1

2

3

4

5

6

Default palette

R

O

Y

G

B

I

V

rainbow(7)

c

m

.

c

o

l

o

r

s

cm.colors(9)

5:

圖形中不同的顏色

lty=1

lwd=2

lty=2

lwd=2

lty=3

lty=3

lwd=2

lty=4

lwd=2

lty=5

lwd=2

lty=6

lwd=2

font=1 plain

cex=1

font=2 bold

cex=2

font=3 italic

font=4 bold italic

cex=3

φοντ=5

symbol

Line type & Fonts family

6:

線型式與粗細大小

(37)

5.

您將使用函數

plot()

的哪個參數來設定點之間連接線段

? 6.

繪製一個直線的指令函數是什麼

? 7.

您將使用哪個參數來管理繪圖中的顏色設定

? 8.

給出顯示圖像的指令函數

,

其值以矩陣

X

輸出

,

您將使用哪個功能來顯示圖像

?

以使輸出與控

制台中顯示

X

的方式一致。

9.

您將使用哪個指令函數在繪圖中添加文字

? 10.

您可以使用哪個函數指令

,

通過單擊鼠標來查找繪圖中點的坐標

? 11.

詳細解釋指令

par(ask=TRUE)

的效果

?

12.

函數

par()

的哪個參數將用於指令函數

urve()

繪製的線的類型

?par()

的哪個參數將用在散點

圖中顯示其他符號而不是小圓圈

? 13.

提供說明列表以顯示以下圖表。 中軸系統必須以紅色顯示。 餘弦曲線必須以藍色顯示

?

−10

−5

0

5

10

−2

−1

0

1

2

Sinus and cosinus curves

X axis

sin(x)

β

^

1

14.

靈長類動物的體重與腦容量資料如下

,

先建立資料並作

(Bodywt,Brainwt)

的散佈圖

,

並在旁

註記靈長類動物名

? Bodywt Brainwt Potar monkey 10.0 115 Gorilla 207.0 406 Human 62.0 1320 Rhesus monkey 6.8 179 Chimp 52.2 440 15.

順伯的窩

數據

圖 6: 線型式與粗細大小
表 6: 一般數學函數 log10(x) 以 10 為底的 log 函數 
eiling(x) 大於等於 x 的最小整數 oor(x) 小於等於 x 的最大整數 round(x) 最接近 x 的整數 ( 四捨五入 ) round(x,n) 將 x 四捨五入到第 n 位數 trun
(x) 傳回 x 的整數部份 signif(x,k) 傳回 x ( 有效位數 k 位 ) log(x,base) 以 base 為基底計算 x 的對數值 
hoose(n,k) 計算組合數值 C n k fa
torial(x)
表 10: 基本運算指令 +-*/ 加減乘除運算 ^,** 指數 %/% 整數商 %% 餘數計算 &amp; 可用於向量的 and | 可用於向量的 or seq(by) 產生以 by 為遞增值的數列 length() 計算元素個數 sum() 元素相加 
umsum() 累積相加 prod() 元素相乘 
umprod() 累積相乘 表 11: 常用數學函數 exp();log(x,base) 指數 ; 對數函數
表 12: 常用統計函數 sum(x) x 資料的和 prod(x) x 資料的乘積 max(x) x 資料的最大值 min(x) x 資料的最小值 whi
h.max(x) 傳回 x 資料最大值的索引 whi
h.min(x) 傳回 x 資料的最小值的索引
+7

參考文獻

相關文件

[r]

自從 Engle(1982)提出 ARCH 模型以來,已經超過 20 年,實證上也有相當多的文獻 探討關於 ARCH 族模型的應用,Chou(2002)將 GARCH

We compare the results of analytical and numerical studies of lattice 2D quantum gravity, where the internal quantum metric is described by random (dynamical)

若股票標的公司的財務體質不健全,或公 司管理階層刻意隱瞞經營危機事實,導致

訓練目的之一為小組討論中學生擷取材 料時,可用自然流暢的口語表達,不顯

MTL – multi-task learning for STM and LM, where they share the embedding layer PSEUDO – train an STM with labeled data, generate labels for unlabeled data, and retrain STM.

Adopt the y value of a nearby point: similar ee t by a basis fun tion:2. Learning From Data-Le ture

Model checking: residuals can be obtained by 1-step ahead forecast errors at each time point, (observations minus the fitted value) Then if the model is adequate, residuals should